blob: 9cfe89f460c083eb7b1526caa9b8bed025cd6530 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2015 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:
* William Bourque <wbourque@gmail.com> - Initial API and implementation
* Matthew Khouzam - Update to CtfTmf trace and events
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ctf.core.tests.temp.headless;
import java.util.Vector;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
/**
* Benchmark the event request subsystem of TMF.
*/
public class RequestBenchmark extends TmfEventRequest {
private RequestBenchmark(final Class<? extends ITmfEvent> dataType,
final TmfTimeRange range, final int nbRequested) {
super(dataType, range, 0, nbRequested, ExecutionType.FOREGROUND);
}
// Path of the trace
private static final String TRACE_PATH = "../org.eclipse.tracecompass.ctf.core.tests/traces/kernel";
// Change this to run several time over the same trace
private static final int NB_OF_PASS = 100;
// Work variables
private static int nbEvent = 0;
private static TmfExperiment fExperiment = null;
private static Vector<Double> benchs = new Vector<>();
/**
* Run the benchmark
*
* @param args
* The command-line arguments
*/
public static void main(final String[] args) {
try {
/* Our experiment will contains ONE trace */
final ITmfTrace[] traces = new ITmfTrace[1];
traces[0] = new CtfTmfTrace();
traces[0].initTrace(null, TRACE_PATH, CtfTmfEvent.class);
/* Create our new experiment */
fExperiment = new TmfExperiment(CtfTmfEvent.class, "Headless", traces,
TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
/*
* We will issue a request for each "pass". TMF will then process
* them synchronously.
*/
RequestBenchmark request = null;
for (int x = 0; x < NB_OF_PASS; x++) {
request = new RequestBenchmark(CtfTmfEvent.class,
TmfTimeRange.ETERNITY, Integer.MAX_VALUE);
fExperiment.sendRequest(request);
}
prev = System.nanoTime();
} catch (final NullPointerException e) {
/*
* Silently dismiss Null pointer exception The only way to "finish"
* the threads in TMF is by crashing them with null.
*/
} catch (final Exception e) {
e.printStackTrace();
}
}
@Override
public void handleData(final ITmfEvent event) {
super.handleData(event);
nbEvent++;
}
static long prev;
static long done = 0;
@Override
public void handleCompleted() {
final long next = System.nanoTime();
double val = next - prev;
final int nbEvent2 = nbEvent;
val /= nbEvent2;
nbEvent = 0;
prev = next;
benchs.add(val);
if (benchs.size() == NB_OF_PASS) {
try {
System.out.println("Nb events : " + nbEvent2);
for (final double value : benchs) {
System.out.print(value + ", ");
}
fExperiment.sendRequest(null);
} catch (final Exception e) {
}
}
}
@Override
public void handleSuccess() {
}
@Override
public void handleFailure() {
}
@Override
public void handleCancel() {
}
}