Examples
Perfidix offers a very flexible usage based on annotation. The examples contains all the same usecase but are different implemented. A compressed file access is compared to a normal file access. The code in the following examples therefore are doing exactly the same.
Example 1
The setUp() and tear-Down() methods are invoked before each run of each method.
public class SomeAnnoBenchmark {
CompressedHandler c; SimpleFileHandler s;
//setUp , invoked before each run
@BeforeEachBenchRun
public void setUp() {
c = new CompressedHandler ( ) ; s = new SimpleFileHandler ();
}
//tearDown , invoked after each run
@AfterEachBenchRun
public void tearDown() {
c = null; s = null;
}
//bench Method 1
@Bench
public void benchCWrite() {
c.write(”hello world”);
}
//bench Method 1
@Bench
public void benchSRead() {
s.read();
}
//bench Method 2
@Bench
public void benchSWrite () {
s.write(”hello world”);
}
//bench Method 3
@Bench
public void benchCRead() {
c.read();
}
}
Example 2
In the following example, you see the usage of specific setUp and tearDown methods. These methods have the same behavior than methods with the BeforeBenchRun annotation.
public class SomeSpecificSetUpTearDownBenchmark {
CompressedHandler c; SimpleFileHandler s;
//setUp for benchCRead/benchCWrite . Invoked via @Bench−params
public void setUpCompressed () {
c = new CompressedHandler ( ) ;
}
//tearDown for benchCRead/benchCWrite . Invoked via @Bench−params
public void tearDownCompressed() {
c = null;
}
//setUp for benchSRead/benchSWrite . Invoked via @Bench−params
public void setUpSimple () {
s = new SimpleFileHandler ();
}
//tearDown for benchSRead/benchSWrite . Invoked via @Bench−params
public void tearDownSimple () {
s = null;
}
//bench Method 1
@Bench(beforeEachBenchRun=”setUpCompressed” ,afterEachBenchRun=”tearDownCompressed”)
public void benchCWrite() {
c.write(”hello world”);
}
//bench Method 2
@Bench(beforeEachBenchRun =”setUpSimple”, afterEachBenchRun =”tearDownSimple”)
public void benchSWrite () {
s.write(”hello world”);
}
//bench Method 3
@Bench(beforeEachBenchRun =”setUpCompressed”, afterEachBenchRun=”tearDownCompressed”)
public void benchCRead() {
c.read();
}
//bench Method 4
@Bench(beforeEachBenchRun =”setUpSimple”, afterEachBenchRun =”tearDownSimple”)
public void benchSRead() {
s.read();
}
}
Example 3
In the following example, the same Bench is a little bit modified: First of all, the class-annotation BenchClass with the param runs is used. That means that every method which is parameter-free and is not annotated with a setUp / tearDown annotation, is benched 10 times, except the benchSWrite method, which has an extra Bench annotation with a run parameter. This method is benched 60 times.\ Additional to that, every possible setUp and tearDown method is used in this example. A description is given in the code and in Section 3.
@BenchClass(runs=10)
public class ClassAnnoBenchmark {
CompressedHandler c ; SimpleFileHandler s ;
String toTest; long testLength;
//classwide setUp , invoked just one time , just setting the length
@BeforeBenchClass
public void beforeClass () {
Math.abs(testLength = new Random().nextInt(100));
}
//methodWide setUp , invoked just one time per method , building a
@BeforeFirstBenchRun
public void beforeMethod () {
for(int i = 0; i<testLength; i++) {
toTest = toTest + (char)(new Random(). nextInt(Ch
}
}
//normal setUp , invoked one time per method per run, instantiating
@BeforeEachBenchRun
public void beforeRun () {
c = new CompressedHandler ( ) ;
s = new SimpleFileHandler ();
}
//normal tearDown , invoked one time per method per run , removing
@AfterEachBenchRun
public void afterRun () {
c = null;
s = null;
}
//methodWide tearDown , invoked just one time
@AfterLastBenchRun
public void afterMethod () {
toTest = null;
}
//classwide tearDown , invoked just one time ,
@AfterBenchClass
public void afterClass () {
testLength = −1;
}
//bench 1, invoked because of class−annotation
public void benchCWrite() {
c.write(”hello world”);
}
//bench 2, invoked because of method−annotation
@Bench(runs=60)
public void benchSWrite () {
s.write(”hello world”);
}
//bench 3, invoked because of class−annotation
public void benchCRead() {
c.read();
}
//bench 4, invoked because of class−annotation
public void benchSRead() {
s.read();
}
}
