1 /*******************************************************************************
2 * Copyright (c) 2012, 2014 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Matthew Khouzam - Initial API and implementation
11 * Alexandre Montplaisir - Convert to a org.eclipse.test.performance test
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.ctf
.core
.tests
.perf
.trace
;
16 import static org
.junit
.Assert
.fail
;
18 import org
.eclipse
.test
.performance
.Dimension
;
19 import org
.eclipse
.test
.performance
.Performance
;
20 import org
.eclipse
.test
.performance
.PerformanceMeter
;
21 import org
.eclipse
.tracecompass
.ctf
.core
.CTFException
;
22 import org
.eclipse
.tracecompass
.ctf
.core
.event
.IEventDefinition
;
23 import org
.eclipse
.tracecompass
.ctf
.core
.tests
.shared
.CtfTestTraceUtils
;
24 import org
.eclipse
.tracecompass
.ctf
.core
.trace
.CTFTrace
;
25 import org
.eclipse
.tracecompass
.ctf
.core
.trace
.CTFTraceReader
;
26 import org
.eclipse
.tracecompass
.testtraces
.ctf
.CtfTestTrace
;
27 import org
.junit
.Test
;
30 * Benchmark of the CTF parser for reading a trace
32 * @author Matthew Khouzam
33 * @author Alexandre Montplaisir
35 public class TraceReadBenchmark
{
37 private static final String TEST_SUITE_NAME
= "CTF Read Benchmark";
38 private static final String TEST_ID
= "org.eclipse.linuxtools#" + TEST_SUITE_NAME
;
39 private static final int LOOP_COUNT
= 100;
42 * Benchmark reading the trace "kernel"
45 public void testKernelTrace() {
46 readTrace(CtfTestTrace
.KERNEL
, "trace-kernel", true);
50 * Benchmark reading the bigger trace "kernel_vm"
53 public void testKernelVmTrace() {
54 readTrace(CtfTestTrace
.KERNEL_VM
, "trace-kernel-vm", false);
57 private static void readTrace(CtfTestTrace testTrace
, String testName
, boolean inGlobalSummary
) {
58 Performance perf
= Performance
.getDefault();
59 PerformanceMeter pm
= perf
.createPerformanceMeter(TEST_ID
+ '#' + testName
);
60 perf
.tagAsSummary(pm
, TEST_SUITE_NAME
+ ':' + testName
, Dimension
.CPU_TIME
);
62 if (inGlobalSummary
) {
63 perf
.tagAsGlobalSummary(pm
, TEST_SUITE_NAME
+ ':' + testName
, Dimension
.CPU_TIME
);
66 for (int loop
= 0; loop
< LOOP_COUNT
; loop
++) {
69 CTFTrace trace
= CtfTestTraceUtils
.getTrace(testTrace
);
70 try (CTFTraceReader traceReader
= new CTFTraceReader(trace
);) {
72 while (traceReader
.hasMoreEvents()) {
73 IEventDefinition ed
= traceReader
.getCurrentEventDef();
74 /* Do something with the event */
76 traceReader
.advance();
79 } catch (CTFException e
) {
80 /* Should not happen if assumeTrue() passed above */
81 fail("Test failed at iteration " + loop
+ ':' + e
.getMessage());