/******************************************************************************* * Copyright (c) 2000, 2015 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.core.tests.resources; import junit.framework.TestResult; import org.eclipse.core.tests.harness.LoggingPerformanceTestResult; import org.eclipse.core.tests.harness.PerformanceTestResult; /** * This class used to be the common superclass for all performance tests for * the Core project. It provides extensions to the JUnit infrastructure * to incorporate timers into test cases. This class has been superceded by * a newer eclipse-wide performance test suite. * * There are two distinct sets of timing mechanisms available, depending * on the type of operation being testing. For long running operations * with noticeable delays, use startTimer() and stopTimer(). This is * a more heavy-weight mechanism that allows logging, multiple * timers, and overlapping timers. * * For benchmarking operations that should be instantaneous, use the * startBench(), stopBench() methods. Here is an example: * * <code> * String benchName = "myOperation"; * int repeat = 500; * startBench(); * for (int i = 0; i < repeat; i++) { * //run the operation to be tested here * } * stopBench(benchName, repeat); * </code> * Note that only one operation can be tested at a time with this mechanism. * * If an instance of this class is run using a LoggingPerformanceTestResult, * an HTML log file will be maintained of all timing and garbage collecting, * in addition to any messages added using the log() method. In the absence * of a logging test result, all log events are written to the standard output. */ public abstract class OldCorePerformanceTest extends ResourceTest { protected long benchStart; protected LoggingPerformanceTestResult logger = null; protected PerformanceTestResult result = null; public OldCorePerformanceTest() { super(); } public OldCorePerformanceTest(String name) { super(name); } protected PerformanceTestResult defaultTest() { return new PerformanceTestResult(); } /** * Logs or writes string to console. */ public void perfLog(String s) { if (logger != null) { logger.log(s); } else { System.out.println(s); } } /** * A convenience method to run this test, collecting the results with a * default PerformanceTestResult object. * * @see PerformanceTestResult */ @Override public TestResult run() { PerformanceTestResult test = defaultTest(); run(test); return test; } /** * Runs the test case and collects the results in a PerformanceTestResult. * This is the template method that defines the control flow * for running a test case. */ public void run(PerformanceTestResult test) { result = test; if (test instanceof LoggingPerformanceTestResult) { logger = (LoggingPerformanceTestResult) test; } super.run(test); } protected void startBench() { for (int i = 0; i < 20; ++i) { System.gc(); } benchStart = System.currentTimeMillis(); } /** * Tell the result to start a timer with the given name. * If no timer exists with that name, result creates a new timer * and starts it running. */ protected void startTimer(String timerName) { result.startTimer(timerName); } protected void stopBench(String benchName, int numOperations) { long duration = System.currentTimeMillis() - benchStart; double perOp = (double) duration / (double) numOperations; String opString; if (perOp > 100.0) { opString = "(" + perOp + "ms per operation)"; //$NON-NLS-1$ //$NON-NLS-2$ } else { //Note us == microseconds opString = "(" + (perOp * 1000.0) + "us per operation)"; //$NON-NLS-1$ //$NON-NLS-2$ } System.out.println(benchName + " took " + duration + "ms " + opString); //$NON-NLS-1$ //$NON-NLS-2$ } /** * Tell the result to stop the timer with the given name. */ protected void stopTimer(String timerName) { result.stopTimer(timerName); } }