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