blob: 0b017e684d9eaa21d8e605abd45d9e9203fd9509 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2016, 2018 École Polytechnique de Montréal and others
*
* 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.internal.analysis.os.linux.ui.views.memory;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.tracecompass.analysis.os.linux.core.memory.MemoryUsageTreeModel;
import org.eclipse.tracecompass.common.core.format.DataSizeWithUnitFormat;
import org.eclipse.tracecompass.tmf.core.presentation.IYAppearance;
import org.eclipse.tracecompass.tmf.ui.viewers.TmfViewer;
import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.TmfXYChartViewer;
import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfFilteredXYChartViewer;
import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfXYChartSettings;
import org.eclipse.tracecompass.tmf.ui.views.TmfChartView;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* Memory usage view
*
* @since 2.2
* @author Samuel Gagnon
* @author Mahdi Zolnouri
* @author Wassim Nasrallah
*/
public class MemoryUsageView extends TmfChartView {
private final String fProviderId;
private final TmfXYChartSettings fSettings;
/**
* Constructor
*
* @param title
* the Memory view's name.
* @param providerId
* the ID of the provider to use for this view.
* @param settings
* See {@link TmfXYChartSettings} to know what it contains
*/
public MemoryUsageView(String title, String providerId, TmfXYChartSettings settings) {
super(title);
fProviderId = providerId;
fSettings = settings;
}
@Override
protected TmfXYChartViewer createChartViewer(Composite parent) {
TmfFilteredXYChartViewer viewer = new TmfFilteredXYChartViewer(parent, fSettings, fProviderId) {
@Override
public @NonNull IYAppearance getSeriesAppearance(String seriesName) {
int width = seriesName.endsWith(MemoryUsageTreeModel.TOTAL_SUFFIX) ? 2 : 1;
return getPresentationProvider().getAppearance(seriesName, IYAppearance.Type.LINE, width);
}
};
viewer.getSwtChart().getAxisSet().getYAxis(0).getTick().setFormat(DataSizeWithUnitFormat.getInstance());
return viewer;
}
@Override
protected @NonNull TmfViewer createLeftChildViewer(Composite parent) {
return new MemoryUsageTreeViewer(parent, fProviderId);
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
// Add a tool bar button to filter active threads.
getViewSite().getActionBars().getToolBarManager().appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, getFilterAction());
}
private Action getFilterAction() {
Action action = new Action(Messages.MemoryView_FilterAction_Text, IAction.AS_CHECK_BOX) {
// memory view is filtered by default.
private boolean isFiltered = true;
@Override
public void run() {
isFiltered ^= true;
setToolTipText(isFiltered ? Messages.MemoryView_FilterAction_FilteredTooltipText : Messages.MemoryView_FilterAction_UnfilteredTooltipText);
TmfViewer tree = getLeftChildViewer();
if (tree instanceof MemoryUsageTreeViewer) {
MemoryUsageTreeViewer memoryUsageTreeViewer = (MemoryUsageTreeViewer) tree;
memoryUsageTreeViewer.setFiltered(isFiltered);
}
}
};
action.setToolTipText(Messages.MemoryView_FilterAction_FilteredTooltipText);
action.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.tracecompass.tmf.ui", "icons/elcl16/filter_items.gif")); //$NON-NLS-1$ //$NON-NLS-2$
// filtered by default, to not change the default behavior
action.setChecked(true);
return action;
}
}