Skip to content
Snippets Groups Projects
Commit cbae12f1 authored by Christian Wulf's avatar Christian Wulf
Browse files

simplied performance test;

adapted pmd rules
parent 3fc15c75
No related branches found
No related tags found
No related merge requests found
Showing
with 152 additions and 39 deletions
...@@ -2,11 +2,37 @@ ...@@ -2,11 +2,37 @@
<ruleset name="TeeTime ruleset" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" <ruleset name="TeeTime ruleset" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description> <description>This ruleset checks my code for bad stuff</description>
This ruleset checks my code for bad stuff
</description>
<rule ref="rulesets/internal/all-java.xml"></rule> <!-- warning: if you reference a pmd rulesets xml file more than once, only the first rule is applied; so check for duplicates -->
<!-- all java rules; on each new pmd release, check whether there were added new rulesets that need to be added here -->
<rule ref="rulesets/java/android.xml" />
<rule ref="rulesets/java/basic.xml" />
<rule ref="rulesets/java/braces.xml" />
<rule ref="rulesets/java/clone.xml" />
<rule ref="rulesets/java/codesize.xml" />
<!-- <rule ref="rulesets/java/comments.xml" /> -->
<!-- <rule ref="rulesets/java/controversial.xml" /> -->
<rule ref="rulesets/java/coupling.xml" />
<rule ref="rulesets/java/design.xml" />
<rule ref="rulesets/java/empty.xml" />
<rule ref="rulesets/java/finalizers.xml" />
<rule ref="rulesets/java/imports.xml" />
<rule ref="rulesets/java/j2ee.xml" />
<rule ref="rulesets/java/javabeans.xml" />
<rule ref="rulesets/java/junit.xml" />
<rule ref="rulesets/java/logging-jakarta-commons.xml" />
<rule ref="rulesets/java/logging-java.xml" />
<rule ref="rulesets/java/migrating.xml" />
<rule ref="rulesets/java/naming.xml" />
<rule ref="rulesets/java/optimizations.xml" />
<rule ref="rulesets/java/strictexception.xml" />
<rule ref="rulesets/java/strings.xml" />
<rule ref="rulesets/java/sunsecure.xml" />
<rule ref="rulesets/java/typeresolution.xml" />
<rule ref="rulesets/java/unnecessary.xml" />
<rule ref="rulesets/java/unusedcode.xml" />
<rule ref="rulesets/ecmascript/basic.xml" /> <rule ref="rulesets/ecmascript/basic.xml" />
<rule ref="rulesets/ecmascript/braces.xml" /> <rule ref="rulesets/ecmascript/braces.xml" />
...@@ -26,16 +52,20 @@ ...@@ -26,16 +52,20 @@
<priority>1</priority> <priority>1</priority>
</rule> </rule>
<rule ref="rulesets/java/optimizations.xml">
<exclude name="LocalVariableCouldBeFinal" />
</rule>
<rule ref="rulesets/java/comments.xml"> <rule ref="rulesets/java/comments.xml">
<exclude name="CommentRequired" /> <exclude name="CommentRequired" />
</rule> </rule>
<rule ref="rulesets/java/naming.xml" name="VariableNamingConventions"> <rule ref="rulesets/java/controversial.xml">
<exclude name="AtLeastOneConstructor" />
</rule>
<rule ref="rulesets/java/naming.xml/VariableNamingConventions">
<priority>5</priority> <priority>5</priority>
</rule> </rule>
<rule ref="rulesets/java/optimizations.xml">
<exclude name="LocalVariableCouldBeFinal" />
</rule>
</ruleset> </ruleset>
\ No newline at end of file
...@@ -176,7 +176,7 @@ public final class TimeReader extends AbstractReaderPlugin { ...@@ -176,7 +176,7 @@ public final class TimeReader extends AbstractReaderPlugin {
public void run() { public void run() {
if (this.infinite || (this.numberImpulses > 0)) { if (this.infinite || (this.numberImpulses > 0)) {
TimeReader.this.sendTimestampEvent(); TimeReader.this.sendTimestampEvent();
if (!this.infinite && (0 == --this.numberImpulses)) { // NOPMD if (!this.infinite && (0 == --this.numberImpulses)) {
TimeReader.this.impulseEmitLatch.countDown(); TimeReader.this.impulseEmitLatch.countDown();
} }
} }
......
...@@ -59,7 +59,7 @@ public class DbReader extends ProducerStage<IMonitoringRecord> { ...@@ -59,7 +59,7 @@ public class DbReader extends ProducerStage<IMonitoringRecord> {
public void onStarting() { public void onStarting() {
try { try {
Class.forName(this.driverClassname).newInstance(); Class.forName(this.driverClassname).newInstance();
} catch (final Exception ex) { // NOPMD NOCS (IllegalCatchCheck) } catch (final Exception ex) {
throw new RuntimeException("DB driver registration failed. Perhaps the driver jar is missing?", ex); throw new RuntimeException("DB driver registration failed. Perhaps the driver jar is missing?", ex);
} }
} }
......
...@@ -197,7 +197,7 @@ public class TCPReader extends ProducerStage<IMonitoringRecord> { ...@@ -197,7 +197,7 @@ public class TCPReader extends ProducerStage<IMonitoringRecord> {
private final int port; private final int port;
private final ILookup<String> stringRegistry; private final ILookup<String> stringRegistry;
private volatile boolean terminated = false; // NOPMD private volatile boolean terminated = false;
private volatile Thread readerThread; private volatile Thread readerThread;
public TCPStringReader(final int port, final ILookup<String> stringRegistry) { public TCPStringReader(final int port, final ILookup<String> stringRegistry) {
......
...@@ -54,7 +54,7 @@ public class MappingFileParser { ...@@ -54,7 +54,7 @@ public class MappingFileParser {
try { try {
in = new BufferedReader(new InputStreamReader(inputStream, FSUtil.ENCODING)); in = new BufferedReader(new InputStreamReader(inputStream, FSUtil.ENCODING));
String line; String line;
while ((line = in.readLine()) != null) { // NOPMD (assign) while ((line = in.readLine()) != null) {
this.parseTextLine(line, classNameRegistry); this.parseTextLine(line, classNameRegistry);
} }
} catch (final IOException ex) { } catch (final IOException ex) {
......
...@@ -63,7 +63,7 @@ public class RecordFromBinaryFileCreator { ...@@ -63,7 +63,7 @@ public class RecordFromBinaryFileCreator {
final Class<?>[] typeArray = AbstractMonitoringRecord.typesForClass(clazz); final Class<?>[] typeArray = AbstractMonitoringRecord.typesForClass(clazz);
// read record // read record
final long loggingTimestamp = inputStream.readLong(); // NOPMD (must be read here!) final long loggingTimestamp = inputStream.readLong();
final Object[] objectArray = new Object[typeArray.length]; final Object[] objectArray = new Object[typeArray.length];
int idx = -1; int idx = -1;
for (final Class<?> type : typeArray) { for (final Class<?> type : typeArray) {
...@@ -100,7 +100,7 @@ public class RecordFromBinaryFileCreator { ...@@ -100,7 +100,7 @@ public class RecordFromBinaryFileCreator {
objectArray[idx] = inputStream.readDouble(); objectArray[idx] = inputStream.readDouble();
} else if ((type == byte.class) || (type == Byte.class)) { } else if ((type == byte.class) || (type == Byte.class)) {
objectArray[idx] = inputStream.readByte(); objectArray[idx] = inputStream.readByte();
} else if ((type == short.class) || (type == Short.class)) { // NOPMD (short) } else if ((type == short.class) || (type == Short.class)) {
objectArray[idx] = inputStream.readShort(); objectArray[idx] = inputStream.readShort();
} else if ((type == boolean.class) || (type == Boolean.class)) { } else if ((type == boolean.class) || (type == Boolean.class)) {
objectArray[idx] = inputStream.readBoolean(); objectArray[idx] = inputStream.readBoolean();
......
...@@ -99,8 +99,8 @@ public class KiekerHashMap { ...@@ -99,8 +99,8 @@ public class KiekerHashMap {
* StringBuffer entry. * StringBuffer entry.
*/ */
private static final class HashEntry extends SoftReference<String> { private static final class HashEntry extends SoftReference<String> {
final int hash; // NOPMD NOCS (package visible for inner class) final int hash;
final HashEntry next; // NOPMD NOCS (package visible for inner class) final HashEntry next;
protected HashEntry(final String value, final int hash, final HashEntry next) { protected HashEntry(final String value, final int hash, final HashEntry next) {
super(value); super(value);
...@@ -277,7 +277,7 @@ public class KiekerHashMap { ...@@ -277,7 +277,7 @@ public class KiekerHashMap {
newTable[lastIdx] = lastRun; newTable[lastIdx] = lastRun;
// Clone all remaining nodes // Clone all remaining nodes
for (HashEntry p = e; p != lastRun; p = p.next) { // NOPMD (no equals meant here) for (HashEntry p = e; p != lastRun; p = p.next) {
final int k = p.hash & sizeMask; final int k = p.hash & sizeMask;
final HashEntry n = newTable[k]; final HashEntry n = newTable[k];
newTable[k] = new HashEntry(p.get(), p.hash, n); newTable[k] = new HashEntry(p.get(), p.hash, n);
......
...@@ -173,7 +173,7 @@ public class KiekerLoadDriver { ...@@ -173,7 +173,7 @@ public class KiekerLoadDriver {
long stop_ns = System.nanoTime(); long stop_ns = System.nanoTime();
this.timings[i] = stop_ns - start_ns; this.timings[i] = stop_ns - start_ns;
if ((i % 100000) == 0) { if ((i % 100000) == 0) {
System.out.println(i); // NOPMD (System.out) System.out.println(i);
} }
// System.out.println("writtenBytes (record): " + writtenBytes); // System.out.println("writtenBytes (record): " + writtenBytes);
recordBuffer.clear(); recordBuffer.clear();
......
...@@ -25,8 +25,6 @@ public class ChwHomeComparisonMethodcallWithPorts extends ProfiledPerformanceAss ...@@ -25,8 +25,6 @@ public class ChwHomeComparisonMethodcallWithPorts extends ProfiledPerformanceAss
PerformanceResult test1 = performanceResults PerformanceResult test1 = performanceResults
.get("testWithManyObjects(teetime.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test)"); .get("testWithManyObjects(teetime.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test)");
PerformanceResult test9 = performanceResults
.get("testWithManyObjects(teetime.examples.experiment09.MethodCallThoughputTimestampAnalysis9Test)");
PerformanceResult test15 = performanceResults PerformanceResult test15 = performanceResults
.get("testWithManyObjects(teetime.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test)"); .get("testWithManyObjects(teetime.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test)");
PerformanceResult test16a = performanceResults PerformanceResult test16a = performanceResults
...@@ -44,36 +42,29 @@ public class ChwHomeComparisonMethodcallWithPorts extends ProfiledPerformanceAss ...@@ -44,36 +42,29 @@ public class ChwHomeComparisonMethodcallWithPorts extends ProfiledPerformanceAss
PerformanceResult test19c = performanceResults PerformanceResult test19c = performanceResults
.get("testWithManyObjectsAnd4Threads(teetime.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)"); .get("testWithManyObjectsAnd4Threads(teetime.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)");
double value9 = (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5);
double value15 = (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5); double value15 = (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5);
double value17 = (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5); double value17 = (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5);
System.out.println("value9: " + value9);
System.out.println("value15: " + value15); System.out.println("value15: " + value15);
System.out.println("value17: " + value17); System.out.println("value17: " + value17);
// until 25.06.2014 (incl.) // until 25.06.2014 (incl.)
// assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
// assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1); // assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
// assertEquals(39, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1); // assertEquals(39, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
// since 26.06.2014 (incl.) // since 26.06.2014 (incl.)
// assertEquals(36, value9, 2.1); // +14
// assertEquals(44, value15, 4.1); // +0 // assertEquals(44, value15, 4.1); // +0
// assertEquals(53, value17, 4.1); // +14 // assertEquals(53, value17, 4.1); // +14
// // since 04.07.2014 (incl.) // // since 04.07.2014 (incl.)
// assertEquals(42, value9, 2.1); // +6
// assertEquals(44, value15, 4.1); // +0 // assertEquals(44, value15, 4.1); // +0
// assertEquals(53, value17, 4.1); // +0 // assertEquals(53, value17, 4.1); // +0
// since 11.08.2014 (incl.) // since 11.08.2014 (incl.)
// assertEquals(42, value9, 2.1); // +6
// assertEquals(44, value15, 4.1); // +0 // assertEquals(44, value15, 4.1); // +0
// assertEquals(53, value17, 4.1); // +0 // assertEquals(53, value17, 4.1); // +0
// since 31.08.2014 (incl.) // since 31.08.2014 (incl.)
assertEquals(44, value9, 2.1); // ??
assertEquals(68, value15, 4.1); // ?? assertEquals(68, value15, 4.1); // ??
assertEquals(75, value17, 4.1); // ?? assertEquals(75, value17, 4.1); // ??
......
...@@ -25,8 +25,6 @@ public class ChwWorkComparisonMethodcallWithPorts extends ProfiledPerformanceAss ...@@ -25,8 +25,6 @@ public class ChwWorkComparisonMethodcallWithPorts extends ProfiledPerformanceAss
PerformanceResult test1 = performanceResults PerformanceResult test1 = performanceResults
.get("testWithManyObjects(teetime.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test)"); .get("testWithManyObjects(teetime.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test)");
PerformanceResult test9 = performanceResults
.get("testWithManyObjects(teetime.examples.experiment09.MethodCallThoughputTimestampAnalysis9Test)");
PerformanceResult test15 = performanceResults PerformanceResult test15 = performanceResults
.get("testWithManyObjects(teetime.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test)"); .get("testWithManyObjects(teetime.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test)");
PerformanceResult test17 = performanceResults PerformanceResult test17 = performanceResults
...@@ -38,36 +36,29 @@ public class ChwWorkComparisonMethodcallWithPorts extends ProfiledPerformanceAss ...@@ -38,36 +36,29 @@ public class ChwWorkComparisonMethodcallWithPorts extends ProfiledPerformanceAss
PerformanceResult test19c = performanceResults PerformanceResult test19c = performanceResults
.get("testWithManyObjectsAnd4Threads(teetime.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)"); .get("testWithManyObjectsAnd4Threads(teetime.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)");
double value9 = (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5);
double value15 = (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5); double value15 = (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5);
double value17 = (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5); double value17 = (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5);
System.out.println("value9: " + value9);
System.out.println("value15: " + value15); System.out.println("value15: " + value15);
System.out.println("value17: " + value17); System.out.println("value17: " + value17);
// until 25.06.2014 (incl.) // until 25.06.2014 (incl.)
// assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
// assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1); // assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
// assertEquals(39, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1); // assertEquals(39, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
// since 26.06.2014 (incl.) // since 26.06.2014 (incl.)
// assertEquals(36, value9, 2.1); // +14
// assertEquals(44, value15, 4.1); // +0 // assertEquals(44, value15, 4.1); // +0
// assertEquals(53, value17, 4.1); // +14 // assertEquals(53, value17, 4.1); // +14
// since 04.07.2014 (incl.) // since 04.07.2014 (incl.)
// assertEquals(42, value9, 2.1); // +6
// assertEquals(44, value15, 4.1); // +0 // assertEquals(44, value15, 4.1); // +0
// assertEquals(53, value17, 4.1); // +0 // assertEquals(53, value17, 4.1); // +0
// since 27.08.2014 (incl.) // since 27.08.2014 (incl.)
// assertEquals(77, value9, 2.1); // +35
// assertEquals(44, value15, 4.1); // +0 // assertEquals(44, value15, 4.1); // +0
// assertEquals(53, value17, 4.1); // +0 // assertEquals(53, value17, 4.1); // +0
// since 14.10.2014 (incl.) // since 14.10.2014 (incl.)
assertEquals(67, value9, 3.1); // -10
assertEquals(36, value15, 4.1); // -8 assertEquals(36, value15, 4.1); // -8
assertEquals(46, value17, 4.1); // -7 assertEquals(46, value17, 4.1); // -7
......
package teetime.examples.experiment09;
import teetime.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test;
import util.test.MeasurementRepository;
import util.test.PerformanceResult;
import util.test.PerformanceTest;
import util.test.ProfiledPerformanceAssertion;
abstract class AbstractPerformanceCheck extends ProfiledPerformanceAssertion {
protected PerformanceResult test01;
protected PerformanceResult test09;
@Override
public void check() {
String testMethodIdentifier = MeasurementRepository.buildTestMethodIdentifier(MethodCallThoughputTimestampAnalysis1Test.class, "testWithManyObjects");
test01 = PerformanceTest.measurementRepository.performanceResults.get(testMethodIdentifier);
testMethodIdentifier = MeasurementRepository.buildTestMethodIdentifier(MethodCallThoughputTimestampAnalysis9Test.class, "testWithManyObjects");
test09 = PerformanceTest.measurementRepository.performanceResults.get(testMethodIdentifier);
}
}
package teetime.examples.experiment09;
import static org.junit.Assert.assertEquals;
public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
@Override
public String getCorrespondingPerformanceProfile() {
return "ChwHome";
}
@Override
public void check() {
super.check();
double medianSpeedup = (double) test09.quantiles.get(0.5) / test01.quantiles.get(0.5);
System.out.println("medianSpeedup (09): " + medianSpeedup);
// until 25.06.2014 (incl.)
// assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
// since 26.06.2014 (incl.)
// assertEquals(36, value9, 2.1); // +14
// // since 04.07.2014 (incl.)
// assertEquals(42, value9, 2.1); // +6
// since 11.08.2014 (incl.)
// assertEquals(42, value9, 2.1); // +6
// since 31.08.2014 (incl.)
assertEquals(44, medianSpeedup, 2.1); // ??
}
}
package teetime.examples.experiment09;
import static org.junit.Assert.assertEquals;
public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
@Override
public String getCorrespondingPerformanceProfile() {
return "ChwWork";
}
@Override
public void check() {
super.check();
double medianSpeedup = (double) test09.quantiles.get(0.5) / test01.quantiles.get(0.5);
System.out.println("medianSpeedup (09): " + medianSpeedup);
// until 25.06.2014 (incl.)
// assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
// since 26.06.2014 (incl.)
// assertEquals(36, value9, 2.1); // +14
// since 04.07.2014 (incl.)
// assertEquals(42, value9, 2.1); // +6
// since 27.08.2014 (incl.)
// assertEquals(77, value9, 2.1); // +35
// since 14.10.2014 (incl.)
assertEquals(67, medianSpeedup, 3.1); // -10
}
}
...@@ -15,11 +15,16 @@ ...@@ -15,11 +15,16 @@
***************************************************************************/ ***************************************************************************/
package teetime.examples.experiment09; package teetime.examples.experiment09;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import teetime.examples.experiment10.ChwHomePerformanceCheck;
import teetime.examples.experiment10.ChwWorkPerformanceCheck;
import teetime.util.ConstructorClosure; import teetime.util.ConstructorClosure;
import teetime.util.TimestampObject; import teetime.util.TimestampObject;
import util.test.PerformanceTest; import util.test.PerformanceTest;
import util.test.ProfiledPerformanceAssertion;
/** /**
* @author Christian Wulf * @author Christian Wulf
...@@ -28,6 +33,18 @@ import util.test.PerformanceTest; ...@@ -28,6 +33,18 @@ import util.test.PerformanceTest;
*/ */
public class MethodCallThoughputTimestampAnalysis9Test extends PerformanceTest { public class MethodCallThoughputTimestampAnalysis9Test extends PerformanceTest {
@BeforeClass
public static void beforeClass() {
PERFORMANCE_CHECK_PROFILE_REPOSITORY.register(MethodCallThoughputTimestampAnalysis9Test.class, new ChwWorkPerformanceCheck());
PERFORMANCE_CHECK_PROFILE_REPOSITORY.register(MethodCallThoughputTimestampAnalysis9Test.class, new ChwHomePerformanceCheck());
};
@AfterClass
public static void afterClass() {
ProfiledPerformanceAssertion performanceCheckProfile = PERFORMANCE_CHECK_PROFILE_REPOSITORY.get(MethodCallThoughputTimestampAnalysis9Test.class);
performanceCheckProfile.check();
};
@Test @Test
public void testWithManyObjects() { public void testWithManyObjects() {
System.out.println("Testing teetime (mc) with NUM_OBJECTS_TO_CREATE=" + NUM_OBJECTS_TO_CREATE + ", NUM_NOOP_FILTERS=" System.out.println("Testing teetime (mc) with NUM_OBJECTS_TO_CREATE=" + NUM_OBJECTS_TO_CREATE + ", NUM_NOOP_FILTERS="
......
...@@ -6,7 +6,7 @@ import util.test.PerformanceResult; ...@@ -6,7 +6,7 @@ import util.test.PerformanceResult;
import util.test.PerformanceTest; import util.test.PerformanceTest;
import util.test.ProfiledPerformanceAssertion; import util.test.ProfiledPerformanceAssertion;
public abstract class AbstractPerformanceCheck extends ProfiledPerformanceAssertion { abstract class AbstractPerformanceCheck extends ProfiledPerformanceAssertion {
protected PerformanceResult test01; protected PerformanceResult test01;
protected PerformanceResult test10; protected PerformanceResult test10;
......
...@@ -6,7 +6,7 @@ import util.test.PerformanceResult; ...@@ -6,7 +6,7 @@ import util.test.PerformanceResult;
import util.test.PerformanceTest; import util.test.PerformanceTest;
import util.test.ProfiledPerformanceAssertion; import util.test.ProfiledPerformanceAssertion;
public abstract class AbstractPerformanceCheck extends ProfiledPerformanceAssertion { abstract class AbstractPerformanceCheck extends ProfiledPerformanceAssertion {
protected PerformanceResult test01; protected PerformanceResult test01;
protected PerformanceResult test14; protected PerformanceResult test14;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment