diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml new file mode 100644 index 00000000..5628a46c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml @@ -0,0 +1,316 @@ +<?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project name="dirscanner"> + <description> + Contains tests that measure the relative performance of Ant's + directory scanner. This is mainly used to compare performance + changes between Ant releases. + + Before you run any tests, you need to set up the environment by + running the setup or big-setup target. Note that this will create + a directory tree holding 10000 (setup) or 100000 (big-setup) + directories and about 22000 (setup) or 222000 (big-setup) files. + + The setup/big-setup targets require Ant 1.7.0 or later. It may be + a good idea to use the -logfile option. + + Consider taking a nap if you run Ant 1.6.x or 1.7.0 against a + "big" setup. + + If Ant 1.6.x is detected or the property ant16 has been specified + on the command line then the tests will use the pathconvert task + instead of resourcecount. So if you want to compare Ant 1.6.x + with later versions of you must specify ant16 on the command line + during your 1.[78].x tests. + + The tests will use the default settings of followsymlinks="true" + and casesensitive="true" unless those values get overwritten by + the properties symlinks and/or casesensitive on the command line. + </description> + + <property name="test.dir" location="${java.io.tmpdir}/dirscan.prf"/> + + <property name="symlinks" value="true"/> + <property name="casesensitive" value="true"/> + + <condition property="ant16"> + <contains string="${ant.version}" substring="1.6."/> + </condition> + + <echo>This is ${ant.version}</echo> + + <target name="prepare-setup"> + <mkdir dir="${test.dir}/src/org/apache/tools/ant"/> + <mkdir dir="${test.dir}/dest"/> + <echo file="${test.dir}/src/org/apache/tools/ant/DirscannerSetup.java" + ><![CDATA[ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.File; +import org.apache.tools.ant.taskdefs.Mkdir; +import org.apache.tools.ant.taskdefs.Touch; + +public class DirscannerSetup extends Task { + private boolean biggerSetup = false; + + public void setBig(boolean b) { + biggerSetup = b; + } + + public void execute() { + Mkdir mkdir = new Mkdir(); + mkdir.bindToOwner(this); + Touch touch = new Touch(); + touch.bindToOwner(this); + String tmp = getProject().getProperty("test.dir"); + if (!biggerSetup) { + createTree(new File(tmp), mkdir, touch); + } else { + for (int i = 0; i < 10; i++) { + File f = new File(tmp, String.valueOf(i)); + createTree(f, mkdir, touch); + mkfiles(touch, f); + } + } + } + + private static void createTree(File root, Mkdir mkdir, Touch touch) { + for (int i1 = 0; i1 < 10; i1++) { + File f1 = new File(root, String.valueOf(i1)); + for (int i2 = 0; i2 < 10; i2++) { + File f2 = new File(f1, String.valueOf(i2)); + for (int i3 = 0; i3 < 10; i3++) { + File f3 = new File(f2, String.valueOf(i3)); + for (int i4 = 0; i4 < 10; i4++) { + File f4 = new File(f3, String.valueOf(i4)); + mkdir.setDir(f4); + mkdir.execute(); + mkfiles(touch, f4); + } + mkfiles(touch, f3); + } + mkfiles(touch, f2); + } + mkfiles(touch, f1); + } + } + + private static void mkfiles(Touch touch, File dir) { + touch.setFile(new File(dir, "A.txt")); + touch.execute(); + touch.setFile(new File(dir, "B.xml")); + touch.execute(); + } +}]]></echo> + <javac srcdir="${test.dir}/src" destdir="${test.dir}/dest"/> + <taskdef name="setup" + classname="org.apache.tools.ant.DirscannerSetup"> + <classpath> + <pathelement location="${test.dir}/dest"/> + </classpath> + </taskdef> + </target> + + <target name="setup" description="Sets up the environment for tests" + depends="prepare-setup"> + <setup/> + </target> + + <target name="big-setup" + description="Sets up the "big" environment for tests" + depends="prepare-setup"> + <setup big="true"/> + </target> + + <target name="cleanup" + description="removes the tree generated by setup"> + <delete dir="${test.dir}"/> + </target> + + <target name="define-scan-16" if="ant16"> + <macrodef name="scan"> + <attribute name="test"/> + <element name="patterns" optional="true"/> + <sequential> + <pathconvert property="@{test}"> + <path> + <fileset dir="${test.dir}" followSymlinks="${symlinks}" + casesensitive="${casesensitive}"> + <patterns/> + </fileset> + </path> + </pathconvert> + </sequential> + </macrodef> + </target> + + <target name="define-scan-17+" unless="ant16"> + <macrodef name="scan"> + <attribute name="test"/> + <element name="patterns" optional="true"/> + <sequential> + <resourcecount property="@{test}"> + <fileset dir="${test.dir}" followSymlinks="${symlinks}" + casesensitive="${casesensitive}"> + <patterns/> + </fileset> + </resourcecount> + </sequential> + </macrodef> + </target> + + <target name="define-scan" depends="define-scan-16,define-scan-17+"/> + + <target name="matchall" + depends="define-scan" + description="doesn't specify any patterns"> + <scan test="matchall"/> + </target> + + <target name="roots" + depends="define-scan" + description="only contains include patterns that match starts"> + <scan test="roots"> + <patterns> + <include name="1/2/3/**"/> + <include name="9/**"/> + </patterns> + </scan> + </target> + + <target name="many-roots" + depends="define-scan" + description="only contains include patterns that match starts"> + <scan test="many-roots"> + <patterns> + <include name="0/"/> + <include name="0/0/"/> + <include name="0/0/0/"/> + <include name="0/0/0/0/"/> + <include name="1/"/> + <include name="1/1/"/> + <include name="1/1/1/"/> + <include name="1/1/1/1/"/> + <include name="2/"/> + <include name="2/2/"/> + <include name="2/2/2/"/> + <include name="2/2/2/2/"/> + <include name="3/"/> + <include name="3/3/"/> + <include name="3/3/3/"/> + <include name="3/3/3/3/"/> + <include name="4/"/> + <include name="4/4/"/> + <include name="4/4/4/"/> + <include name="4/4/4/4/"/> + <include name="5/"/> + <include name="5/5/"/> + <include name="5/5/5/"/> + <include name="5/5/5/5/"/> + <include name="6/"/> + <include name="6/6/"/> + <include name="6/6/6/"/> + <include name="6/6/6/6/"/> + <include name="7/"/> + <include name="7/7/"/> + <include name="7/7/7/"/> + <include name="7/7/7/7/"/> + <include name="8/"/> + <include name="8/8/"/> + <include name="8/8/8/"/> + <include name="8/8/8/8/"/> + <include name="9/"/> + <include name="9/9/"/> + <include name="9/9/9/"/> + <include name="9/9/9/9/"/> + </patterns> + </scan> + </target> + + <target name="recursive-excludes" + depends="define-scan" + description="specifies include and exclude patterns with wildcards"> + <scan test="recursive-excludes"> + <patterns> + <include name="**/5/**"/> + <exclude name="**/6/**"/> + </patterns> + </scan> + </target> + + <target name="name-matches" + depends="define-scan" + description="specifies include and exclude patterns matching on file names"> + <scan test="names-matches"> + <patterns> + <include name="**/*.txt"/> + <exclude name="**/4/**"/> + </patterns> + </scan> + </target> + + <target name="many-patterns" + depends="define-scan" + description="specifies many include and exclude patterns"> + <scan test="many-patterns"> + <patterns> + <include name="*/1/**"/> + <include name="*/3/**/1/**"/> + <include name="6/**"/> + <include name="**/*.xml"/> + <include name="**/4/*"/> + <include name="**/2*/**"/> + <include name="**/X/**"/> + <include name="8/9/4/2/B.xml"/> + <include name="9/*"/> + <include name="0/*/**"/> + <exclude name="*/5/**"/> + <exclude name="*/7/**/0/**"/> + <exclude name="1/**"/> + <exclude name="**/*.txt"/> + <exclude name="**/0/*"/> + <exclude name="**/8*/**"/> + <exclude name="**/Y/**"/> + <exclude name="8/9/4/2/A.txt"/> + <exclude name="3/*"/> + <exclude name="7/*/**"/> + </patterns> + </scan> + </target> + + <target name="all" + depends="define-scan,matchall, roots, recursive-excludes, name-matches, many-patterns, many-roots"/> +</project> |