123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Matthew Webster - initial implementation
- *******************************************************************************/
- package org.aspectj.runtime.reflect;
-
- import java.lang.reflect.Method;
- import java.util.Timer;
- import java.util.TimerTask;
-
- import org.aspectj.lang.Signature;
-
- import junit.framework.TestCase;
-
- public class RuntimePerformanceTest extends TestCase {
-
- private static final Timer timer = new Timer(true);
- private static final long TIMEOUT = 10000;
- private static final long ITERATIONS = 1000000;
- private static final long WARMUP_ITERATIONS = 10000;
- private static final long EXPECTED_RATIO = 8;
- private static final Factory factory = new Factory("RutimePerformanceTest.java",RuntimePerformanceTest.class);
-
- private boolean savedUseCaches;
- private Method method;
- private Signature signature;
-
- private TimerTask task;
- private boolean abort;
-
- public RuntimePerformanceTest(String name) {
- super(name);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
-
- /* Save default state */
- savedUseCaches = SignatureImpl.getUseCache();
-
- /* If a test takes too long we can kill it and fail */
- abort = false;
- task = new TimerTask() {
- public void run () {
- abort = true;
- }
- };
- timer.schedule(task,TIMEOUT);
- }
-
- protected void tearDown() throws Exception {
- super.tearDown();
-
- /* Restore default state */
- SignatureImpl.setUseCache(savedUseCaches);
-
- task.cancel();
- }
-
- public void testToString () {
- Signature signature = makeMethodSig("test");
-
- SignatureImpl.setUseCache(false);
- warmUp(signature);
- long noCache = invokeSignatureToString(signature,ITERATIONS/EXPECTED_RATIO);
- System.out.println("noCache=" + noCache);
-
- SignatureImpl.setUseCache(true);
- warmUp(signature);
- long cache = invokeSignatureToString(signature,ITERATIONS);
- System.out.println("cache=" + cache);
-
- long ratio = (EXPECTED_RATIO*noCache/cache);
- System.out.println("ratio=" + ratio);
- assertTrue("Using cache should be " + EXPECTED_RATIO + " times faster: " + ratio,(ratio > EXPECTED_RATIO));
- }
-
- private long invokeSignatureToString (Signature sig, long iterations) {
- long start = System.currentTimeMillis();
- String s;
-
- for (long l = 0; !abort && (l < iterations); l++) {
- s = sig.toShortString();
- s = sig.toString();
- s = sig.toLongString();
- }
- if (abort) throw new RuntimeException("invokeSignatureToString aborted after " + (TIMEOUT/1000) + " seconds");
-
- long finish = System.currentTimeMillis();
- return (finish-start);
- }
-
- private void warmUp (Signature sig) {
- invokeSignatureToString(sig,WARMUP_ITERATIONS);
- }
-
- private Signature makeMethodSig (String methodName) {
- Class clazz = getClass();
- Class[] parameterTypes = new Class[] { String.class };
- String[] parameterNames = new String[] { "s" };
- Class[] exceptionTypes = new Class[] {};
- Class returnType = Void.TYPE;
- return factory.makeMethodSig(1,methodName,clazz,parameterTypes,parameterNames,exceptionTypes,returnType);
- }
- }
|