blob: 00e23a8d7be4a87e807ef73149ef52d7912b5572 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2005 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.ClassStats;
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.IWorkbenchActionConstants;
import org.eclipse.ui.PartInitException;
/**
* View that display information about classes
*/
public class LoadedClassesView extends TableWithTotalView {
private Action displayStackAction;
public static String VIEW_ID = LoadedClassesView.class.getName();
private String[] columnHeaders = new String[] {"Class", "Order", "Memory", "Plug-in", "Timestamp", "RAM", "ROM"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
private ColumnLayoutData[] columnLayout = new ColumnLayoutData[] {new ColumnWeightData(500), new ColumnWeightData(100), new ColumnWeightData(100), new ColumnWeightData(200), new ColumnPixelData(0), new ColumnPixelData(0), new ColumnPixelData(0)};
protected String[] getColumnHeaders() {
return columnHeaders;
}
protected ColumnLayoutData[] getColumnLayout() {
return columnLayout;
}
public void createPartControl(Composite parent) {
if (!StatsManager.MONITOR_CLASSES) {
Text text = new Text(parent, 0);
text.setText("Class monitoring is not enabled."); //$NON-NLS-1$
return;
}
super.createPartControl(parent);
viewer.setSelection(StructuredSelection.EMPTY);
}
protected ITreeContentProvider getContentProvider() {
return new LoadedClassesViewContentProvider();
}
protected ITableLabelProvider getLabelProvider() {
return new LoadedClassesViewLabelProvider();
}
protected ViewerSorter getSorter(int column) {
return new LoadedClassesViewSorter(column);
}
/**
* @see org.eclipse.core.tools.TableWithTotalView#getStatusLineMessage(Object)
*/
protected String getStatusLineMessage(Object element) {
return ""; //$NON-NLS-1$
}
protected TableTreeViewer getViewer() {
return viewer;
}
protected void createActions() {
displayStackAction = new Action("Stack &Trace") { //$NON-NLS-1$
public void run() {
try {
StackTraceView view = (StackTraceView) getSite().getPage().showView(StackTraceView.VIEW_ID);
ClassStats clazz = (ClassStats) ((IStructuredSelection) getViewer().getSelection()).getFirstElement();
if (clazz == null)
return;
view.setInput(StatsManager.TRACE_FILENAME, clazz.getTraceStart(), clazz.getTraceEnd());
} catch (PartInitException e) {
e.printStackTrace();
}
}
};
displayStackAction.setToolTipText("Display the class activation stack trace"); //$NON-NLS-1$
displayStackAction.setImageDescriptor(CoreToolsPlugin.createImageDescriptor("trace.gif")); //$NON-NLS-1$
}
protected void createToolbar() {
IToolBarManager manager = getViewSite().getActionBars().getToolBarManager();
manager.add(displayStackAction);
}
public void setInput(Object input) {
viewer.setInput(input);
viewer.setSelection(StructuredSelection.EMPTY);
}
protected String[] computeTotalLine(Iterator iterator) {
String[] totals = new String[getColumnHeaders().length];
int ramTotal = 0;
int romTotal = 0;
int count = 0;
if (!iterator.hasNext()) {
Object[] elements = ((ITreeContentProvider) viewer.getContentProvider()).getElements(viewer.getInput());
iterator = Arrays.asList(elements == null ? new Object[0] : elements).iterator();
}
while (iterator.hasNext()) {
ClassStats clazz = (ClassStats) iterator.next();
VMClassloaderInfo loader = VMClassloaderInfo.getClassloader(clazz.getClassloader().getId());
VMClassInfo classInfo = loader.getClass(clazz.getClassName());
ramTotal += classInfo.getRAMSize();
romTotal += classInfo.getROMSize();
count++;
}
totals[0] = "Total: " + count; //$NON-NLS-1$
totals[2] = Integer.toString(ramTotal + romTotal);
totals[5] = Integer.toString(ramTotal);
totals[6] = Integer.toString(romTotal);
return totals;
}
public void dispose() {
if (displayStackAction != null)
displayStackAction.setImageDescriptor(null);
}
protected void createContextMenu() {
MenuManager manager = new MenuManager();
manager.setRemoveAllWhenShown(true);
manager.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager mgr) {
fillContextMenu(mgr);
}
});
Menu menu = manager.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
getSite().registerContextMenu(manager, viewer);
}
protected void fillContextMenu(IMenuManager manager) {
manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
manager.add(displayStackAction);
}
}