sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.call/src/com/nokia/carbide/cpp/pi/call/CallPlugin.java
changeset 2 b9ab3b238396
child 5 844b047e260d
--- /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);
+		}
+	}
+}