You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2008/09/18 11:21:14 UTC

svn commit: r696612 - /ant/core/trunk/src/etc/performance/dirscanner.xml

Author: bodewig
Date: Thu Sep 18 02:21:13 2008
New Revision: 696612

URL: http://svn.apache.org/viewvc?rev=696612&view=rev
Log:
performance tests for DirectoryScanner

Added:
    ant/core/trunk/src/etc/performance/dirscanner.xml   (with props)

Added: ant/core/trunk/src/etc/performance/dirscanner.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/etc/performance/dirscanner.xml?rev=696612&view=auto
==============================================================================
--- ant/core/trunk/src/etc/performance/dirscanner.xml (added)
+++ ant/core/trunk/src/etc/performance/dirscanner.xml Thu Sep 18 02:21:13 2008
@@ -0,0 +1,204 @@
+<?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 target.  Note that this will create a directory
+    tree holding 10000 directories and about 22000 files.
+
+    The setup target requires Ant 1.7.0 or later.
+
+    The tests use the pathconvert task whose performance should be
+    dominated by directory scanner, they would use ressourcecount if
+    that had been available in Ant 1.6.5.
+
+    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"/>
+
+  <echo>This is ${ant.version}</echo>
+
+  <target name="setup" description="Sets up the environment for tests">
+    <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 {
+    public void execute() {
+        Mkdir mkdir = new Mkdir();
+        mkdir.bindToOwner(this);
+        Touch touch = new Touch();
+        touch.bindToOwner(this);
+        String tmp = getProject().getProperty("test.dir");
+        for (int i1 = 0; i1 < 10; i1++) {
+            File f1 = new File(tmp, 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>
+   <setup/>
+  </target>
+
+  <target name="cleanup"
+          description="removes the tree generated by setup">
+    <delete dir="${test.dir}"/>
+  </target>
+
+  <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 name="matchall"
+          description="doesn't specify any patterns">
+    <scan test="matchall"/>
+  </target>
+
+  <target name="roots"
+          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="recursive-excludes"
+          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"
+          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"
+          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="matchall, roots, recursive-excludes, name-matches, many-patterns"/>
+</project>

Propchange: ant/core/trunk/src/etc/performance/dirscanner.xml
------------------------------------------------------------------------------
    svn:eol-style = native