From 88f184dfc2cb37742bc2ebc1133b17f3e6c84cd2 Mon Sep 17 00:00:00 2001 From: Hoang Thuan Pham Date: Tue, 3 Oct 2023 16:48:48 -0400 Subject: [PATCH] linux.core: Add Priority Statistics view for SWSLatency analysis This commit adds view and viewer classes for the Priority Statistics view. It also adds the view to SWS Latency analysis. The view groups entries in the SWS Latency analysis based on priority of the segments. [Added] Priority Statistics view for SWSLatency analysis Change-Id: If21c1fc53259fbef234d9155aabb5420d4bfbf98 Signed-off-by: Hoang Thuan Pham Reviewed-on: https://git.eclipse.org/r/c/tracecompass/org.eclipse.tracecompass/+/204775 Tested-by: Trace Compass Bot Tested-by: Matthew Khouzam Reviewed-by: Patrick Tasse Reviewed-by: Matthew Khouzam --- .../META-INF/MANIFEST.MF | 2 +- .../plugin.properties | 2 + .../plugin.xml | 24 +++++++++ .../statistics/PriorityStatisticsView.java | 51 +++++++++++++++++++ .../statistics/PriorityStatisticsViewer.java | 36 +++++++++++++ 5 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsView.java create mode 100644 analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsViewer.java diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/META-INF/MANIFEST.MF b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/META-INF/MANIFEST.MF index ce39b0ddf3..2c02b27578 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core/META-INF/MANIFEST.MF +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core/META-INF/MANIFEST.MF @@ -64,7 +64,7 @@ Export-Package: org.eclipse.tracecompass.analysis.os.linux.core.contextswitch, org.eclipse.tracecompass.lttng2.kernel.core.tests, org.eclipse.tracecompass.analysis.callstack.core.tests", org.eclipse.tracecompass.internal.analysis.os.linux.core.resourcesstatus;x-friends:="org.eclipse.tracecompass.analysis.os.linux.ui", - org.eclipse.tracecompass.internal.analysis.os.linux.core.segmentstore;x-internal:=true, + org.eclipse.tracecompass.internal.analysis.os.linux.core.segmentstore;x-friends:="org.eclipse.tracecompass.analysis.os.linux.ui", org.eclipse.tracecompass.internal.analysis.os.linux.core.threadstatus; x-friends:="org.eclipse.tracecompass.analysis.callstack.core, org.eclipse.tracecompass.analysis.os.linux.core.tests, diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.properties b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.properties index 4793badeea..df9341e2b5 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.properties +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.properties @@ -32,8 +32,10 @@ swslatency.table.view.name = Sched_Wakeup/Switch Latencies swslatency.scatter.view.name = Sched_Wakeup/Switch Latency vs Time swslatency.stats.view.name = Sched_Wakeup/Switch Latency Statistics swslatency.stats.view.name.prioname = Sched_Wakeup/Switch Latency Priority/Thread name Statistics +swslatency.stats.view.name.priority = Sched_Wakeup/Switch Latency Priority Statistics swslatency.density.view.name = Sched_Wakeup/Switch Density view.segstore.statistics.prioname = Priority/Thread name Statistics +view.segstore.statistics.priority = Priority Statistics perspective.name = OS Tracing Overview diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.xml b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.xml index 82cc1a419b..ada1e6b535 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.xml +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/plugin.xml @@ -46,6 +46,23 @@ name="%swslatency.stats.view.name.prioname" restorable="true"> + + + + + + + + diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsView.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsView.java new file mode 100644 index 0000000000..a8386707de --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsView.java @@ -0,0 +1,51 @@ +/********************************************************************** + * Copyright (c) 2023 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.ui.segmentstore.statistics; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.statistics.AbstractSegmentsStatisticsView; +import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.statistics.AbstractSegmentsStatisticsViewer; +import org.eclipse.tracecompass.common.core.NonNullUtils; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.views.IViewDescriptor; + +/** + * A segment store statistics view for showing statistics based on the priority of segments + * The analysis specified by the secondaryId must create segments that implement IPrioritySegment. + * + * @author Hoang Thuan Pham + */ +public class PriorityStatisticsView extends AbstractSegmentsStatisticsView { + /** + * ID of this view + */ + public static final String ID = "org.eclipse.tracecompass.analysis.os.linux.ui.segmentstore.statistics.priority"; //$NON-NLS-1$ + + @Override + public void createPartControl(@Nullable Composite parent) { + super.createPartControl(parent); + // Set the title of the view from the actual view ID + IViewDescriptor desc = PlatformUI.getWorkbench().getViewRegistry().find(getViewId()); + if (desc != null) { + setPartName(desc.getLabel()); + } + } + + @Override + protected @NonNull AbstractSegmentsStatisticsViewer createSegmentStoreStatisticsViewer(@NonNull Composite parent) { + // The analysis ID is the secondary ID of the view + String analysisId = NonNullUtils.nullToEmptyString(getViewSite().getSecondaryId()); + return new PriorityStatisticsViewer(parent, analysisId); + } +} diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsViewer.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsViewer.java new file mode 100644 index 0000000000..aedcf11f86 --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/analysis/os/linux/ui/segmentstore/statistics/PriorityStatisticsViewer.java @@ -0,0 +1,36 @@ +/********************************************************************** + * Copyright (c) 2023 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.ui.segmentstore.statistics; + +import org.eclipse.swt.widgets.Composite; +import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.statistics.AbstractSegmentsStatisticsViewer; +import org.eclipse.tracecompass.internal.analysis.os.linux.core.segmentstore.PriorityStatisticsDataProviderFactory; + +/** + * A segment store statistics viewer for showing statistics based on the priority + * of segments. + * + * @author Hoang Thuan Pham + */ +public class PriorityStatisticsViewer extends AbstractSegmentsStatisticsViewer { + /** + * Constructor + * + * @param parent + * The parent composite + * @param analysisId + * The ID of the segment store provider to do statistics on + */ + public PriorityStatisticsViewer(Composite parent, String analysisId) { + super(parent, PriorityStatisticsDataProviderFactory.DATA_PROVIDER_ID + ':' + analysisId); + } +}