--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi/src/com/nokia/carbide/cpp/internal/pi/test/AnalysisInfoHandler.java Thu Feb 11 15:32:31 2010 +0200
@@ -0,0 +1,423 @@
+/*
+ * 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.internal.pi.test;
+
+import java.sql.Date;
+import java.sql.Time;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.Vector;
+import java.util.Map.Entry;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+import com.nokia.carbide.cpp.internal.pi.manager.PluginRegisterer;
+import com.nokia.carbide.cpp.internal.pi.manager.PluginRegistry;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.AbstractPiPlugin;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace;
+
+public class AnalysisInfoHandler
+{
+ private static String NOKIA_INTERNAL = Messages.getString("AnalysisInfoHandler.NokiaInternal"); //$NON-NLS-1$
+
+ private String pi_file_version;
+
+ //private Vector analysis_info;
+ private String profiler_version;
+ private String analyser_version;
+ private String profiling_date;
+ private String analysing_date;
+ private String additional_info_string = ""; //$NON-NLS-1$
+ private HashMap <Integer, Object> trace_additional_info = new HashMap <Integer, Object>();
+ private String defaultTimeScale = Messages.getString("AnalysisInfoHandler.defaultTimeScale"); //$NON-NLS-1$
+// private ArrayList<EnabledTrace> traceList;
+
+ private PIAnalysisInfo info;
+
+ public AnalysisInfoHandler()
+ {
+ this.pi_file_version = PIAnalyser.NPIFileFormat;
+ this.profiler_version = Messages.getString("AnalysisInfoHandler.defaultProfilerVersion"); //$NON-NLS-1$
+ this.analyser_version = PIAnalyser.version;
+ this.profiling_date = Messages.getString("AnalysisInfoHandler.defaultProfilingDate"); //$NON-NLS-1$
+ Time time = new Time(System.currentTimeMillis());
+ Date date = new Date(System.currentTimeMillis());
+
+ this.analysing_date = date.toString() + Messages.getString("AnalysisInfoHandler.space") + time.toString(); //$NON-NLS-1$
+ }
+
+ public void analysisDataReader(BappeaAnalysisInfo data)
+ {
+ // convert legacy class to PIAnalysisInfo
+ if (data != null)
+ {
+ String string;
+ String legacy_file_version = data.bappea_file_version;
+
+ if ( legacy_file_version.startsWith(Messages.getString("AnalysisInfoHandler.unknown")) //$NON-NLS-1$
+ || legacy_file_version.startsWith(AnalysisInfoHandler.NOKIA_INTERNAL))
+ this.pi_file_version = legacy_file_version;
+ else
+ this.pi_file_version = AnalysisInfoHandler.NOKIA_INTERNAL + legacy_file_version;
+
+ this.info = new PIAnalysisInfo();
+
+ if ( legacy_file_version.startsWith(Messages.getString("AnalysisInfoHandler.unknown")) //$NON-NLS-1$
+ || legacy_file_version.startsWith(AnalysisInfoHandler.NOKIA_INTERNAL))
+ this.info.pi_file_version = legacy_file_version;
+ else
+ this.info.pi_file_version = AnalysisInfoHandler.NOKIA_INTERNAL + legacy_file_version;
+
+ this.info.analysis_info = data.analysis_info;
+
+ string = (String) info.analysis_info.elementAt(0);
+ if ( !string.startsWith(Messages.getString("AnalysisInfoHandler.unknown")) && !string.startsWith(AnalysisInfoHandler.NOKIA_INTERNAL)) //$NON-NLS-1$
+ string = AnalysisInfoHandler.NOKIA_INTERNAL + string;
+ info.analysis_info.set(0, string);
+
+ string = (String) info.analysis_info.elementAt(1);
+ if ( !string.startsWith(Messages.getString("AnalysisInfoHandler.unknown")) && !string.startsWith(AnalysisInfoHandler.NOKIA_INTERNAL)) //$NON-NLS-1$
+ string = AnalysisInfoHandler.NOKIA_INTERNAL + string;
+ info.analysis_info.set(1, string);
+
+ this.info.trace_info = new Vector<Object>();
+ this.info.additional_info = data.additional_info;
+
+ loadVersionInfo();
+ loadAdditionalInfoFromNPI();
+
+ // create a trace list based on hard-coded ordering
+ info.trace_info.add(new EnabledTrace(0, Messages.getString("AnalysisInfoHandler.addressThread"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 1) && ((Boolean)(data.trace_info.get(1))))
+ info.trace_info.add(new EnabledTrace(1, Messages.getString("AnalysisInfoHandler.call"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 2) && ((Boolean)(data.trace_info.get(2))))
+ info.trace_info.add(new EnabledTrace(2, Messages.getString("AnalysisInfoHandler.memory"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 3) && ((Boolean)(data.trace_info.get(3))))
+ info.trace_info.add(new EnabledTrace(3, Messages.getString("AnalysisInfoHandler.priority"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 4) && ((Boolean)(data.trace_info.get(4))))
+ info.trace_info.add(new EnabledTrace(4, Messages.getString("AnalysisInfoHandler.DSP"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 5) && ((Boolean)(data.trace_info.get(5))))
+ info.trace_info.add(new EnabledTrace(5, Messages.getString("AnalysisInfoHandler.instr"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 6) && ((Boolean)(data.trace_info.get(6))))
+ info.trace_info.add(new EnabledTrace(6, Messages.getString("AnalysisInfoHandler.TCPIP"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 7) && ((Boolean)(data.trace_info.get(7))))
+ info.trace_info.add(new EnabledTrace(7, Messages.getString("AnalysisInfoHandler.custom"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 8) && ((Boolean)(data.trace_info.get(8))))
+ info.trace_info.add(new EnabledTrace(8, Messages.getString("AnalysisInfoHandler.map"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 9) && ((Boolean)(data.trace_info.get(9))))
+ info.trace_info.add(new EnabledTrace(9, Messages.getString("AnalysisInfoHandler.IRQSWI"))); //$NON-NLS-1$
+ if ((data.trace_info.size() > 10) && ((Boolean)(data.trace_info.get(10))))
+ info.trace_info.add(new EnabledTrace(10, Messages.getString("AnalysisInfoHandler.button"))); //$NON-NLS-1$
+ }
+ else
+ {
+ this.analyser_version = Messages.getString("AnalysisInfoHandler.unknown"); //$NON-NLS-1$
+ this.analysing_date = Messages.getString("AnalysisInfoHandler.unknown"); //$NON-NLS-1$
+ this.profiler_version = Messages.getString("AnalysisInfoHandler.unknown"); //$NON-NLS-1$
+ this.pi_file_version = Messages.getString("AnalysisInfoHandler.unknownFileVersion"); //$NON-NLS-1$
+ }
+ }
+
+ public void analysisDataReader(PIAnalysisInfo data)
+ {
+ if (data != null)
+ {
+ this.info = data;
+ this.pi_file_version = data.pi_file_version;
+ loadVersionInfo();
+ loadAdditionalInfoFromNPI();
+ }
+ else
+ {
+ this.analyser_version = Messages.getString("AnalysisInfoHandler.unknown"); //$NON-NLS-1$
+ this.analysing_date = Messages.getString("AnalysisInfoHandler.unknown"); //$NON-NLS-1$
+ this.profiler_version = Messages.getString("AnalysisInfoHandler.unknown"); //$NON-NLS-1$
+ this.pi_file_version = Messages.getString("AnalysisInfoHandler.unknownFileVersion"); //$NON-NLS-1$
+ this.additional_info_string = Messages.getString("AnalysisInfoHandler.unknown"); //$NON-NLS-1$
+ }
+ }
+
+ public Vector getTraceInfo() {
+ if (this.info.trace_info == null)
+ this.info.trace_info = new Vector<Object>();
+
+ return this.info.trace_info;
+ }
+
+ private void loadVersionInfo()
+ {
+ this.profiler_version = (String) info.analysis_info.elementAt(0);
+ this.analyser_version = (String) info.analysis_info.elementAt(1);
+ this.profiling_date = (String) info.analysis_info.elementAt(2);
+ this.analysing_date = (String) info.analysis_info.elementAt(3);
+ if (info.analysis_info.size() > 4) //file format version 1.2 or newer
+ this.defaultTimeScale = (String) info.analysis_info.elementAt(4);
+
+ // ignore info.additional_info, which only contains a single placeholder button trace comment
+ }
+
+ private void loadAdditionalInfoFromNPI()
+ {
+ int additional_info_size = info.additional_info.size();
+ for (int i = 0; i < additional_info_size; i++) {
+ Object additional = info.additional_info.elementAt(i);
+ if (additional instanceof TraceAdditionalInfo) {
+ TraceAdditionalInfo traceInfo = (TraceAdditionalInfo)additional;
+ Set<Entry<Integer, Vector<Object>>> infoSet = traceInfo.getAdditionalInfoSet();
+ for (Entry<Integer, Vector<Object>> info : infoSet) {
+ // this code is clumsy because the plugin, not the trace, has the trace ID info
+ PluginRegisterer.registerAllPlugins(); // I do not agree this kind of laziness for loading, but what else can we do now
+ Enumeration<AbstractPiPlugin> enuPlugins = PluginRegistry.getInstance().getRegistryEntries(); //$NON-NLS-1$
+ while (enuPlugins.hasMoreElements()) { // find plugin corresponding to this info and ask it to process
+ AbstractPiPlugin plugin = enuPlugins.nextElement();
+ if (!(plugin instanceof ITrace)) {
+ continue;
+ }
+ if (!info.getKey().equals(((ITrace)plugin).getTraceId())) {
+ continue;
+ }
+ if (plugin instanceof IProvideTraceAdditionalInfo) {
+ ((IProvideTraceAdditionalInfo)plugin).additionalInfoToAnalysisInfoHandler(info.getValue(), this);
+ String displayString = ((IProvideTraceAdditionalInfo)plugin).InfoHandlerToDisplayString(this);
+ if (displayString.length() > 0) {
+ this.additional_info_string += ((ITrace)plugin).getTraceName() + ":\n"; //$NON-NLS-1$
+ this.additional_info_string += displayString + "\n"; //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public void setTraceDefinedInfo(int traceId, Object list) {
+ trace_additional_info.put(traceId, list);
+ }
+
+ public Object getTraceDefinedInfo(int traceId) {
+ Object result = trace_additional_info.get(traceId);
+ return result;
+ }
+
+ public void setFileVersion(String pi_file_version)
+ {
+ this.pi_file_version = pi_file_version;
+ }
+
+ public String getFileVersion()
+ {
+ return this.pi_file_version;
+ }
+
+ public String getAnalysingDate()
+ {
+ return this.analysing_date;
+ }
+
+ public String getProfilingDate()
+ {
+ return this.profiling_date;
+ }
+
+ public String getAnalyserVersion()
+ {
+ return this.analyser_version;
+ }
+
+ public String getProfilerVersion()
+ {
+ return this.profiler_version;
+ }
+
+ public String getAdditional_info_string() {
+ return additional_info_string;
+ }
+
+ public void setPITimeScale(String scale)
+ {
+ this.defaultTimeScale = scale;
+ }
+
+ public String getPITimeScaleString()
+ {
+ return this.defaultTimeScale;
+ }
+
+ public float getPITimeScaleFloat()
+ {
+ if (this.defaultTimeScale.indexOf("-") != -1) //$NON-NLS-1$
+ return 1.025f;
+ else
+ return Float.parseFloat(this.defaultTimeScale);
+ }
+
+ //this is used to get data for storing into file system
+ public PIAnalysisInfo getAnalysisInfo()
+ {
+ PIAnalysisInfo info;
+ info = new PIAnalysisInfo();
+ info.pi_file_version = this.pi_file_version;
+
+ //creating version info
+ info.analysis_info.add(this.profiler_version);
+ info.analysis_info.add(this.analyser_version);
+ info.analysis_info.add(this.profiling_date);
+ info.analysis_info.add(this.analysing_date);
+ info.analysis_info.add(this.defaultTimeScale);
+
+ //creating the trace info vector
+ info.trace_info.clear();
+
+ return info;
+ }
+
+ // internal test method
+ public void eraseTimeStamp () {
+ int count = analysing_date.length();
+ analysing_date = ""; //$NON-NLS-1$
+
+ // replace with underscore
+ for (int i = 0; i < count; i++)
+ analysing_date += "_"; //$NON-NLS-1$
+ }
+
+ // return a table of analysis info
+ public Table getAnalysisInfoTable(Composite parent)
+ {
+ TableItem item;
+
+ // create a two column table - descriptions and values
+ Table table = new Table(parent, SWT.HIDE_SELECTION);
+ table.setRedraw(false);
+ table.setHeaderVisible(false);
+ table.setLinesVisible(false);
+ table.setBackground(parent.getBackground());
+
+ TableColumn col1 = new TableColumn(table, SWT.LEFT);
+ TableColumn col2 = new TableColumn(table, SWT.LEFT);
+
+ item = new TableItem(table, SWT.NONE);
+ item.setText(0, Messages.getString("AnalysisInfoHandler.analyzerVersion")); //$NON-NLS-1$
+ item.setText(1, this.getAnalyserVersion());
+ item = new TableItem(table, SWT.NONE);
+ item.setText(0, Messages.getString("AnalysisInfoHandler.analyzeFileFormat")); //$NON-NLS-1$
+ item.setText(1, this.pi_file_version);
+ item = new TableItem(table, SWT.NONE);
+ item.setText(0, Messages.getString("AnalysisInfoHandler.analyzeFileDate")); //$NON-NLS-1$
+ item.setText(1, this.getAnalysingDate());
+
+ item = new TableItem(table, SWT.NONE);
+ item.setText(0, Messages.getString("AnalysisInfoHandler.profilingDate")); //$NON-NLS-1$
+ item.setText(1, this.getProfilingDate());
+ item = new TableItem(table, SWT.NONE);
+
+ // sort by trace id number
+ boolean swapped = true;
+
+ while (swapped) {
+ EnabledTrace a;
+ EnabledTrace b;
+ swapped = false;
+ for (int i = 0; i < info.trace_info.size() - 1; i++) {
+ a = (EnabledTrace) info.trace_info.get(i);
+ b = (EnabledTrace) info.trace_info.get(i + 1);
+ if (a.traceId > b.traceId) {
+ info.trace_info.set(i, b);
+ info.trace_info.set(i + 1, a);
+ swapped = true;
+ }
+ }
+ }
+
+ item = new TableItem(table, SWT.NONE);
+ item.setText(0, Messages.getString("AnalysisInfoHandler.traces")); //$NON-NLS-1$
+
+ for (int i = 0; i < info.trace_info.size(); i++) {
+ EnabledTrace data = (EnabledTrace) info.trace_info.get(i);
+ item = new TableItem(table, SWT.NONE);
+ item.setText(0, Messages.getString("AnalysisInfoHandler.whitespace") + data.traceName); //$NON-NLS-1$
+ }
+
+ if (additional_info_string != null) {
+ item = new TableItem(table, SWT.NONE);
+ item.setText(additional_info_string);
+ }
+
+ col1.pack();
+ col2.pack();
+ table.setRedraw(true);
+ return table;
+ }
+
+ // return a table of analysis info
+ public void getAnalysisInfoLabels(Composite parent)
+ {
+ Label label;
+ String string;
+
+ label = new Label(parent, SWT.NONE);
+ string = Messages.getString("AnalysisInfoHandler.analyzerVersion2"); //$NON-NLS-1$
+ label.setText(string + this.getAnalyserVersion());
+ label = new Label(parent, SWT.NONE);
+ string = Messages.getString("AnalysisInfoHandler.analyzeFileFormat2"); //$NON-NLS-1$
+ label.setText(string + this.pi_file_version);
+ label = new Label(parent, SWT.NONE);
+ string = Messages.getString("AnalysisInfoHandler.analyzeFileDate2"); //$NON-NLS-1$
+ label.setText(string + this.getAnalysingDate());
+
+ label = new Label(parent, SWT.NONE);
+
+ // sort by trace id number
+ boolean swapped = true;
+
+ while (swapped) {
+ EnabledTrace a;
+ EnabledTrace b;
+ swapped = false;
+ for (int i = 0; i < info.trace_info.size() - 1; i++) {
+ a = (EnabledTrace) info.trace_info.get(i);
+ b = (EnabledTrace) info.trace_info.get(i + 1);
+ if (a.traceId > b.traceId) {
+ info.trace_info.set(i, b);
+ info.trace_info.set(i + 1, a);
+ swapped = true;
+ }
+ }
+ }
+
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString("AnalysisInfoHandler.traces2")); //$NON-NLS-1$
+
+ for (int i = 0; i < info.trace_info.size(); i++) {
+ EnabledTrace data = (EnabledTrace) info.trace_info.get(i);
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString("AnalysisInfoHandler.whitespace2") + data.traceName); //$NON-NLS-1$
+ }
+
+ if (additional_info_string != null) {
+ label = new Label(parent, SWT.NONE);
+ label.setText(additional_info_string);
+ }
+ }
+}