sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.call/src/com/nokia/carbide/cpp/pi/call/CallPlugin.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.call/src/com/nokia/carbide/cpp/pi/call/CallPlugin.java Thu Feb 11 15:32:31 2010 +0200
@@ -0,0 +1,356 @@
+/*
+ * Copyright (c) 2009 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.call;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.BundleContext;
+
+import com.nokia.carbide.cpp.internal.pi.analyser.NpiInstanceRepository;
+import com.nokia.carbide.cpp.internal.pi.analyser.ProfileVisualiser;
+import com.nokia.carbide.cpp.internal.pi.interfaces.IToolBarActionListener;
+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.ITrace;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.IVisualizable;
+import com.nokia.carbide.cpp.internal.pi.test.AnalysisInfoHandler;
+import com.nokia.carbide.cpp.internal.pi.visual.GenericTraceGraph;
+import com.nokia.carbide.cpp.internal.pi.visual.GraphDrawRequest;
+import com.nokia.carbide.cpp.pi.call.GfcFunctionItem.GfcFunctionItemData;
+import com.nokia.carbide.cpp.pi.editors.PIPageEditor;
+import com.nokia.carbide.cpp.pi.util.GeneralMessages;
+
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class CallPlugin extends AbstractPiPlugin
+ implements ITrace, IClassReplacer, IVisualizable, IEventListener, IToolBarActionListener
+{
+ private static final String HELP_CONTEXT_ID = PIPageEditor.PI_ID + ".call"; //$NON-NLS-1$
+
+ // the shared instance
+ private static CallPlugin plugin;
+
+ // page index assigned to the page displaying call info
+ private int pageIndex = PIPageEditor.NEXT_AVAILABLE_PAGE;
+
+ // call trace
+ private GfcTrace trace;
+
+ // call page
+ private ProfileVisualiser profileVisualiser;
+
+ // call table handler
+ private CallVisualiser callVisualiser;
+
+ private static void setPlugin(CallPlugin newPlugin)
+ {
+ plugin = newPlugin;
+ }
+
+ /**
+ * The constructor.
+ */
+ public CallPlugin() {
+ super();
+ setPlugin(this);
+ }
+
+ public Class getTraceClass()
+ {
+ return GfcTrace.class;
+ }
+
+ public Class getReplacedClass(String className)
+ {
+ if ( className.indexOf("com.nokia.carbide.cpp.pi.call.GfcTrace") != -1 //$NON-NLS-1$
+ || className.indexOf("com.nokia.carbide.pi.call.GfcTrace") != -1 //$NON-NLS-1$
+ || className.indexOf("fi.vtt.bappea.model.GfcTrace") != -1 //$NON-NLS-1$
+ || className.indexOf("fi.vtt.bappea.gfcTracePlugin.GfcTrace") != -1) //$NON-NLS-1$
+ {
+ return GfcTrace.class;
+ }
+ else if ( className.indexOf("com.nokia.carbide.cpp.pi.call.GfcSample") != -1 //$NON-NLS-1$
+ || className.indexOf("com.nokia.carbide.pi.call.GfcSample") != -1 //$NON-NLS-1$
+ || className.indexOf("fi.vtt.bappea.model.GfcSample") != -1 //$NON-NLS-1$
+ || className.indexOf("fi.vtt.bappea.gfcTracePlugin.GfcSample") != -1) //$NON-NLS-1$
+ {
+ return GfcSample.class;
+ }
+ else if ( className.indexOf("com.nokia.carbide.cpp.pi.call.GfcFunctionItem$GfcFunctionItemData") != -1 //$NON-NLS-1$
+ || className.indexOf("com.nokia.carbide.pi.call.GfcFunctionItem$GfcFunctionItemData") != -1 //$NON-NLS-1$
+ || className.indexOf("fi.vtt.bappea.gfcTracePlugin.GfcFunctionItem$GfcFunctionItemData") != -1) //$NON-NLS-1$
+ {
+ return GfcFunctionItemData.class;
+ }
+ else if ( className.indexOf("com.nokia.carbide.cpp.pi.call.GfcFunctionItem") != -1 //$NON-NLS-1$
+ || className.indexOf("com.nokia.carbide.pi.call.GfcFunctionItem") != -1 //$NON-NLS-1$
+ || className.indexOf("fi.vtt.bappea.analyser.GfcFunctionItem") != -1 //$NON-NLS-1$
+ || className.indexOf("fi.vtt.bappea.gfcTracePlugin.GfcFunctionItem") != -1) //$NON-NLS-1$
+ {
+ return GfcFunctionItem.class;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public void initialiseTrace(GenericTrace trace)
+ {
+ if (!(trace instanceof GfcTrace))
+ return;
+
+ this.trace = (GfcTrace) trace;
+
+ this.trace.samples.trimToSize();
+ this.trace.getCompleteGfcTrace().trimToSize();
+
+ NpiInstanceRepository.getInstance().activeUidAddTrace("com.nokia.carbide.cpp.pi.call", trace); //$NON-NLS-1$
+
+ /*
+ * Check if the trace is complete (first sample is at time 1,
+ * sample N is at time N)
+ */
+ this.trace.setComplete();
+
+ ArrayList<CallVisualiser> callVisualiserList = new ArrayList<CallVisualiser>();
+
+ NpiInstanceRepository.getInstance().activeUidSetPersistState("com.nokia.carbide.cpp.pi.call.CallPlugin.callVisualiserList", callVisualiserList); //$NON-NLS-1$
+
+ ArrayList<ProfileVisualiser> profileVisualiserList = new ArrayList<ProfileVisualiser>();
+ NpiInstanceRepository.getInstance().activeUidSetPersistState("com.nokia.carbide.cpp.pi.call.CallPlugin.profileVisualiserList", profileVisualiserList); //$NON-NLS-1$
+
+ }
+
+ public String getTraceName() {
+ return "Function Call"; //$NON-NLS-1$
+ }
+
+ public int getTraceId() {
+ return 2;
+ }
+
+ public ParsedTraceData parseTraceFile(File file /*, ProgressBar progressBar*/) throws Exception
+ {
+ GfcTraceParser gfcParser;
+ gfcParser = new GfcTraceParser();
+
+ return gfcParser.parse(file);
+ }
+
+ /**
+ * 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 CallPlugin getDefault() {
+ return plugin;
+ }
+
+ /**
+ * 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("com.nokia.carbide.cpp.pi.call", path); //$NON-NLS-1$
+ }
+
+ boolean pagesCreated = false;
+
+ // return whether this plugin's editor pages have been created
+ public boolean arePagesCreated() {
+ return this.pagesCreated;
+ }
+
+ // set whether this plugin's editor pages have been created
+ public void setPagesCreated(boolean pagesCreated) {
+ this.pagesCreated = pagesCreated;
+ }
+
+ // number of editor pages to create
+ public int getCreatePageCount() {
+ return 1;
+ }
+
+ // editor page index for each created editor page
+ public int getCreatePageIndex(int index) {
+ return PIPageEditor.NEXT_AVAILABLE_PAGE;
+ }
+
+ // page index actually assigned to a created page
+ public void setPageIndex(int index, int pageIndex) {
+ if (index == 0)
+ this.pageIndex = pageIndex;
+ }
+
+ // create the page(s)
+ public ProfileVisualiser createPage(int index) {
+ Composite parent = NpiInstanceRepository.getInstance().activeUidGetParentComposite();
+ if (parent == null) {
+ // no parent composite is only for temp instance used by non-GUI importer
+ GeneralMessages.showErrorMessage(Messages.getString("CallPlugin.0")); //$NON-NLS-1$
+ return null;
+ }
+
+ // there is one page, with no graph
+ this.profileVisualiser = new ProfileVisualiser(ProfileVisualiser.TOP_ONLY, parent,
+ Messages.getString("CallPlugin.functionCalls")); //$NON-NLS-1$
+ AnalysisInfoHandler infoHandler = NpiInstanceRepository.getInstance().activeUidGetAnalysisInfoHandler();
+ this.profileVisualiser.getParserRepository().setPIAnalysisInfoHandler(infoHandler);
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(profileVisualiser.getContentPane(),
+ HELP_CONTEXT_ID + ".functionCallsPageContext"); //$NON-NLS-1$
+
+ PIPageEditor pageEditor = PIPageEditor.currentPageEditor();
+
+ this.callVisualiser = new CallVisualiser(pageEditor, pageIndex, profileVisualiser.getTopComposite().getSashForm(), this.trace);
+
+ this.profileVisualiser.getTitle().setText(Messages.getString("CallPlugin.functionCallAnalysis")); //$NON-NLS-1$
+ this.profileVisualiser.getTitle().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+ this.profileVisualiser.getTitle().setFont(PIPageEditor.helvetica_12);
+
+ this.profileVisualiser.getTitle2().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+
+ this.profileVisualiser.getTimeString().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+ this.profileVisualiser.getTimeString().setFont(PIPageEditor.helvetica_10);
+
+ Object objCallList = NpiInstanceRepository.getInstance().activeUidGetPersistState("com.nokia.carbide.cpp.pi.call.CallPlugin.callVisualiserList"); //$NON-NLS-1$
+ ArrayList<CallVisualiser> callVisualiserList = (ArrayList<CallVisualiser>) objCallList;
+
+ Object objProfileList = NpiInstanceRepository.getInstance().activeUidGetPersistState("com.nokia.carbide.cpp.pi.call.CallPlugin.profileVisualiserList"); //$NON-NLS-1$
+ ArrayList<ProfileVisualiser> profileVisualiserList = (ArrayList<ProfileVisualiser>) objProfileList;
+
+ if (callVisualiserList != null)
+ callVisualiserList.add(this.callVisualiser);
+
+ if (profileVisualiserList != null)
+ profileVisualiserList.add(this.profileVisualiser);
+
+ return this.profileVisualiser;
+ }
+
+ // number of graphs supplied by this plugin
+ public int getGraphCount() {
+ return 0;
+ }
+
+ // page number of each graph supplied by this plugin
+ public int getPageNumber(int graphIndex) {
+ Object objCallList = NpiInstanceRepository.getInstance().activeUidGetPersistState("com.nokia.carbide.cpp.pi.call.CallPlugin.callVisualiserList"); //$NON-NLS-1$
+ ArrayList<CallVisualiser> callVisualiserList = (ArrayList<CallVisualiser>) objCallList;
+
+ if (callVisualiserList == null)
+ return this.pageIndex;
+
+ for (int i = 0; i < callVisualiserList.size(); i++) {
+ if (callVisualiserList.get(i).getPageEditor() == PIPageEditor.currentPageEditor())
+ return callVisualiserList.get(i).getPageIndex();
+ }
+
+ return this.pageIndex;
+ }
+
+ public GenericTraceGraph getTraceGraph(int graphIndex) {
+ return null;
+ }
+
+ public Integer getLastSample(int graphIndex) {
+ return null;
+ }
+
+ public GraphDrawRequest getDrawRequest(int graphIndex) {
+ return null;
+ }
+
+ public void receiveEvent(String action, Event event) {
+ Object objCallList = NpiInstanceRepository.getInstance().activeUidGetPersistState("com.nokia.carbide.cpp.pi.call.CallPlugin.callVisualiserList"); //$NON-NLS-1$
+ ArrayList<CallVisualiser> callVisualiserList = (ArrayList<CallVisualiser>) objCallList;
+
+ if (callVisualiserList == null)
+ return;
+
+ Object objProfileList = NpiInstanceRepository.getInstance().activeUidGetPersistState("com.nokia.carbide.cpp.pi.call.CallPlugin.profileVisualiserList"); //$NON-NLS-1$
+ ArrayList<ProfileVisualiser> profileVisualiserList = (ArrayList<ProfileVisualiser>) objProfileList;
+
+ if (profileVisualiserList == null)
+ return;
+
+ if (action.equals("changeSelection")) { //$NON-NLS-1$
+ // find the right callVisualiser and ProfileVisualiser
+ for (int i = 0; i < callVisualiserList.size(); i++) {
+ if (callVisualiserList.get(i).getPageEditor() == PIPageEditor.currentPageEditor()) {
+ callVisualiserList.get(i).setStartAndEnd(event.start, event.end);
+ double startTime = PIPageEditor.currentPageEditor().getStartTime();
+ double endTime = PIPageEditor.currentPageEditor().getEndTime();
+ profileVisualiserList.get(i).getTimeString().setText(ProfileVisualiser.getTimeInterval(startTime, endTime));
+ }
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.carbide.cpp.internal.pi.plugin.model.IVisualizable#getGraphTitle(int)
+ */
+ public String getGraphTitle(int graphIndex) {
+ return null;
+ }
+
+ public void setActions(boolean entering, int pageIndex) {
+ if (pageIndex != this.pageIndex)
+ return;
+
+ if (entering) {
+ PIPageEditor.getZoomInAction().setEnabled(false);
+ PIPageEditor.getZoomOutAction().setEnabled(false);
+ PIPageEditor.getZoomToSelectionAction().setEnabled(false);
+ PIPageEditor.getZoomToTraceAction().setEnabled(false);
+ } else {
+ PIPageEditor.getZoomInAction().setEnabled(true);
+ PIPageEditor.getZoomOutAction().setEnabled(true);
+ PIPageEditor.getZoomToSelectionAction().setEnabled(true);
+ PIPageEditor.getZoomToTraceAction().setEnabled(true);
+ }
+ }
+}