]> source.dussan.org Git - aspectj.git/commitdiff
Add ClasspathManagerTestCase::testUnfoundClassPerformance
authorAlexander Kriegisch <Alexander@Kriegisch.name>
Thu, 25 Apr 2024 13:11:23 +0000 (15:11 +0200)
committerAlexander Kriegisch <Alexander@Kriegisch.name>
Fri, 26 Apr 2024 07:58:56 +0000 (09:58 +0200)
Performance regression test for #306, failing before the enhancement and
passing afterward.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
weaver/src/test/java/org/aspectj/weaver/bcel/ClasspathManagerTestCase.java

index 1c8d7a9188f72053cd0ad7ec983c0750213bf015..1dcce68426084ac918e089d6d444cb5061b7d181 100644 (file)
@@ -23,6 +23,7 @@ import org.aspectj.bridge.IMessage;
 import org.aspectj.bridge.IMessage.Kind;
 import org.aspectj.bridge.IMessageHandler;
 import org.aspectj.util.LangUtil;
+import org.aspectj.weaver.TypeFactory;
 import org.aspectj.weaver.UnresolvedType;
 import org.aspectj.weaver.bcel.ClassPathManager.ClassFile;
 
@@ -76,7 +77,33 @@ public class ClasspathManagerTestCase extends TestCase {
        }
 
        public void testInstructions() {
-               System.out.println("This test is really only for standalone usage as it need executing on multiple JDK levels");
+               System.out.println(
+                       "This test is mostly for stand-alone usage (rename 'xtest*' to 'test*'), " +
+                               "as it needs execution on multiple JDK levels"
+               );
+       }
+
+       /**
+        * See <a href="https://github.com/eclipse-aspectj/aspectj/issues/306">GitHub issue 306</a>
+        */
+       public void testUnfoundClassPerformance() {
+               final int ROUNDS = 10_000;
+               final int MAX_TIME = 500;
+
+               List<String> classPath = Arrays.asList(System.getProperty("java.class.path").split(File.pathSeparator));
+               //System.out.println(classPath);
+               ClassPathManager classPathManager = new ClassPathManager(classPath, null);
+               UnresolvedType unresolvedType = TypeFactory.createTypeFromSignature("Ljava/lang/String;");
+
+               long startTime = System.currentTimeMillis();
+               for (int i = 0; i < ROUNDS; i++)
+                       classPathManager.find(unresolvedType);
+               long duration = System.currentTimeMillis() - startTime;
+
+               assertTrue(
+                       String.format("Duration for %d rounds should be < %d ms, but was %d ms", ROUNDS, MAX_TIME, duration),
+                       duration < MAX_TIME
+               );
        }
 
        public void xtestSanity18accessing18RTJAR() throws IOException {