blob: 3cf9c8cfb03686c8a54f75a14f28896c28fe5c51 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 École Polytechnique de Montréal
*
* 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.ui.swtbot.tests.perf.views;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.tracecompass.analysis.os.linux.core.cpuusage.KernelCpuUsageAnalysis;
import org.eclipse.tracecompass.analysis.os.linux.core.inputoutput.InputOutputAnalysisModule;
import org.eclipse.tracecompass.analysis.os.linux.core.kernel.KernelAnalysisModule;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.controlflow.ControlFlowView;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.cpuusage.CpuUsageView;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.io.diskioactivity.DiskIOActivityView;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.kernelmemoryusage.KernelMemoryUsageView;
import org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.resources.ResourcesView;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.perf.views.ViewsResponseTest;
import org.junit.runner.RunWith;
import com.google.common.collect.ImmutableMap;
/**
* Test the responsiveness of Control Flow View and Resources View for different
* traces and scenarios. Ideally, when running this test, JUL logging should be
* enabled using a logger.properties file. LTTng JUL handler is advised since it
* works better with multi-threaded applications than other log handlers
*
* @author Geneviève Bastien
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public abstract class UiResponseTest extends ViewsResponseTest {
/**
* An enumeration of the views available to test
*/
protected enum OsLinuxViews {
/**
* The Control Flow View
*/
CONTROL_FLOW,
/**
* The Resources View
*/
RESOURCES,
/**
* The CPU Usage View
*/
CPU_USAGE,
/**
* The Disk IO Activity View
*/
DISK_IO_ACTIVITY,
/**
* The Kernel Memory Usage View
*/
KERNEL_MEMORY_USAGE
}
private static final @NonNull Map<OsLinuxViews, String> VIEW_IDS = ImmutableMap.of(OsLinuxViews.CONTROL_FLOW, ControlFlowView.ID,
OsLinuxViews.RESOURCES, ResourcesView.ID,
OsLinuxViews.CPU_USAGE, CpuUsageView.ID,
OsLinuxViews.DISK_IO_ACTIVITY, DiskIOActivityView.ID,
OsLinuxViews.KERNEL_MEMORY_USAGE, KernelMemoryUsageView.ID);
@Override
protected void beforeRunningTest(ITmfTrace trace) {
List<IAnalysisModule> modules = new ArrayList<>(3);
modules.add(trace.getAnalysisModule(KernelCpuUsageAnalysis.ID));
modules.add(trace.getAnalysisModule(KernelAnalysisModule.ID));
modules.add(trace.getAnalysisModule(InputOutputAnalysisModule.ID));
for (IAnalysisModule module : modules) {
if (module != null) {
module.schedule();
}
}
for (IAnalysisModule module : modules) {
if (module != null) {
assertTrue(module.waitForCompletion());
}
}
}
/**
* Run this swtbot with the trace specified at the specified path. The trace
* will be navigate for each view ID separately, then, after renaming the
* trace, with all the views opened. After this test, all views will be
* closed.
*
* @param tracePath
* The full path of the trace to open
* @param traceType
* The trace type of the trace to open
* @param views
* The os linux specific views to test
*/
protected void runTestWithTrace(String tracePath, String traceType, EnumSet<OsLinuxViews> views) {
List<String> viewIDs = new ArrayList<>();
for (OsLinuxViews view : views) {
viewIDs.add(VIEW_IDS.get(view));
}
runTestWithTrace(tracePath, traceType, viewIDs);
}
}