You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RuntimePerformanceTest.java 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*******************************************************************************
  2. * Copyright (c) 2004 IBM Corporation and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * Matthew Webster - initial implementation
  10. *******************************************************************************/
  11. package org.aspectj.runtime.reflect;
  12. import java.lang.reflect.Method;
  13. import java.util.Timer;
  14. import java.util.TimerTask;
  15. import org.aspectj.lang.Signature;
  16. import junit.framework.TestCase;
  17. public class RuntimePerformanceTest extends TestCase {
  18. private static final Timer timer = new Timer(true);
  19. private static final long TIMEOUT = 10000;
  20. private static final long ITERATIONS = 1000000;
  21. private static final long WARMUP_ITERATIONS = 10000;
  22. private static final long EXPECTED_RATIO = 8;
  23. private static final Factory factory = new Factory("RutimePerformanceTest.java",RuntimePerformanceTest.class);
  24. private boolean savedUseCaches;
  25. private Method method;
  26. private Signature signature;
  27. private TimerTask task;
  28. private boolean abort;
  29. public RuntimePerformanceTest(String name) {
  30. super(name);
  31. }
  32. protected void setUp() throws Exception {
  33. super.setUp();
  34. /* Save default state */
  35. savedUseCaches = SignatureImpl.getUseCache();
  36. /* If a test takes too long we can kill it and fail */
  37. abort = false;
  38. task = new TimerTask() {
  39. public void run () {
  40. abort = true;
  41. }
  42. };
  43. timer.schedule(task,TIMEOUT);
  44. }
  45. protected void tearDown() throws Exception {
  46. super.tearDown();
  47. /* Restore default state */
  48. SignatureImpl.setUseCache(savedUseCaches);
  49. task.cancel();
  50. }
  51. public void testToString () {
  52. Signature signature = makeMethodSig("test");
  53. SignatureImpl.setUseCache(false);
  54. warmUp(signature);
  55. long noCache = invokeSignatureToString(signature,ITERATIONS/EXPECTED_RATIO);
  56. System.out.println("noCache=" + noCache);
  57. SignatureImpl.setUseCache(true);
  58. warmUp(signature);
  59. long cache = invokeSignatureToString(signature,ITERATIONS);
  60. System.out.println("cache=" + cache);
  61. long ratio = (EXPECTED_RATIO*noCache/cache);
  62. System.out.println("ratio=" + ratio);
  63. assertTrue("Using cache should be " + EXPECTED_RATIO + " times faster: " + ratio,(ratio > EXPECTED_RATIO));
  64. }
  65. private long invokeSignatureToString (Signature sig, long iterations) {
  66. long start = System.currentTimeMillis();
  67. String s;
  68. for (long l = 0; !abort && (l < iterations); l++) {
  69. s = sig.toShortString();
  70. s = sig.toString();
  71. s = sig.toLongString();
  72. }
  73. if (abort) throw new RuntimeException("invokeSignatureToString aborted after " + (TIMEOUT/1000) + " seconds");
  74. long finish = System.currentTimeMillis();
  75. return (finish-start);
  76. }
  77. private void warmUp (Signature sig) {
  78. invokeSignatureToString(sig,WARMUP_ITERATIONS);
  79. }
  80. private Signature makeMethodSig (String methodName) {
  81. Class clazz = getClass();
  82. Class[] parameterTypes = new Class[] { String.class };
  83. String[] parameterNames = new String[] { "s" };
  84. Class[] exceptionTypes = new Class[] {};
  85. Class returnType = Void.TYPE;
  86. return factory.makeMethodSig(1,methodName,clazz,parameterTypes,parameterNames,exceptionTypes,returnType);
  87. }
  88. }