--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.graphicsmemory/src/com/nokia/carbide/cpp/pi/graphicsmemory/GraphicsMemoryPlugin.java Wed Jun 23 15:05:09 2010 +0300
@@ -0,0 +1,562 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+package com.nokia.carbide.cpp.pi.graphicsmemory;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.osgi.framework.BundleContext;
+
+import com.nokia.carbide.cpp.internal.pi.analyser.NpiInstanceRepository;
+import com.nokia.carbide.cpp.internal.pi.analyser.ProfileReader;
+import com.nokia.carbide.cpp.internal.pi.analyser.ProfileVisualiser;
+import com.nokia.carbide.cpp.internal.pi.model.GenericTrace;
+import com.nokia.carbide.cpp.internal.pi.model.ParsedTraceData;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.AbstractPiPlugin;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.IClassReplacer;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.IEventListener;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.IReportable;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.IViewMenu;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.IVisualizable;
+import com.nokia.carbide.cpp.internal.pi.visual.GenericTraceGraph;
+import com.nokia.carbide.cpp.internal.pi.visual.GraphDrawRequest;
+import com.nokia.carbide.cpp.internal.pi.visual.PIEvent;
+import com.nokia.carbide.cpp.pi.editors.PIPageEditor;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class GraphicsMemoryPlugin extends AbstractPiPlugin implements
+ IViewMenu, ITrace, IClassReplacer, IVisualizable, IEventListener,
+ IReportable {
+ private static final String HELP_CONTEXT_ID = PIPageEditor.PI_ID
+ + ".graphicsmemory"; //$NON-NLS-1$
+ public static final String HELP_CONTEXT_ID_MAIN_PAGE = HELP_CONTEXT_ID
+ + ".graphicsMemoryPageContext"; //$NON-NLS-1$
+
+ public static final String PLUGIN_ID = "com.nokia.carbide.cpp.pi.graphicsmemory"; //$NON-NLS-1$
+
+ // There will be 1 graph for editor page 0
+ // This code may assume that page 0 has the threads graph
+ private final static int GRAPH_COUNT = 3;
+
+ // The shared instance.
+ private static GraphicsMemoryPlugin plugin;
+
+ private static void setPlugin(GraphicsMemoryPlugin newPlugin) {
+ plugin = newPlugin;
+ }
+
+ /**
+ * The constructor.
+ */
+ public GraphicsMemoryPlugin() {
+ super();
+ setPlugin(this);
+ }
+
+ /**
+ * This method is called upon plug-in activation
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ }
+
+ /**
+ * This method is called when the plug-in is stopped
+ */
+ public void stop(BundleContext context) throws Exception {
+ super.stop(context);
+ setPlugin(null);
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static GraphicsMemoryPlugin getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Update menu items
+ */
+ public void updateMenuItems() {
+ int uid = NpiInstanceRepository.getInstance().activeUid();
+ ProfileReader.getInstance().setTraceMenus(
+ NpiInstanceRepository.getInstance().getPlugins(uid), uid);
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given plug-in
+ * relative path.
+ *
+ * @param path
+ * the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return AbstractPiPlugin.imageDescriptorFromPlugin(
+ GraphicsMemoryPlugin.PLUGIN_ID, path); //$NON-NLS-1$
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class getTraceClass() {
+ return GraphicsMemoryTrace.class;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class getReplacedClass(String className) {
+ if (className.indexOf(GraphicsMemoryPlugin.PLUGIN_ID
+ + ".GraphicsMemoryTrace") != -1)//$NON-NLS-1$
+ {
+ return GraphicsMemoryTrace.class;
+ } else if (className.indexOf(GraphicsMemoryPlugin.PLUGIN_ID
+ + ".GraphicsMemorySample") != -1)//$NON-NLS-1$
+ {
+ return GraphicsMemorySample.class;
+ } else if (className
+ .indexOf("[L" + GraphicsMemoryPlugin.PLUGIN_ID + ".GraphicsMemoryProcess") != -1)//$NON-NLS-1$ //$NON-NLS-2$
+ {
+ return GraphicsMemoryProcess[].class;
+ } else if (className.indexOf(GraphicsMemoryPlugin.PLUGIN_ID
+ + ".GraphicsMemoryProcess") != -1)//$NON-NLS-1$
+ {
+ return GraphicsMemoryProcess.class;
+ } else
+ return null;
+ }
+
+ public void initialiseTrace(GenericTrace trace) {
+ if (!(trace instanceof GraphicsMemoryTrace))
+ return;
+
+ GraphicsMemoryTrace memTrace = (GraphicsMemoryTrace) trace;
+
+ NpiInstanceRepository.getInstance().activeUidAddTrace(
+ GraphicsMemoryPlugin.PLUGIN_ID, trace); //$NON-NLS-1$
+
+ memTrace.gatherDrawData();
+
+ System.out.println(Messages
+ .getString("GraphicsMemoryPlugin.traceProcessed")); //$NON-NLS-1$
+ }
+
+ public String getTraceName() {
+ return "GraphicsMemory"; //$NON-NLS-1$
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace#getTraceTitle()
+ */
+ public String getTraceTitle() {
+ return Messages.getString("GraphicsMemoryPlugin.1"); //$NON-NLS-1$
+ }
+
+ public int getTraceId() {
+ return 14;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace#parseTraceFiles
+ * (java.io.File[])
+ */
+ public ParsedTraceData parseTraceFiles(File[] files) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public ParsedTraceData parseTraceFile(File file) throws Exception {
+ ParsedTraceData traceData = null;
+ try {
+ GraphicsMemoryTraceParser memParser = new GraphicsMemoryTraceParser();
+ traceData = memParser.parse(file);
+ return traceData;
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ public MenuManager getViewOptionManager() {
+ if (NpiInstanceRepository.getInstance().activeUidGetTrace(
+ GraphicsMemoryPlugin.PLUGIN_ID) == null) //$NON-NLS-1$
+ return null; // no trace, so no MenuManager
+
+ boolean showPrivate = true;
+ boolean showShared = true;
+
+ // if there is a showPrivate value associated with the current Analyser
+ // tab, then use it
+ Object obj;
+ obj = NpiInstanceRepository.getInstance().activeUidGetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showPrivate"); //$NON-NLS-1$
+ if ((obj != null) && (obj instanceof Boolean))
+ // retrieve the current value
+ showPrivate = (Boolean) obj;
+ else
+ // set the initial value
+ NpiInstanceRepository
+ .getInstance()
+ .activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showPrivate", showPrivate); //$NON-NLS-1$
+
+ // if there is a showShared value associated with the current
+ // Analyser tab, then use it
+ obj = NpiInstanceRepository.getInstance().activeUidGetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showShared"); //$NON-NLS-1$
+ if ((obj != null) && (obj instanceof Boolean))
+ // retrieve the current value
+ showShared = (Boolean) obj;
+ else
+ // set the initial value
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showShared", showShared); //$NON-NLS-1$
+
+ Action action;
+
+ MenuManager manager = new MenuManager(Messages
+ .getString("GraphicsMemoryPlugin.graphicsMemoryGraph")); //$NON-NLS-1$
+
+ action = new Action(
+ Messages.getString("GraphicsMemoryPlugin.memoryStats"), Action.AS_PUSH_BUTTON) { //$NON-NLS-1$
+ public void run() {
+ new GraphicsMemoryStatisticsDialog(Display.getCurrent());
+ }
+ };
+
+ action.setToolTipText(Messages
+ .getString("GraphicsMemoryPlugin.memoryStatsTooltip")); //$NON-NLS-1$
+ manager.add(action);
+
+ manager.add(new Separator());
+
+ action = new Action(
+ Messages.getString("GraphicsMemoryPlugin.showPrivate"), Action.AS_RADIO_BUTTON) { //$NON-NLS-1$
+ public void run() {
+ if (this.isChecked())
+ receiveSelectionEvent("private_on"); //$NON-NLS-1$
+ }
+ };
+ action.setChecked(showPrivate && !showShared);
+ action.setToolTipText(Messages
+ .getString("GraphicsMemoryPlugin.showPrivateTooltip")); //$NON-NLS-1$
+ manager.add(action);
+
+ action = new Action(
+ Messages.getString("GraphicsMemoryPlugin.showShared"), Action.AS_RADIO_BUTTON) { //$NON-NLS-1$
+ public void run() {
+ if (this.isChecked())
+ receiveSelectionEvent("shared_on"); //$NON-NLS-1$
+ }
+ };
+ action.setChecked(showShared && !showPrivate);
+ action.setToolTipText(Messages
+ .getString("GraphicsMemoryPlugin.showSharedTooltip")); //$NON-NLS-1$
+ manager.add(action);
+
+ action = new Action(
+ Messages.getString("GraphicsMemoryPlugin.showAll"), Action.AS_RADIO_BUTTON) { //$NON-NLS-1$
+ public void run() {
+ if (this.isChecked())
+ receiveSelectionEvent("private_shared_on"); //$NON-NLS-1$
+ }
+ };
+ action.setChecked(showPrivate && showShared);
+ action.setToolTipText(Messages
+ .getString("GraphicsMemoryPlugin.showAllTooltip")); //$NON-NLS-1$
+ manager.add(action);
+
+ manager.add(new Separator());
+
+ boolean rescale = false;
+
+ // if there is a rescale value associated with the current Analyser tab,
+ // then use it
+ obj = NpiInstanceRepository.getInstance().activeUidGetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".rescale"); //$NON-NLS-1$
+ if ((obj != null) && (obj instanceof Boolean))
+ // retrieve the current value
+ rescale = (Boolean) obj;
+ else
+ // set the initial value
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".rescale", rescale); //$NON-NLS-1$
+
+ action = new Action(
+ Messages.getString("GraphicsMemoryPlugin.dynamicRescale"), Action.AS_CHECK_BOX) { //$NON-NLS-1$
+ public void run() {
+ if (this.isChecked())
+ receiveSelectionEvent("rescale_on"); //$NON-NLS-1$
+ else
+ receiveSelectionEvent("rescale_off"); //$NON-NLS-1$
+ }
+ };
+ action.setChecked(rescale);
+ action.setToolTipText(Messages
+ .getString("GraphicsMemoryPlugin.dynamicRescaleTooltip")); //$NON-NLS-1$
+ manager.add(action);
+
+ boolean showMemoryUsageLine = true;
+ // if there is a show memory usage value associated with the current
+ // Analyser tab, then use it
+ obj = NpiInstanceRepository.getInstance().activeUidGetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showMemoryUsage"); //$NON-NLS-1$
+ if ((obj != null) && (obj instanceof Boolean))
+ // retrieve the current value
+ showMemoryUsageLine = (Boolean) obj;
+ else
+ // set the initial value
+ NpiInstanceRepository
+ .getInstance()
+ .activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showMemoryUsage", showMemoryUsageLine); //$NON-NLS-1$
+
+ action = new Action(
+ Messages
+ .getString("GraphicsMemoryTraceGraph.showTotalMemoryUsage"), Action.AS_CHECK_BOX) { //$NON-NLS-1$
+ public void run() {
+ if (this.isChecked())
+ receiveSelectionEvent("memory_usage_line_on"); //$NON-NLS-1$
+ else
+ receiveSelectionEvent("memory_usage_line_off"); //$NON-NLS-1$
+ }
+ };
+ action.setChecked(showMemoryUsageLine);
+ action.setToolTipText(Messages
+ .getString("GraphicsMemoryPlugin.showTotalMemoryUsageToolTip")); //$NON-NLS-1$
+ manager.add(action);
+
+ return manager;
+ }
+
+ public void receiveEvent(String actionString, Event event) {
+ GraphicsMemoryTrace trace = (GraphicsMemoryTrace) NpiInstanceRepository
+ .getInstance()
+ .activeUidGetTrace(GraphicsMemoryPlugin.PLUGIN_ID); //$NON-NLS-1$
+
+ if (trace == null)
+ return;
+
+ if (actionString.equals("private_on") //$NON-NLS-1$
+ || actionString.equals("shared_on") //$NON-NLS-1$
+ || actionString.equals("private_shared_on") //$NON-NLS-1$
+ || actionString.equals("rescale_on") //$NON-NLS-1$
+ || actionString.equals("rescale_off")) //$NON-NLS-1$
+ {
+ ((GraphicsMemoryTraceGraph) trace
+ .getTraceGraph(PIPageEditor.THREADS_PAGE))
+ .action(actionString);
+ ((GraphicsMemoryTraceGraph) trace
+ .getTraceGraph(PIPageEditor.BINARIES_PAGE))
+ .action(actionString);
+ ((GraphicsMemoryTraceGraph) trace
+ .getTraceGraph(PIPageEditor.FUNCTIONS_PAGE))
+ .action(actionString);
+ } else if (actionString.equals("scroll")) //$NON-NLS-1$
+ {
+ PIEvent be = new PIEvent(event, PIEvent.SCROLLED);
+
+ ((GraphicsMemoryTraceGraph) trace
+ .getTraceGraph(PIPageEditor.THREADS_PAGE))
+ .piEventReceived(be);
+ ((GraphicsMemoryTraceGraph) trace
+ .getTraceGraph(PIPageEditor.BINARIES_PAGE))
+ .piEventReceived(be);
+ ((GraphicsMemoryTraceGraph) trace
+ .getTraceGraph(PIPageEditor.FUNCTIONS_PAGE))
+ .piEventReceived(be);
+ }
+ }
+
+ public void receiveSelectionEvent(String actionString) {
+ if (actionString == null)
+ return;
+
+ if (actionString.equals("private_on")) { //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showPrivate", true); //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showShared", false); //$NON-NLS-1$
+ } else if (actionString.equals("shared_on")) { //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showPrivate", false); //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showShared", true); //$NON-NLS-1$
+ } else if (actionString.equals("private_shared_on")) { //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showPrivate", true); //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showShared", true); //$NON-NLS-1$
+ } else if (actionString.equals("rescale_on")) { //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".rescale", true); //$NON-NLS-1$
+ } else if (actionString.equals("rescale_off")) { //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".rescale", false); //$NON-NLS-1$
+ } else if (actionString.equals("memory_usage_line_on")) { //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showMemoryUsage", true); //$NON-NLS-1$
+ } else if (actionString.equals("memory_usage_line_off")) { //$NON-NLS-1$
+ NpiInstanceRepository.getInstance().activeUidSetPersistState(
+ GraphicsMemoryPlugin.PLUGIN_ID + ".showMemoryUsage", false); //$NON-NLS-1$
+ } else {
+ return;
+ }
+
+ ((GraphicsMemoryTraceGraph) this
+ .getTraceGraph(PIPageEditor.THREADS_PAGE)).action(actionString);
+ ((GraphicsMemoryTraceGraph) this
+ .getTraceGraph(PIPageEditor.BINARIES_PAGE))
+ .action(actionString);
+ ((GraphicsMemoryTraceGraph) this
+ .getTraceGraph(PIPageEditor.FUNCTIONS_PAGE))
+ .action(actionString);
+ }
+
+ public GenericTraceGraph getTraceGraph(int graphIndex) {
+ GraphicsMemoryTrace trace = (GraphicsMemoryTrace) NpiInstanceRepository
+ .getInstance()
+ .activeUidGetTrace(GraphicsMemoryPlugin.PLUGIN_ID); //$NON-NLS-1$
+
+ if (trace != null)
+ return trace.getTraceGraph(graphIndex);
+ else
+ return null;
+ }
+
+ public Integer getLastSample(int graphIndex) {
+ GraphicsMemoryTrace trace = (GraphicsMemoryTrace) NpiInstanceRepository
+ .getInstance()
+ .activeUidGetTrace(GraphicsMemoryPlugin.PLUGIN_ID); //$NON-NLS-1$
+
+ if (trace != null)
+ return Integer.valueOf(trace.getLastSampleNumber());
+ else
+ return null;
+ }
+
+ public Hashtable<Integer, Object> getSummaryTable(double start, double end) {
+ return null;
+ }
+
+ public String getGeneralInfo() {
+ return null;
+ }
+
+ public ArrayList<String> getColumnNames() {
+ ArrayList<String> names = new ArrayList<String>();
+ names.add(Messages.getString("GraphicsMemoryPlugin.namesProcess")); //$NON-NLS-1$
+ names.add(Messages.getString("GraphicsMemoryPlugin.namesAvgPrivate")); //$NON-NLS-1$
+ names.add(Messages.getString("GraphicsMemoryPlugin.namesAvgShared")); //$NON-NLS-1$
+ names.add(Messages.getString("GraphicsMemoryPlugin.namesTotal")); //$NON-NLS-1$
+ return names;
+ }
+
+ public ArrayList<Boolean> getColumnSortTypes() {
+ ArrayList<Boolean> sortTypes = new ArrayList<Boolean>();
+ sortTypes.add(SORT_BY_NAME);
+ sortTypes.add(SORT_BY_NUMBER);
+ sortTypes.add(SORT_BY_NUMBER);
+ sortTypes.add(SORT_BY_NUMBER);
+ return sortTypes;
+ }
+
+ public String getActiveInfo(Object arg0, double startTime, double endTime) {
+ return null;
+ }
+
+ public MenuManager getReportGeneratorManager() {
+ return null;
+ }
+
+ public GraphDrawRequest getDrawRequest(int graphIndex) {
+ return null;
+ }
+
+ public int getGraphCount() {
+ return GRAPH_COUNT;
+ }
+
+ public int getPageNumber(int graphIndex) {
+ // Assumes page 0 has the threads graph, 1 has the binaries, and 2 has
+ // the functions
+ if (graphIndex == 0)
+ return PIPageEditor.THREADS_PAGE;
+ else if (graphIndex == 1)
+ return PIPageEditor.BINARIES_PAGE;
+ else if (graphIndex == 2)
+ return PIPageEditor.FUNCTIONS_PAGE;
+
+ return PIPageEditor.NEXT_AVAILABLE_PAGE;
+ }
+
+ // return whether this plugin's editor pages have been created
+ public boolean arePagesCreated() {
+ return false;
+ }
+
+ public void setPagesCreated(boolean pagesCreated) {
+ return;
+ }
+
+ public int getCreatePageCount() {
+ return 0;
+ }
+
+ public int getCreatePageIndex(int index) {
+ return 0;
+ }
+
+ public ProfileVisualiser createPage(int index) {
+ return null;
+ }
+
+ public void setPageIndex(int index, int pageIndex) {
+ return;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace#isMandatory()
+ */
+ public boolean isMandatory() {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace#getTraceDescription()
+ */
+ public String getTraceDescription() {
+ return getTraceTitle();
+ }
+}