package com.revolsys.geometry.test.old.perf; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import com.revolsys.geometry.util.Stopwatch; /** * Runs {@link PerformanceTestCase} classes which contain performance tests. * * * * @author Martin Davis * */ public class PerformanceTestRunner { private static final String RUN_PREFIX = "run"; private static Method[] findMethods(final Class clz, final String methodPrefix) { final List runMeths = new ArrayList(); final Method meth[] = clz.getDeclaredMethods(); for (final Method element : meth) { if (element.getName().startsWith(RUN_PREFIX)) { runMeths.add(element); } } return (Method[])runMeths.toArray(new Method[0]); } public static void run(final Class clz) { final PerformanceTestRunner runner = new PerformanceTestRunner(); runner.runInternal(clz); } private PerformanceTestRunner() { } private void runInternal(final Class clz) { try { final Constructor ctor = clz.getConstructor(String.class); final PerformanceTestCase test = (PerformanceTestCase)ctor.newInstance("Name"); final int[] runSize = test.getRunSize(); final int runIter = test.getRunIterations(); final Method[] runMethod = findMethods(clz, RUN_PREFIX); // do the run test.setUp(); for (final int size : runSize) { test.startRun(size); for (final Method element : runMethod) { final Stopwatch sw = new Stopwatch(); for (int iter = 0; iter < runIter; iter++) { element.invoke(test); } // System.out.println(element.getName() + " : " + sw.getTimeString()); } test.endRun(); } test.tearDown(); } catch (final Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }