| /******************************************************************************* |
| * Copyright (c) 2002, 2013 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM - Initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.core.tools.runtime; |
| |
| import java.util.Arrays; |
| import java.util.Iterator; |
| //import org.eclipse.core.runtime.internal.stats.BundleStats; |
| //import org.eclipse.core.runtime.internal.stats.StatsManager; |
| import org.eclipse.core.tools.CoreToolsPlugin; |
| import org.eclipse.core.tools.TableWithTotalView; |
| import org.eclipse.jface.action.*; |
| import org.eclipse.jface.viewers.*; |
| import org.eclipse.swt.widgets.*; |
| import org.eclipse.ui.*; |
| import org.eclipse.ui.actions.ActionFactory; |
| |
| /** |
| * View used to display the activated plugins |
| */ |
| public class ActivePluginsView extends TableWithTotalView { |
| private Action refreshAction; |
| private Action displayClassesInfoAction; |
| private Action displayStackAction; |
| |
| public static String VIEW_ID = ActivePluginsView.class.getName(); |
| private static String columnHeaders[] = {"Plug-in", "Classes", "Alloc", "Used", "Startup time", "Order", "Timestamp", "Class load time", "Startup method time", "RAM Alloc", "RAM Used", "ROM Alloc", "ROM Used"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ |
| private static int columnWidths[] = {500, 150, 200, 200, 150, 100, 0, 0, 0, 0, 0, 0, 0}; |
| |
| @Override |
| protected String[] getColumnHeaders() { |
| return columnHeaders; |
| } |
| |
| @Override |
| protected ColumnLayoutData[] getColumnLayout() { |
| ColumnLayoutData[] result = new ColumnLayoutData[columnWidths.length]; |
| for (int i = 0; i < columnWidths.length; i++) { |
| int width = columnWidths[i]; |
| result[i] = width == 0 ? (ColumnLayoutData) new ColumnPixelData(width) : (ColumnLayoutData) new ColumnWeightData(width); |
| } |
| return result; |
| } |
| |
| @Override |
| protected void createToolbar() { |
| IActionBars actionBars = getViewSite().getActionBars(); |
| IToolBarManager manager = actionBars.getToolBarManager(); |
| manager.add(refreshAction); |
| manager.add(displayClassesInfoAction); |
| manager.add(displayStackAction); |
| } |
| |
| @Override |
| protected void createContextMenu() { |
| // Create menu manager. |
| MenuManager manager = new MenuManager(); |
| manager.setRemoveAllWhenShown(true); |
| manager.addMenuListener(new IMenuListener() { |
| @Override |
| public void menuAboutToShow(IMenuManager mgr) { |
| fillContextMenu(mgr); |
| } |
| }); |
| |
| // Create menu. |
| Menu menu = manager.createContextMenu(viewer.getControl()); |
| viewer.getControl().setMenu(menu); |
| |
| // Register menu for extension. |
| getSite().registerContextMenu(manager, viewer); |
| } |
| |
| protected void fillContextMenu(IMenuManager manager) { |
| manager.add(refreshAction); |
| manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); |
| manager.add(new Separator()); |
| manager.add(displayClassesInfoAction); |
| manager.add(displayStackAction); |
| } |
| |
| @Override |
| protected String[] computeTotalLine(Iterator iterator) { |
| int sumOfClasses = 0; |
| int sumOfMemoryUsed = 0; |
| int sumOfMemoryAlloc = 0; |
| long sumOfStartupTime = 0; |
| // long sumOfClassloadtime = 0; |
| int sumOfRAMAlloc = 0; |
| int sumOfRAMUsed = 0; |
| long sumOfStartupMethodTime = 0; |
| int sumOfROMAlloc = 0; |
| int sumOfROMUsed = 0; |
| int count = 0; |
| if (!iterator.hasNext()) { |
| Object[] elements = ((ITreeContentProvider) viewer.getContentProvider()).getElements(viewer.getInput()); |
| iterator = Arrays.asList(elements).iterator(); |
| } |
| for (; iterator.hasNext();) { |
| // BundleStats element = (BundleStats) iterator.next(); |
| // if (element != null) { |
| // VMClassloaderInfo vmInfo = VMClassloaderInfo.getClassloader(element.getSymbolicName()); |
| // sumOfClasses += element.getClassLoadCount(); |
| // sumOfMemoryUsed += (vmInfo.getUsedRAM() + vmInfo.getUsedROM()); |
| // sumOfMemoryAlloc += (vmInfo.getAllocRAM() + vmInfo.getAllocROM()); |
| // sumOfStartupTime = sumOfStartupTime + element.getStartupTime(); |
| // sumOfClassloadtime = sumOfClassloadtime + element.getClassLoadTime(); |
| // sumOfStartupMethodTime = sumOfStartupMethodTime + element.getStartupMethodTime(); |
| // sumOfRAMAlloc += vmInfo.getAllocRAM(); |
| // sumOfRAMUsed += vmInfo.getUsedRAM(); |
| // sumOfROMAlloc += vmInfo.getAllocROM(); |
| // sumOfROMUsed += vmInfo.getUsedROM(); |
| // count++; |
| // } |
| } |
| String[] totalLine = new String[getColumnHeaders().length]; |
| totalLine[0] = "Total: " + count; //$NON-NLS-1$ |
| totalLine[1] = "" + sumOfClasses; //$NON-NLS-1$ |
| totalLine[2] = "" + sumOfMemoryAlloc; //$NON-NLS-1$ |
| totalLine[3] = "" + sumOfMemoryUsed; //$NON-NLS-1$ |
| totalLine[4] = "" + sumOfStartupTime; //$NON-NLS-1$ |
| totalLine[8] = "" + sumOfStartupMethodTime; //$NON-NLS-1$ |
| totalLine[9] = "" + sumOfRAMAlloc; //$NON-NLS-1$ |
| totalLine[10] = "" + sumOfRAMUsed; //$NON-NLS-1$ |
| totalLine[11] = "" + sumOfROMAlloc; //$NON-NLS-1$ |
| totalLine[12] = "" + sumOfROMUsed; //$NON-NLS-1$ |
| return totalLine; |
| } |
| |
| @Override |
| public void createPartControl(Composite parent) { |
| // if (!StatsManager.MONITOR_ACTIVATION) { |
| Text text = new Text(parent, 0); |
| text.setText("Plug-in monitoring is not enabled"); //$NON-NLS-1$ |
| return; |
| // } |
| // super.createPartControl(parent); |
| // viewer.setInput(BundleStats.class); |
| // getSite().setSelectionProvider(viewer); |
| // viewer.setSelection(StructuredSelection.EMPTY); |
| } |
| |
| @Override |
| protected void createActions() { |
| refreshAction = new Action("Refresh") { //$NON-NLS-1$ |
| @Override |
| public void run() { |
| VMClassloaderInfo.refreshInfos(); |
| getViewer().refresh(); |
| } |
| }; |
| refreshAction.setImageDescriptor(CoreToolsPlugin.createImageDescriptor("refresh.gif")); //$NON-NLS-1$ |
| refreshAction.setToolTipText("Refresh the data"); //$NON-NLS-1$ |
| IActionBars actionBars = getViewSite().getActionBars(); |
| actionBars.setGlobalActionHandler(ActionFactory.REFRESH.getId(), refreshAction); |
| |
| displayClassesInfoAction = new Action("Classes") { //$NON-NLS-1$ |
| @Override |
| public void run() { |
| try { |
| LoadedClassesView view = (LoadedClassesView) getSite().getPage().showView(LoadedClassesView.VIEW_ID); |
| IStructuredSelection selection = ((IStructuredSelection) getViewer().getSelection()); |
| if (selection == null) |
| return; |
| |
| view.setInput(selection.toArray()); |
| |
| } catch (PartInitException e) { |
| e.printStackTrace(); |
| } |
| } |
| }; |
| displayClassesInfoAction.setToolTipText("Display classes loaded by the selected plug-in"); //$NON-NLS-1$ |
| displayClassesInfoAction.setImageDescriptor(CoreToolsPlugin.createImageDescriptor("classes.gif")); //$NON-NLS-1$ |
| |
| displayStackAction = new Action("Stack &Trace") { //$NON-NLS-1$ |
| @Override |
| public void run() { |
| // try { |
| // StackTraceView view = (StackTraceView) getSite().getPage().showView(StackTraceView.VIEW_ID); |
| // BundleStats info = (BundleStats) ((IStructuredSelection) getViewer().getSelection()).getFirstElement(); |
| // if (info == null) |
| // return; |
| // view.setInput(StatsManager.TRACE_FILENAME, info.getTraceStart(), info.getTraceEnd()); |
| // } catch (PartInitException e) { |
| // e.printStackTrace(); |
| // } |
| } |
| }; |
| displayStackAction.setToolTipText("Display the plug-in activation stack trace"); //$NON-NLS-1$ |
| displayStackAction.setImageDescriptor(CoreToolsPlugin.createImageDescriptor("trace.gif")); //$NON-NLS-1$ |
| } |
| |
| @Override |
| protected ITreeContentProvider getContentProvider() { |
| return new ActivePluginsViewContentProvider(); |
| } |
| |
| @Override |
| protected ITableLabelProvider getLabelProvider() { |
| return new ActivePluginsViewLabelProvider(); |
| } |
| |
| @Override |
| protected ViewerSorter getSorter(int column) { |
| return new ActivePluginsViewSorter(column); |
| } |
| |
| /** |
| * @see org.eclipse.core.tools.TableWithTotalView#getStatusLineMessage(Object) |
| */ |
| @Override |
| protected String getStatusLineMessage(Object element) { |
| return ""; //$NON-NLS-1$ |
| } |
| |
| protected TableViewer getViewer() { |
| return viewer; |
| } |
| |
| @Override |
| public void dispose() { |
| // if there is no viewer then we were not monitoring so there |
| // is nothing to dispose. |
| if (viewer == null) |
| return; |
| refreshAction.setImageDescriptor(null); |
| displayClassesInfoAction.setImageDescriptor(null); |
| displayStackAction.setImageDescriptor(null); |
| } |
| |
| } |