blob: 42ec083aef5a2d43d986996a9a0bbfafcb8e62b8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2014 Ericsson
*
* All rights reserved. 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:
* Matthew Khouzam - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ctf.core.tests.temp.headless;
import java.util.Vector;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.ctf.core.context.CtfTmfContext;
import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
/**
* Test and benchmark reading a CTF LTTng kernel trace.
*
* @author Matthew Khouzam
*/
public class Benchmark {
/**
* Run the benchmark.
*
* @param args The command-line arguments
*/
public static void main(final String[] args) {
final String TRACE_PATH = "testfiles/kernel";
final int NUM_LOOPS = 100;
// Change this to enable text output
final boolean USE_TEXT = true;
// Work variables
long nbEvent = 0L;
final Vector<Double> benchs = new Vector<>();
long start, stop;
for (int loops = 0; loops < NUM_LOOPS; loops++) {
nbEvent = 0L;
CtfTmfTrace trace = new CtfTmfTrace();
try {
trace.initTrace(null, TRACE_PATH, CtfTmfEvent.class);
} catch (final TmfTraceException e) {
loops = NUM_LOOPS + 1;
break;
}
start = System.nanoTime();
if (nbEvent != -1) {
final CtfTmfContext traceReader = (CtfTmfContext) trace.seekEvent(0);
start = System.nanoTime();
CtfTmfEvent current = traceReader.getCurrentEvent();
while (current != null) {
nbEvent++;
if (USE_TEXT) {
System.out.println("Event " + nbEvent + " Time "
+ current.getTimestamp().toString() + " type " + current.getType().getName()
+ " on CPU " + current.getCPU() + " " + current.getContent().toString());
}
// advance the trace to the next event.
boolean hasMore = traceReader.advance();
if (hasMore) {
// you can know the trace has more events.
}
current = traceReader.getCurrentEvent();
}
}
stop = System.nanoTime();
System.out.print('.');
final double time = (stop - start) / (double) nbEvent;
benchs.add(time);
trace.dispose();
}
System.out.println("");
double avg = 0;
for (final double val : benchs) {
avg += val;
}
avg /= benchs.size();
System.out.println("Time to read = " + avg + " events/ns");
for (final Double val : benchs) {
System.out.print(val);
System.out.print(", ");
}
}
}