diff -r 5b9d4d8641ce -r ae255c9aa552 sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizard.java --- a/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizard.java Wed Jun 23 14:49:59 2010 +0300 +++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizard.java Wed Jun 23 15:05:09 2010 +0300 @@ -21,6 +21,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -34,6 +35,7 @@ import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; @@ -42,7 +44,11 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IImportWizard; import org.eclipse.ui.INewWizard; +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.IProgressService; @@ -51,15 +57,26 @@ import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo; import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext; import com.nokia.carbide.cpp.internal.pi.analyser.AnalyserDataProcessor; +import com.nokia.carbide.cpp.internal.pi.analyser.NpiInstanceRepository; +import com.nokia.carbide.cpp.internal.pi.model.GenericSampledTrace; +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.model.TraceDataRepository; +import com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace; import com.nokia.carbide.cpp.internal.pi.utils.PIUtilities; +import com.nokia.carbide.cpp.internal.pi.wizards.model.SessionHandler; +import com.nokia.carbide.cpp.internal.pi.wizards.model.TraceFile; import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.IPkgEntry; import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.RofsObySymbolPair; +import com.nokia.carbide.cpp.internal.pi.wizards.ui.views.PIView; +import com.nokia.carbide.cpp.pi.PiPlugin; import com.nokia.carbide.cpp.pi.button.BupEventMapManager; import com.nokia.carbide.cpp.pi.button.ButtonPlugin; import com.nokia.carbide.cpp.pi.importer.SampleImporter; import com.nokia.carbide.cpp.pi.util.GeneralMessages; import com.nokia.carbide.cpp.pi.wizards.WizardsPlugin; import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext; +import com.nokia.carbide.cpp.sdk.core.ISymbianSDK; import com.nokia.carbide.cpp.ui.CarbideUIPlugin; import com.nokia.carbide.cpp.ui.ICarbideSharedImages; import com.nokia.cpp.internal.api.utils.core.Check; @@ -224,7 +241,6 @@ if (container.startsWith("/")) //$NON-NLS-1$ container = container.substring(1, container.length()); sampleImporter.setProjectName(container); - sampleImporter.setPiFileName(wizardSettings.piFileName); if (wizardSettings.haveRomOnly || wizardSettings.haveAppRom) { if (wizardSettings.romSdk != null && wizardSettings.romSdk.getEPOCROOT() != null) { sampleImporter.setRomEpocroot(wizardSettings.romSdk.getEPOCROOT()); @@ -314,13 +330,16 @@ } } + sampleImporter.setProfilerActivator(wizardSettings.profilerActivator); if(profilerDataPlugins.size() <= 1){ for(ProfilerDataPlugins pdp : profilerDataPlugins){ sampleImporter.setDatFileName(pdp.getProfilerDataPath().toString()); // due to PI shortcomings (i.e. plugins that create pages have to come first) // the plugins have to be sorted by trace id + sampleImporter.setPiFileName(""); //$NON-NLS-1$ sampleImporter.importSamples(false, PIUtilities.sortPlugins(pdp.getSelectedPlugins()), true, null, null); + logImportedFile(pdp); break; } } @@ -339,9 +358,11 @@ } suffixTaskName = MessageFormat.format(Messages.getString("NewPIWizard.suffixTaskName"), i[0]++, count); //$NON-NLS-1$ sampleImporter.setDatFileName(pdp.getProfilerDataPath().toString()); + sampleImporter.setPiFileName(""); //$NON-NLS-1$ sampleImporter.importSamples(false, PIUtilities .sortPlugins(pdp.getSelectedPlugins()), false, suffixTaskName, new SubProgressMonitor(progressMonitor, AnalyserDataProcessor.TOTAL_PROGRESS_COUNT)); + logImportedFile(pdp); } } @@ -352,7 +373,51 @@ GeneralMessages.showErrorMessage(e.getMessage()); } } - cleanTempPkgFile(); + cleanTempPkgFile(); + showPIViewer(); + } + + /** + * Log given imported file to show it on the PI view + * + * @param pdp instance of the ProfilerDataPlugins + */ + private void logImportedFile(ProfilerDataPlugins pdp){ + SampleImporter sampleImporter = SampleImporter.getInstance(); + ISymbianSDK sdk = NewPIWizardSettings.getInstance().romSdk; + String sdkName = ""; + if(sdk != null && (NewPIWizardSettings.getInstance().haveRomOnly || NewPIWizardSettings.getInstance().haveAppRom)){ + sdkName = NewPIWizardSettings.getInstance().romSdk.getUniqueId(); + } + long sampleTime = -1; + + Iterator traces = TraceDataRepository.getInstance().getTraceCollectionIter(NpiInstanceRepository.getInstance().activeUid()); + while(traces.hasNext()){ + ParsedTraceData ptd = traces.next(); + GenericTrace gt = ptd.traceData; + if(gt instanceof GenericSampledTrace){ + GenericSampledTrace gst = (GenericSampledTrace)gt; + long lastSampleTime = gst.getLastSampleTime(); + if(sampleTime < lastSampleTime){ + sampleTime = lastSampleTime; + } + } + } + List plugins = pdp.getSelectedPlugins(); + int[] pluginIds = new int[plugins.size()]; + int i=0; + for(ITrace plugin : plugins){ + pluginIds[i++] = plugin.getTraceId(); + } + IPath filePath = sampleImporter.getPiFile().getFullPath(); + SessionHandler.getInstance().addTraceFile(new TraceFile(filePath, sampleImporter.getProjectName(), sdkName, filePath.toFile().length(), sampleTime, pluginIds)); + Display.getDefault().asyncExec(new Runnable() { + + public void run() { + showPIViewer(); + + } + }); } public void init(IWorkbench workbench, IStructuredSelection selection) { @@ -427,4 +492,65 @@ return false; } + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.Wizard#performCancel() + */ + @Override + public boolean performCancel() { + if(PiPlugin.isTraceProviderAvailable() && PiPlugin.getTraceProvider().isListening()){ + showInformationDialog(); + return false; + } + pageInput.handleTemporaryProfilerDataFiles(false); + return super.performCancel(); + } + + /** + * Show information dialog about to stop tracing in order to go back or + * close the wizard page + */ + public void showInformationDialog(){ + MessageDialog.openInformation(getShell(), Messages.getString("NewPIWizard.informationDialogTitle"), Messages.getString("NewPIWizard.informationDialogMessage")); //$NON-NLS-1$ //$NON-NLS-2$ + } + + /** + * Show PI view + */ + private void showPIViewer(){ + try { + IWorkbenchWindow workbenchWindow = PiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow(); + if (workbenchWindow == null) + return; + IWorkbenchPage page = workbenchWindow.getActivePage(); + // Checking if view is already open + IViewReference[] viewRefs = page.getViewReferences(); + for (int i = 0; i < viewRefs.length; i++) { + IViewReference reference = viewRefs[i]; + String id = reference.getId(); + if(PIView.ID.equalsIgnoreCase(id)){ + // Found, restoring the view + IViewPart viewPart = reference.getView(true); + page.activate(viewPart); + ((PIView)viewPart).updateView(); + return; + } + } + + // View was not found, opening it up as a new view. + IViewPart viewPart = page.showView(PIView.ID); + ((PIView)viewPart).updateView(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.Wizard#dispose() + */ + @Override + public void dispose() { + showPIViewer(); + super.dispose(); + } + }