| /******************************************************************************* |
| * Copyright (c) 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 |
| *******************************************************************************/ |
| |
| 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.jdt.annotation.NonNull; |
| import org.eclipse.tracecompass.analysis.timing.core.statistics.IStatistics; |
| import org.eclipse.tracecompass.internal.analysis.os.linux.core.latency.SystemCallLatencyAnalysis; |
| import org.eclipse.tracecompass.internal.analysis.os.linux.core.latency.statistics.SystemCallLatencyStatisticsAnalysisModule; |
| import org.eclipse.tracecompass.segmentstore.core.ISegment; |
| 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.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 ITmfTrace fTestTrace; |
| private SystemCallLatencyStatisticsAnalysisModule fSyscallStatsModule; |
| |
| /** |
| * Create the fixtures |
| */ |
| @Before |
| public void setupAnalysis() { |
| KernelCtfTraceStub trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER); |
| fTestTrace = trace; |
| /* Make sure the Kernel analysis has run */ |
| 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 ITmfTrace 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); |
| IStatistics<@NonNull ISegment> totalStats = syscallStatsModule.getStatsTotal(); |
| assertNotNull(totalStats); |
| assertEquals(1801, totalStats.getNbElements()); |
| assertEquals(5904091700L, totalStats.getMax()); |
| } |
| } |