///*******************************************************************************
// * Copyright (c) 2004, 2006 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 - Initial API and implementation
// *******************************************************************************/
//package org.eclipse.core.tests.harness;
//
//import junit.framework.TestCase;
//import org.eclipse.core.runtime.CoreException;
//import org.eclipse.test.performance.Dimension;
//import org.eclipse.test.performance.Performance;
//import org.eclipse.test.performance.PerformanceMeter;
//
///**
// * Helper class for executing a performance test. Takes care of starting, stopping,
// * and commiting performance timers.
// */
//public abstract class PerformanceTestRunner {
//
// private String regressionReason;
// private String fingerprintName;
//
// public void setRegressionReason(String comment) {
// this.regressionReason = comment;
// }
//
// /**
// * Implemented by subclasses to perform the work to be measured.
// */
// protected abstract void test();
//
// /**
// * Executes the performance test the given number of times. Use the outer time
// * to execute the test several times in order to obtain a normalized average. Use
// * the inner loop for very fast tests that would otherwise be difficult to measure
// * due to Java's poor timer granularity. The inner loop is not needed for long
// * tests that typically take more than a second to execute.
// *
// * @param testCase The test that is running (used to obtain an appropriate meter)
// * @param outer The number of repetitions of the test.
// * @param inner The number of repetitions within the performance timer.
// */
// public final void run(TestCase testCase, int outer, int inner) {
// run(testCase, null, outer, inner);
// }
//
// /**
// * Executes the performance test the given number of times. Use the outer time
// * to execute the test several times in order to obtain a normalized average. Use
// * the inner loop for very fast tests that would otherwise be difficult to measure
// * due to Java's poor timer granularity. The inner loop is not needed for long
// * tests that typically take more than a second to execute.
// *
// * @param testCase The test that is running (used to obtain an appropriate meter)
// * @param localName the short name used to tag the local test
// * @param outer The number of repetitions of the test.
// * @param inner The number of repetitions within the performance timer.
// */
// public final void run(TestCase testCase, String localName, int outer, int inner) {
// Performance perf = Performance.getDefault();
// PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(testCase));
// if (regressionReason != null)
// perf.setComment(meter, Performance.EXPLAINS_DEGRADATION_COMMENT, regressionReason);
// try {
// for (int i = 0; i < outer; i++) {
// setUp();
// meter.start();
// for (int j = 0; j < inner; j++)
// test();
// meter.stop();
// tearDown();
// }
// if (localName != null)
// Performance.getDefault().tagAsSummary(meter, localName, Dimension.ELAPSED_PROCESS);
// if (fingerprintName != null)
// perf.tagAsSummary(meter, fingerprintName, Dimension.ELAPSED_PROCESS);
// meter.commit();
// perf.assertPerformance(meter);
// } catch (CoreException e) {
// CoreTest.fail("Failed performance test", e);
// } finally {
// meter.dispose();
// }
// }
//
// protected void setUp() throws CoreException {
// // subclasses to override
// }
//
// protected void tearDown() throws CoreException {
// // subclasses to override
// }
//
// /**
// * Sets the finger print name. Setting this value will make the test part
// * of the component finger print results. A value of null indicates that the
// * test is not a finger print test.
// * @param fingerprintName
// */
// public void setFingerprintName(String fingerprintName) {
// this.fingerprintName = fingerprintName;
// }
//}