blob: 005cf3d08b4329863f5f6d2053573a89de3830cf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.text.tests.performance;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.test.performance.Dimension;
import org.eclipse.test.performance.Performance;
import org.eclipse.test.performance.PerformanceMeter;
import junit.framework.TestCase;
/**
* @since 3.3
*/
public class PerformanceTestCase2 extends TestCase {
private String fBaseScenarioId;
private List<PerformanceMeter> fPerformanceMeters;
public PerformanceTestCase2() {
super();
}
public PerformanceTestCase2(String name) {
super(name);
}
protected int getWarmUpRuns() {
return 20;
}
protected int getMeasuredRuns() {
return 20;
}
@Override
protected void runTest() throws Throwable {
assertNotNull(getName());
Method runMethod= null;
try {
// use getMethod to get all public inherited
// methods. getDeclaredMethods returns all
// methods of this class but excludes the
// inherited ones.
runMethod= getClass().getMethod(getName(), PerformanceMeter.class);
} catch (NoSuchMethodException e) {
fail("Method \""+getName()+"\" not found"); //$NON-NLS-1$//$NON-NLS-2$
}
assertTrue("Method \"" + getName() + "\" should be public", Modifier.isPublic(runMethod.getModifiers())); //$NON-NLS-1$ //$NON-NLS-2$
try {
int warmUpRuns= getWarmUpRuns();
PerformanceMeter nullMeter= Performance.getDefault().getNullPerformanceMeter();
Object[] args= { nullMeter };
for (int i= 0; i < warmUpRuns; i++)
runMethod.invoke(this, args);
int measuredRuns= getMeasuredRuns();
PerformanceMeter meter= createPerformanceMeter();
args[0]= meter;
for (int i= 0; i < measuredRuns; i++)
runMethod.invoke(this, args);
commitAllMeasurements();
assertAllPerformance();
}
catch (InvocationTargetException e) {
e.fillInStackTrace();
throw e.getTargetException();
}
catch (IllegalAccessException e) {
e.fillInStackTrace();
throw e;
}
}
/**
* Returns the base scenario id for this test which has the default
* scenario id as its default.
*
* @return the base scenario id
*/
protected final String getBaseScenarioId() {
if (fBaseScenarioId == null)
fBaseScenarioId= Performance.getDefault().getDefaultScenarioId(this);
return fBaseScenarioId;
}
/**
* Create a performance meter with the given scenario id. The
* performance meter will be disposed on {@link #tearDown()}.
*
* @param scenarioId the scenario id
* @return the created performance meter
*/
private PerformanceMeter internalCreatePerformanceMeter(String scenarioId) {
PerformanceMeter performanceMeter= Performance.getDefault().createPerformanceMeter(scenarioId);
addPerformanceMeter(performanceMeter);
return performanceMeter;
}
/**
* Add the given performance meter to the managed performance meters.
*
* @param performanceMeter the performance meter
*/
private void addPerformanceMeter(PerformanceMeter performanceMeter) {
if (fPerformanceMeters == null)
fPerformanceMeters= new ArrayList<>();
fPerformanceMeters.add(performanceMeter);
}
/**
* Commits the measurements captured by all performance meters created
* through one of this class' factory methods.
*/
protected final void commitAllMeasurements() {
if (fPerformanceMeters != null)
for (PerformanceMeter performanceMeter : fPerformanceMeters)
performanceMeter.commit();
}
/**
* Asserts default properties of the measurements captured by the given
* performance meter.
*
* @param performanceMeter the performance meter
* @throws RuntimeException if the properties do not hold
*/
protected final void assertPerformance(PerformanceMeter performanceMeter) {
Performance.getDefault().assertPerformance(performanceMeter);
}
/**
* Asserts default properties of the measurements captured by all
* performance meters created through one of this class' factory
* methods.
*
* @throws RuntimeException if the properties do not hold
*/
protected final void assertAllPerformance() {
if (fPerformanceMeters != null)
for (PerformanceMeter performanceMeter : fPerformanceMeters)
assertPerformance(performanceMeter);
}
/**
* Create a performance meter with the base scenario id. The
* performance meter will be disposed on {@link #tearDown()}.
*
* @return the created performance meter
*/
protected final PerformanceMeter createPerformanceMeter() {
PerformanceMeter perfMeter= internalCreatePerformanceMeter(getBaseScenarioId());
String localFingerprintName= getLocalFingerprints().get(getName());
if (localFingerprintName != null)
Performance.getDefault().tagAsSummary(perfMeter, localFingerprintName, Dimension.ELAPSED_PROCESS);
String comment= getDegradationComments().get(getName());
if (comment != null)
Performance.getDefault().setComment(perfMeter, Performance.EXPLAINS_DEGRADATION_COMMENT, comment);
return perfMeter;
}
/**
* Returns a map with local fingerprints.
*
* @return the map with local fingerprints ( test name -> short name)
*/
protected Map<String, String> getLocalFingerprints() {
return Collections.EMPTY_MAP;
}
/**
* Returns a map with degradation comments.
*
* @return the map with degradation comments ( test name -> comment)
*/
protected Map<String, String> getDegradationComments() {
return Collections.EMPTY_MAP;
}
}