From: Matthew Khouzam Date: Sat, 12 Dec 2015 02:43:55 +0000 (-0500) Subject: analysis: Introduce syscall statistics analysis test X-Git-Url: http://git.efficios.com/?p=deliverable%2Ftracecompass.git;a=commitdiff_plain;h=3a676d863e0aa737976b8269b19466a5d063b9fe analysis: Introduce syscall statistics analysis test This extracts the kernelCtfTraceStub to allow both tests to use it. Change-Id: I8cbd51e691d9e9f3ae2d51e2f64e74a9ec6c6176 Signed-off-by: Matthew Khouzam Reviewed-on: https://git.eclipse.org/r/62546 Reviewed-by: Hudson CI Reviewed-by: Bernd Hufmann Tested-by: Bernd Hufmann --- diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/plugin.xml b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/plugin.xml index fcd34f7755..e659abf789 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/plugin.xml +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/plugin.xml @@ -51,6 +51,15 @@ class="org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.TmfXmlKernelTraceStub"> + + + + diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/KernelCtfTraceStub.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/KernelCtfTraceStub.java new file mode 100644 index 0000000000..05177c2bd7 --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/KernelCtfTraceStub.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * 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 diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallAnalysisTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallAnalysisTest.java index c8ad17d16e..88859efeb0 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallAnalysisTest.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallAnalysisTest.java @@ -12,25 +12,16 @@ package org.eclipse.tracecompass.analysis.os.linux.core.tests.latency; 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; @@ -42,35 +33,6 @@ 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; /** @@ -78,7 +40,7 @@ public class SyscallAnalysisTest { */ @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)) { diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallStatsAnalysisTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallStatsAnalysisTest.java new file mode 100644 index 0000000000..ac390303a4 --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallStatsAnalysisTest.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * 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()); + } +}