import java.util.logging.Level;
import java.util.logging.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.lttng.ust.agent.utils.TestPrintExtension;
/**
* Base abstract class for JUL benchmarks. Sub-classes can setup parameters to
* test different types of log handlers.
*/
+@ExtendWith(TestPrintExtension.class)
public abstract class JulHandlerBenchmarkBase {
// ------------------------------------------------------------------------
/**
* Base test setup
*/
- @Before
+ @BeforeEach
public void setup() {
/* Set up the logger */
logger = Logger.getLogger("Test logger");
/**
* Base test teardown
*/
- @After
+ @AfterEach
public void teardown() {
if (handler != null) {
logger.removeHandler(handler);
*/
@Test
public void runBenchmark() {
- if (handler != null) {
+ if (logger != null && handler != null) {
logger.addHandler(handler);
}
}
private static void runTest(Logger log, int nbThreads) {
- long start, end, average, total = 0;
+ long total = 0;
for (int i = 0; i < NB_RUNS; i++) {
Runner runner = new Runner(nbThreads, NB_ITER, log);
- start = System.nanoTime();
+ long start = System.nanoTime();
runner.run();
- end = System.nanoTime();
+ long end = System.nanoTime();
total += (end - start);
}
- average = total / NB_RUNS;
- System.out.println(nbThreads + " threads, average = " + average / NB_ITER + " ns/event");
+ long average = (total / NB_RUNS);
+ System.out.println(nbThreads + " threads, average = " + average / NB_ITER + " ns/loop");
}
// ------------------------------------------------------------------------
@Override
public void run() {
- for (Thread curThread : workerThreads) {
- curThread.start();
- }
+ workerThreads.forEach(Thread::start);
- for (Thread curThread : workerThreads) {
+ workerThreads.forEach(t -> {
try {
- curThread.join();
+ t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
- }
+ });
}
private static class Worker implements Runnable {
private final int threadId;
private final int nbIter;
+ @SuppressWarnings("unused")
+ private volatile int value = 0;
+
public Worker(int threadId, int nbIter, Logger log) {
this.log = log;
this.threadId = threadId;
@Override
public void run() {
for (int i = 0; i < nbIter; i++) {
- log.info("Thread " + threadId + ", iteration " + i);
+ value = i;
+ if (log != null) {
+ log.info("Thread " + threadId + ", iteration " + i);
+ }
}
}
-
}
}
}