This extracts the kernelCtfTraceStub to allow both tests to use it.
Change-Id: I8cbd51e691d9e9f3ae2d51e2f64e74a9ec6c6176
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/62546
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
class="org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.TmfXmlKernelTraceStub">
</tracetype>
</module>
+ <module
+ analysis_module="org.eclipse.tracecompass.internal.analysis.os.linux.core.latency.statistics.SystemCallLatencyStatisticsAnalysisModule"
+ id="org.eclipse.tracecompass.analysis.os.linux.core.latency.statistics.syscall"
+ name="System call stats">
+ <tracetype
+ applies="true"
+ class="org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelTrace">
+ </tracetype>
+ </module>
</extension>
<extension
point="org.eclipse.linuxtools.tmf.core.tracetype">
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.analysis.os.linux.core.tests.latency;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.KernelEventLayoutStub;
+import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
+import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelTrace;
+import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
+import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
+import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
+
+class KernelCtfTraceStub extends CtfTmfTrace implements IKernelTrace {
+ public KernelCtfTraceStub() {
+ super();
+ }
+
+ public static synchronized KernelCtfTraceStub getTrace(CtfTestTrace ctfTrace) {
+ String tracePath;
+ try {
+ tracePath = FileLocator.toFileURL(ctfTrace.getTraceURL()).getPath();
+ } catch (IOException e) {
+ throw new IllegalStateException();
+ }
+
+ KernelCtfTraceStub trace = new KernelCtfTraceStub();
+ try {
+ trace.initTrace(null, tracePath, CtfTmfEvent.class);
+ } catch (TmfTraceException e) {
+ /* Should not happen if tracesExist() passed */
+ throw new RuntimeException(e);
+ }
+ return trace;
+ }
+
+ @Override
+ public @NonNull IKernelAnalysisEventLayout getKernelEventLayout() {
+ return KernelEventLayoutStub.getInstance();
+ }
+}
\ No newline at end of file
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import java.io.IOException;
-
-import org.eclipse.core.runtime.FileLocator;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.analysis.os.linux.core.latency.SystemCallLatencyAnalysis;
-import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.KernelEventLayoutStub;
-import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelAnalysisEventLayout;
-import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelTrace;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.segmentstore.core.ISegmentStore;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
-import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
-import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
-import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
*/
public class SyscallAnalysisTest {
- private static class KernelStubTrace extends CtfTmfTrace implements IKernelTrace {
- public KernelStubTrace() {
- super();
- }
-
- public static synchronized KernelStubTrace getTrace(CtfTestTrace ctfTrace) {
- String tracePath;
- try {
- tracePath = FileLocator.toFileURL(ctfTrace.getTraceURL()).getPath();
- } catch (IOException e) {
- throw new IllegalStateException();
- }
-
- KernelStubTrace trace = new KernelStubTrace();
- try {
- trace.initTrace(null, tracePath, CtfTmfEvent.class);
- } catch (TmfTraceException e) {
- /* Should not happen if tracesExist() passed */
- throw new RuntimeException(e);
- }
- return trace;
- }
-
- @Override
- public @NonNull IKernelAnalysisEventLayout getKernelEventLayout() {
- return KernelEventLayoutStub.getInstance();
- }
- }
-
private SystemCallLatencyAnalysis fSyscallModule;
/**
*/
@Before
public void setUp() {
- ITmfTrace trace = KernelStubTrace.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
+ ITmfTrace trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
/* Make sure the Kernel analysis has run */
((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null));
for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, SystemCallLatencyAnalysis.class)) {
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2015 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.analysis.os.linux.core.tests.latency;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.eclipse.tracecompass.analysis.os.linux.core.latency.SystemCallLatencyAnalysis;
+import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.SegmentStoreStatistics;
+import org.eclipse.tracecompass.internal.analysis.os.linux.core.latency.statistics.SystemCallLatencyStatisticsAnalysisModule;
+import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
+import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for the system call statistics analysis
+ *
+ * @author Matthew Khouzam
+ */
+public class SyscallStatsAnalysisTest {
+
+ private TmfTrace fTestTrace;
+ private SystemCallLatencyStatisticsAnalysisModule fSyscallStatsModule;
+
+ /**
+ * Create the fixtures
+ */
+ @Before
+ public void setupAnalysis() {
+ ITmfTrace trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
+ /* Make sure the Kernel analysis has run */
+ ((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null));
+ IAnalysisModule module = null;
+ for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, SystemCallLatencyAnalysis.class)) {
+ module = mod;
+ }
+ assertNotNull(module);
+ module.schedule();
+ module.waitForCompletion();
+ SystemCallLatencyStatisticsAnalysisModule syscallStatsModule = null;
+ for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, SystemCallLatencyStatisticsAnalysisModule.class)) {
+ syscallStatsModule = (SystemCallLatencyStatisticsAnalysisModule) mod;
+ }
+ assertNotNull(syscallStatsModule);
+ syscallStatsModule.schedule();
+ syscallStatsModule.waitForCompletion();
+ fSyscallStatsModule = syscallStatsModule;
+ }
+
+ /**
+ * Dispose everything
+ */
+ @After
+ public void cleanup() {
+ final TmfTrace testTrace = fTestTrace;
+ if (testTrace != null) {
+ testTrace.dispose();
+ }
+ }
+
+ /**
+ * This will load the analysis and test it. as it depends on Kernel, this
+ * test runs the kernel trace first then the analysis
+ */
+ @Test
+ public void testSmallTraceSequential() {
+ final SystemCallLatencyStatisticsAnalysisModule syscallStatsModule = fSyscallStatsModule;
+ assertNotNull(syscallStatsModule);
+ SegmentStoreStatistics totalStats = syscallStatsModule.getTotalStats();
+ assertNotNull(totalStats);
+ assertEquals(1801, totalStats.getNbSegments());
+ assertEquals(5904091700L, totalStats.getMax());
+ }
+}