Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 59900 Details for
Bug 167609
Enhance Thread Statistics View
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch 200702280000 - accumulated changes
org.eclipse.tptp.trace.jvmti.client_200702280000-patch (text/plain), 264.97 KB, created by
Ruslan Scherbakov
on 2007-02-27 13:12:40 EST
(
hide
)
Description:
patch 200702280000 - accumulated changes
Filename:
MIME Type:
Creator:
Ruslan Scherbakov
Created:
2007-02-27 13:12:40 EST
Size:
264.97 KB
patch
obsolete
>Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockedTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockedTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockedTimeColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockedTimeColumnLabel.java 26 Oct 2006 19:28:22 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,24 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadDeadlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadDeadlockedTimeColumnLabel extends ThreadDetailsColumnLabel { >- >- protected String getContextAttribute() { >- return IContextAttributes.THREAD_DEADLOCKED_TIME; >- } >- >- protected Number getValue(ThreadDetails thread) { >- return new Double(thread.getDeadlockedTime()); >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockCountColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockCountColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockCountColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockCountColumnLabel.java 26 Oct 2006 19:28:22 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,31 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadBlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadBlockCountColumnLabel extends ThreadDetailsColumnLabel { >- >- public String getDisplayString(Object element, ColumnDisplayInfo info) { >- Number value = getValue(element, info); >- int number = value != null ? value.intValue() : 0; >- return number > 0 ? Integer.toString(number) : ""; >- } >- >- protected String getContextAttribute() { >- return IContextAttributes.THREAD_BLOCK_COUNT; >- } >- >- protected Number getValue(ThreadDetails thread) { >- return new Double(thread.getBlockCount()); >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticView.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticView.java,v >retrieving revision 1.4 >diff -u -r1.4 ThreadStatisticView.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticView.java 14 Feb 2007 17:03:09 -0000 1.4 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticView.java 27 Feb 2007 18:03:28 -0000 >@@ -26,7 +26,6 @@ > import org.eclipse.hyades.trace.views.internal.TraceUIPlugin; > import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; > import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ThreadNameColumnLabel; > import org.eclipse.hyades.trace.views.util.internal.ColumnData; > import org.eclipse.hyades.trace.views.util.internal.StatisticTableColumnInfo; > import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >@@ -57,6 +56,16 @@ > import org.eclipse.swt.widgets.TableColumn; > import org.eclipse.swt.widgets.Tree; > import org.eclipse.swt.widgets.TreeItem; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadBlockCountColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadBlockedTimeColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadClassNameColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadDeadlockCountColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadDeadlockedTimeColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadNameLabelAdapter; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadRunningTimeColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadStateColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadWaitingTimeColumnLabel; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TraceColorScheme; > import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; > > /** >@@ -64,8 +73,8 @@ > */ > public class ThreadStatisticView extends StatisticView { > >- static final int COL_CLASS_NAME = 0; >- static final int COL_THREAD_NAME = 1; >+ static final int COL_THREAD_NAME = 0; >+ static final int COL_CLASS_NAME = 1; > static final int COL_STATE = 2; > static final int COL_RUN_TIME = 3; > static final int COL_WAIT_TIME = 4; >@@ -77,23 +86,27 @@ > public static String PREFERENCE_KEY_PREFIX = "org.eclipse.hyades.trace.views.statistic."; > private boolean _isEmpty; > protected ContextInfoContainer _contextInfo; >- > protected ColumnLabelAdapter[] _columns; >+ protected TraceColorScheme _colors = new TraceColorScheme(); > > public ThreadStatisticView(Composite parent, TraceViewerPage page) { > super(parent, page); >- > createColumnsLabelProviders(); > } > >+ public void dispose() { >+ _colors.dispose(); >+ super.dispose(); >+ } >+ > protected String getContextHelpId() { > return TraceUIPlugin.getPluginId() + ".stvw0001"; > } > > public void createColumnsLabelProviders() { > _columns = new ColumnLabelAdapter[] { >+ new ThreadNameLabelAdapter(), > new ThreadClassNameColumnLabel(), >- new ThreadNameColumnLabel(), > //new ThreadStartTimeColumnLabel(), > //new ThreadStopTimeColumnLabel(), > new ThreadStateColumnLabel(), >@@ -266,8 +279,9 @@ > } > > public String getDefaultColumnsTemplate() { >- return IContextAttributes.THREAD_CLASS_NAME + ":" + COL_CLASS_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:150," >+ return "" > + IContextAttributes.THREAD_NAME + ":" + COL_THREAD_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:120," >+ + IContextAttributes.THREAD_CLASS_NAME + ":" + COL_CLASS_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:150," > //+ IContextAttributes.THREAD_START_TIME + ":2:" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80," > //+ IContextAttributes.THREAD_STOP_TIME + ":3:" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80," > + IContextAttributes.THREAD_STATE + ":" + COL_STATE + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80," >@@ -316,7 +330,7 @@ > } > > public String getColumnsPreferencesKey() { >- return PREFERENCE_KEY_PREFIX + "ThreadStats2"; >+ return PREFERENCE_KEY_PREFIX + "ThreadStats4"; > } > > protected String getViewTypeStr() { >@@ -399,12 +413,13 @@ > Color foreground = gc.getForeground(); > Color background = gc.getBackground(); > >- int c1 = ThreadDetails.getStateColor(state); >+ //int c1 = ThreadDetails.getStateColor(state); > int c2 = selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE; >- Color sysBack = display.getSystemColor(c1); >+ //Color sysBack = display.getSystemColor(c1); >+ Color sysBack = _colors.getColor(state); > Color sysFore = display.getSystemColor(c2); > Color fore = Utils.mixColors(display, sysBack, sysFore, 1, 4); >- Color back = Utils.mixColors(display, sysBack, sysFore, 1, 1); >+ Color back = Utils.mixColors(display, sysBack, sysFore, 4, 1); > > gc.setAdvanced(true); > if (gc.getAdvanced()) { >@@ -570,18 +585,13 @@ > > public void redrawTable() { > getTree().setRedraw(false); >- ArrayList list = ColumnData.createColumnData(getColumnsPreferencesKey() >- , getDefaultColumnsTemplate()); >- resetColumns(list); >- _currentColumns = list; >+ _currentColumns = ColumnData.createColumnData(getColumnsPreferencesKey(), getDefaultColumnsTemplate()); >+ _currentColumns = TIColumnData.convertColumnData(_currentColumns); >+ resetColumns(_currentColumns); > getTree().setRedraw(true); > refresh(); > } > >- public void dispose() { >- super.dispose(); >- } >- > public void widgetDefaultSelected(SelectionEvent arg0) { > new OpenCallStackViewAction().openView(false); > } >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStateColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStateColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStateColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStateColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,50 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadStateColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.swt.graphics.Image; >- >-public class ThreadStateColumnLabel extends ColumnLabelAdapter { >- >- public String getDisplayString(Object element, ColumnDisplayInfo info) { >- if (element instanceof ThreadDetails) { >- switch (((ThreadDetails)element).getState()) { >- case ThreadDetails.RUNNING: >- return UIMessages._261; >- case ThreadDetails.SLEEPING: >- return UIMessages._262; >- case ThreadDetails.WAITING: >- return UIMessages._263; >- case ThreadDetails.BLOCKED: >- return UIMessages._264; >- case ThreadDetails.DEADLOCK: >- return UIMessages._265; >- case ThreadDetails.STOPPED: >- return UIMessages._266; >- } >- } >- return ""; >- } >- >- public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >- return null; >- } >- >- protected Number getDelta(Object element, ColumnDisplayInfo info) { >- return null; >- } >- >- public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) { >- return null; >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockCountColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockCountColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockCountColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockCountColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,31 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadDeadlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadDeadlockCountColumnLabel extends ThreadDetailsColumnLabel { >- >- public String getDisplayString(Object element, ColumnDisplayInfo info) { >- Number value = getValue(element, info); >- int number = value != null ? value.intValue() : 0; >- return number > 0 ? Integer.toString(number) : ""; >- } >- >- protected String getContextAttribute() { >- return IContextAttributes.THREAD_DEADLOCK_COUNT; >- } >- >- protected Number getValue(ThreadDetails thread) { >- return new Double(thread.getDeadlockCount()); >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockedTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockedTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockedTimeColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockedTimeColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,24 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadBlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadBlockedTimeColumnLabel extends ThreadDetailsColumnLabel { >- >- protected String getContextAttribute() { >- return IContextAttributes.THREAD_BLOCKED_TIME; >- } >- >- protected Number getValue(ThreadDetails thread) { >- return new Double(thread.getBlockedTime()); >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadClassNameColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadClassNameColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadClassNameColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadClassNameColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,40 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadClassNameColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.models.trace.TRCThread; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >-import org.eclipse.hyades.ui.provisional.context.ContextManager; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >-import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >-import org.eclipse.swt.graphics.Image; >- >-public class ThreadClassNameColumnLabel extends ColumnLabelAdapter { >- >- public String getDisplayString(Object element, ColumnDisplayInfo info) { >- TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element); >- IContextLabelFormatProvider formatter = ContextManager.getContextLabelFormatProvider(getContext(thread), IContextAttributes.THREAD_CLASS_NAME, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >- >- return formatter.getDisplayStringFromElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >- } >- >- public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >- TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element); >- IContextLabelFormatProvider formatter = ContextManager.getContextLabelFormatProvider(getContext(thread), IContextAttributes.THREAD_CLASS_NAME, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >- >- return createImage(formatter.getDisplayImageByElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >- } >- >- public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) { >- return null; >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticViewer.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticViewer.java,v >retrieving revision 1.3 >diff -u -r1.3 ThreadStatisticViewer.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticViewer.java 13 Feb 2007 20:44:44 -0000 1.3 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticViewer.java 27 Feb 2007 18:03:28 -0000 >@@ -60,7 +60,7 @@ > */ > public String getDefaultPageMessage() { > >- return UIMessages._269; >+ return UIMessages.NO_THREAD_STATS; > } > > public boolean contextChanged() { >@@ -95,8 +95,7 @@ > } > > public void updateContext() { >- ContextUpdaterHelper >- .setCurrentFocusContextLanguage(getSelectedContext()); >+ ContextUpdaterHelper.setCurrentFocusContextLanguage(getSelectedContext()); > _contextChanged = false; > } > >@@ -175,11 +174,17 @@ > _sortByColumn.setEnabled(true); > > _openCallStackView = new OpenCallStackViewAction(); >+ TracePluginImages.setImageDescriptors(_openCallStackView, >+ TracePluginImages.T_VIEW, "call_stack_view.gif"); >+ _openCallStackView.setText("Show Call Stack"); >+ _openCallStackView.setDescription("Open Call Stack view"); >+ _openCallStackView.setToolTipText("Open Call Stack view"); >+ _openCallStackView.setEnabled(true); > > IMenuManager menum = getViewSite().getActionBars().getMenuManager(); > menum.add(_chooseColumns); > menum.add(_sortByColumn); >- menum.add(_openCallStackView); >+ //menum.add(_openCallStackView); > > MenuManager submenu = new MenuManager(TraceUIMessages._222); > submenu.addMenuListener(getContextSelectionMenuListener()); >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadRunningTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadRunningTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadRunningTimeColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadRunningTimeColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,24 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadRunningTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadRunningTimeColumnLabel extends ThreadDetailsColumnLabel { >- >- protected String getContextAttribute() { >- return IContextAttributes.THREAD_RUNNING_TIME; >- } >- >- protected Number getValue(ThreadDetails thread) { >- return new Double(thread.getRunningTime()); >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/CallStackViewer.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/CallStackViewer.java,v >retrieving revision 1.1 >diff -u -r1.1 CallStackViewer.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/CallStackViewer.java 13 Feb 2007 20:44:44 -0000 1.1 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/CallStackViewer.java 27 Feb 2007 18:03:27 -0000 >@@ -17,16 +17,9 @@ > import java.util.ArrayList; > > import org.eclipse.emf.common.util.EList; >-import org.eclipse.hyades.models.trace.TRCMethod; > import org.eclipse.hyades.models.trace.TRCMethodInvocation; > import org.eclipse.hyades.models.trace.TRCThread; >-import org.eclipse.hyades.models.trace.TRCThreadDeadEvent; >-import org.eclipse.hyades.models.trace.TRCThreadDeadLockEvent; > import org.eclipse.hyades.models.trace.TRCThreadEvent; >-import org.eclipse.hyades.models.trace.TRCThreadRunningEvent; >-import org.eclipse.hyades.models.trace.TRCThreadSleepingEvent; >-import org.eclipse.hyades.models.trace.TRCThreadWaitingForLockEvent; >-import org.eclipse.hyades.models.trace.TRCThreadWaitingForObjectEvent; > import org.eclipse.hyades.trace.ui.IViewSelectionChangedListener; > import org.eclipse.hyades.trace.ui.UIPlugin; > import org.eclipse.hyades.trace.ui.ViewSelectionChangedEvent; >@@ -42,8 +35,8 @@ > import org.eclipse.swt.SWT; > import org.eclipse.swt.graphics.Image; > import org.eclipse.swt.widgets.Composite; >-import org.eclipse.ui.ISharedImages; >-import org.eclipse.ui.PlatformUI; >+import org.eclipse.tptp.trace.jvmti.internal.client.MethodDetails; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; > import org.eclipse.ui.part.ViewPart; > > public class CallStackViewer extends ViewPart implements >@@ -56,23 +49,28 @@ > } > > public void createPartControl(Composite parent) { >- _calStackCtrl = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL >- | SWT.FULL_SELECTION | SWT.SINGLE); >+ _calStackCtrl = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.SINGLE); > _calStackCtrl.setContentProvider(new CallStackContentProvider()); > _calStackCtrl.setLabelProvider(new CallStackLabelProvider()); > _calStackCtrl.setInput(this); > _calStackCtrl.addDoubleClickListener(new IDoubleClickListener() { > public void doubleClick(DoubleClickEvent event) { >- OpenSource.openSource(getFirstSelectedElement()); >+ TreeSelection trsel = (TreeSelection) _calStackCtrl.getSelection(); >+ if (null == trsel) >+ return; >+ Object element = trsel.getFirstElement(); >+ if (null == element) >+ return; >+ if (element instanceof TRCMethodInvocation || >+ element instanceof TRCMethodInvocation) { >+ OpenSource.openSource(element); >+ } else if (_calStackCtrl.isExpandable(element)) { >+ _calStackCtrl.expandToLevel(element, 1); >+ } > } > }); > UIPlugin.getDefault().addViewSelectionChangedListener(this); >- UIPlugin.getDefault().getViewSelectionChangedEvent(); >- } >- >- public void setFocus() { >- if (null != _calStackCtrl) >- _calStackCtrl.getControl().setFocus(); >+ handleViewSelectionChangedEvent(UIPlugin.getDefault().getViewSelectionChangedEvent()); > } > > public void dispose() { >@@ -80,12 +78,9 @@ > super.dispose(); > } > >- public Object getFirstSelectedElement() { >- Object obj = null; >+ public void setFocus() { > if (null != _calStackCtrl) >- obj = ((TreeSelection) _calStackCtrl.getSelection()) >- .getFirstElement(); >- return obj; >+ _calStackCtrl.getControl().setFocus(); > } > > /** update view content */ >@@ -94,75 +89,7 @@ > return; > _selection = selection; > _calStackCtrl.refresh(); >- } >- >- public void handleObjectChanged(Object sel) { >- update(sel); >- } >- >- /** >- * Compose String name for TRCMethodInvocation >- * >- * @param method >- * @return >- */ >- static String methodName(TRCMethodInvocation method) { >- TRCMethod m = method.getMethod(); >- String name = ""; >- name += m.getDefiningClass().getName(); >- name += "."; >- name += m.getName(); >- name += m.getSignature(); >- name += " [" + m.getCalls() + "]"; >- return name; >- } >- >- /** >- * Compose String name for TRCThread >- * >- * @param thread >- * @return >- */ >- static String threadName(TRCThread thread) { >- String name = thread.getName(); >- name += " [" + thread.getGroupName() + "]"; >- return name; >- } >- >- static String getEventName(TRCThreadEvent event) { >- if (event instanceof TRCThreadRunningEvent) { >- return "RUNNING"; >- } else if (event instanceof TRCThreadSleepingEvent) { >- return "SLEEPING"; >- } else if (event instanceof TRCThreadDeadLockEvent) { >- return "DEADLOCK"; >- } else if (event instanceof TRCThreadWaitingForLockEvent) { >- return "BLOCKED"; >- } else if (event instanceof TRCThreadWaitingForObjectEvent) { >- return "WAITING"; >- } else if (event instanceof TRCThreadDeadEvent) { >- return "STOPPED"; >- } >- return "UNKNOWN"; >- } >- >- /** >- * Compose String name for TRCThreadEvent >- * >- * @param event >- * @return >- */ >- static String eventName(TRCThreadEvent event) { >- String name = event.getThread().getName(); >- name += " [" + event.getThread().getGroupName() + "] State: " + getEventName(event); >- if (event instanceof TRCThreadWaitingForObjectEvent) { >- name += " Timeout=" + ((TRCThreadWaitingForObjectEvent)event).getTimeout(); >- } else if (event instanceof TRCThreadWaitingForLockEvent) { >- TRCThread thread = ((TRCThreadWaitingForLockEvent)event).getLockingThread(); >- if (null != thread) >- name += " by Thread=" + thread.getName(); >- } >- return name; >+ _calStackCtrl.expandAll(); > } > > /** >@@ -173,37 +100,21 @@ > */ > public String getItemText(Object obj) { > if (obj instanceof TRCMethodInvocation) { >- return methodName((TRCMethodInvocation) obj); >+ return Utils.composeMethodName((TRCMethodInvocation) obj); > } > if (obj instanceof TRCThread) { >- return threadName((TRCThread) obj); >+ return Utils.composeThreadName((TRCThread) obj, true); > } > if (obj instanceof TRCThreadEvent) { >- return eventName((TRCThreadEvent) obj); >+ return Utils.composeEventName((TRCThreadEvent) obj); > } >- return obj.toString(); >- } >- >- /** >- * Icon image for object. >- * >- * @param obj >- * @return >- */ >- public Image getItemImage(Object obj) { >- Image img = null; >- String imageKey = ISharedImages.IMG_OBJ_ELEMENT; >- if (obj instanceof TRCMethodInvocation) { >- imageKey = ISharedImages.IMG_OBJ_FILE; >+ if (obj instanceof MethodDetails) { >+ return Utils.composeMethodName((MethodDetails) obj); > } >- if (null == img) { >- img = PlatformUI.getWorkbench().getSharedImages() >- .getImage(imageKey); >- } >- return img; >+ return obj.toString(); > } > >- static final Object[] empty = new Object[0]; >+ static final Object[] _empty = new Object[0]; > > class CallStackContentProvider implements ITreeContentProvider { > >@@ -214,28 +125,33 @@ > } > > public Object[] getElements(Object parent) { >- Object[] ret = empty; >+ Object[] ret = _empty; > if (null != _selection) > ret = new Object[] { _selection }; > return ret; > } > > public Object[] getChildren(Object parentElement) { >- Object[] ret = empty; >+ Object[] ret = _empty; > if (parentElement instanceof TRCThread) { > TRCThread thread = (TRCThread) parentElement; >- TRCMethodInvocation mi; >- ArrayList arrlist = new ArrayList(); >- EList list = thread.getInitialInvocations(); >- while (list != null && !list.isEmpty()) { >- mi = (TRCMethodInvocation) list.get(list.size() - 1); >- arrlist.add(mi); >- list = mi.getInvokes(); >+ EList list = thread.getThreadEvents(); >+ if (null != list && list.size() > 0) { >+ TRCThreadEvent event = (TRCThreadEvent) list.get(list.size() - 1); >+ ret = Utils.getCallStack(event); >+ } else { >+ TRCMethodInvocation mi; >+ ArrayList arrlist = new ArrayList(); >+ list = thread.getInitialInvocations(); >+ while (list != null && !list.isEmpty()) { >+ mi = (TRCMethodInvocation) list.get(list.size() - 1); >+ arrlist.add(mi); >+ list = mi.getInvokes(); >+ } >+ ret = arrlist.toArray(); > } >- ret = arrlist.toArray(); > } else if (parentElement instanceof TRCThreadEvent) { >- // TODO: CS from event >- ret = new String[] { "Placeholder for EVENT's call stack...", }; >+ ret = Utils.getCallStack((TRCThreadEvent) parentElement); > } > return ret; > } >@@ -249,7 +165,9 @@ > if (element instanceof TRCThread) { > ret = true; > } else if (element instanceof TRCThreadEvent) { >- ret = true; >+ TRCThreadEvent event = (TRCThreadEvent) element; >+ EList list = event.getAnnotations(); >+ ret = list != null && list.size() > 0; > } > return ret; > } >@@ -261,12 +179,16 @@ > } > > public Image getImage(Object obj) { >- return getItemImage(obj); >+ return Utils.getItemImage(obj); > } > } > > public void handleViewSelectionChangedEvent(ViewSelectionChangedEvent event) { > Object source = event.getSource(); >+ updateView(source); >+ } >+ >+ public void updateView(Object source) { > if (source instanceof ThreadStatisticView) { > ThreadStatisticView view = (ThreadStatisticView) source; > TRCThread thread = view.getSelectedThread(); >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesPage.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesPage.java,v >retrieving revision 1.2 >diff -u -r1.2 ThreadStatesPage.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesPage.java 14 Feb 2007 17:03:09 -0000 1.2 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesPage.java 27 Feb 2007 18:03:27 -0000 >@@ -37,32 +37,31 @@ > import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ITimeDataProvider; > import org.eclipse.tptp.trace.jvmti.internal.client.widgets.LegendCtrl; > import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ThreadStatesCtrl; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ThreadsTipHandler; > import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TimeScaleCtrl; > import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TraceColorScheme; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; > > public class ThreadStatesPage extends TraceViewerPage implements > ITimeDataProvider, SelectionListener { > > /* vars */ >- double _minTimeInterval = .000001; >- double _selectedTime = -1; >- double _beginTime = 0; >- double _endTime = 0; >- double _time0 = 0; >- double _time1 = 0; >- double _time0_ = 0; >- double _time1_ = 0; >- double _time1bak = 0; >- double _timeStep = 0.01; >- boolean _timeRangeFixed = false; >+ private double _minTimeInterval = .000001; >+ private double _selectedTime = -1; >+ private double _beginTime = 0; >+ private double _endTime = 0; >+ private double _time0 = 0; >+ private double _time1 = 0; >+ private double _time0_ = 0; >+ private double _time1_ = 0; >+ private boolean _timeRangeFixed = false; > private int _nameWidth = 96; >- private int _legendHeight = 22; >- private int _timeScaleHeight = 22; > private Composite _viewContainer; > private ThreadStatesCtrl _stateCtrl; > private LegendCtrl _legendCtrl; > private TimeScaleCtrl _timeScaleCtrl; >- static TraceColorScheme _colors = new TraceColorScheme(); >+ private ThreadsTipHandler _threadTip; >+ private TraceColorScheme _colors = new TraceColorScheme(); > > /** ctor */ > public ThreadStatesPage(EObject mofObject, TraceViewer viewer) { >@@ -86,6 +85,7 @@ > } > > public void createControl(Composite parent) { >+ _nameWidth = Utils.loadIntOption("viewoption.threads.namewidth", 96, 6, 1000); > _viewContainer = new Composite(parent, SWT.NULL); > _legendCtrl = new LegendCtrl(_viewContainer, _colors); > _timeScaleCtrl = new TimeScaleCtrl(_viewContainer, _colors); >@@ -95,18 +95,16 @@ > _stateCtrl.addSelectionListener(this); > _viewContainer.addControlListener(new ControlAdapter() { > public void controlResized(ControlEvent event) { >- Rectangle r = _viewContainer.getClientArea(); >- _legendCtrl.setBounds(r.x, r.y, r.width, _legendHeight); >- _timeScaleCtrl.setBounds(r.x, r.y + _legendHeight, r.width, >- _timeScaleHeight); >- _stateCtrl.setBounds(r.x, r.y + _legendHeight >- + _timeScaleHeight, r.width, r.height - _legendHeight >- - _timeScaleHeight); >+ resizeControls(); > } > }); >+ resizeControls(); >+ _threadTip = new ThreadsTipHandler(parent.getShell()); >+ _threadTip.activateHoverHelp(_stateCtrl); > } > > public void dispose() { >+ Utils.saveIntOption("viewoption.threads.namewidth", _nameWidth); > _stateCtrl.dispose(); > _legendCtrl.dispose(); > _viewContainer.dispose(); >@@ -114,6 +112,29 @@ > super.dispose(); > } > >+ public void resizeControls() { >+ Rectangle r = _viewContainer.getClientArea(); >+ int legendHeight = _legendCtrl.getFontHeight(); >+ if (legendHeight < 1) { >+ _legendCtrl.setBounds(r.x, r.y, 1, 1); >+ _legendCtrl.update(); >+ legendHeight = _legendCtrl.getFontHeight(); >+ if (legendHeight < 1) >+ return; >+ } >+ legendHeight += 10; >+ int timeScaleHeight = 22; >+ _legendCtrl.setBounds(r.x, r.y, r.width, legendHeight); >+ _timeScaleCtrl.setBounds(r.x, r.y + legendHeight, r.width, timeScaleHeight); >+ _stateCtrl.setBounds(r.x, r.y + legendHeight + timeScaleHeight, >+ r.width, r.height - legendHeight - timeScaleHeight); >+ int width = _stateCtrl.getClientArea().width; >+ if (_nameWidth > width - 6) >+ _nameWidth = width - 6; >+ if (_nameWidth < 6) >+ _nameWidth = 6; >+ } >+ > /** Tries to set most convinient time range for display. */ > void setTimeRange(Object threads[]) { > _endTime = 0; >@@ -147,7 +168,8 @@ > _time0_ = _beginTime - (_endTime - _beginTime) * 0.05; > if (_time0_ < 0) > _time0_ = 0; >- _time1_ = _time0_ + (_endTime - _time0_) * 1.05; >+ //_time1_ = _time0_ + (_endTime - _time0_) * 1.05; >+ _time1_ = _endTime; > _time0_ = Math.floor(_time0_); > _time1_ = Math.ceil(_time1_); > if (!_timeRangeFixed) { >@@ -200,6 +222,18 @@ > return _nameWidth; > } > >+ public void setNameSpace(int width) { >+ _nameWidth = width; >+ width = _stateCtrl.getClientArea().width; >+ if (_nameWidth > width - 6) >+ _nameWidth = width - 6; >+ if (_nameWidth < 6) >+ _nameWidth = 6; >+ _stateCtrl.adjustScrolls(); >+ _stateCtrl.redraw(); >+ _timeScaleCtrl.redraw(); >+ } >+ > public int getTimeSpace() { > int w = _stateCtrl.getClientArea().width; > return w - _nameWidth; >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/UIMessages.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/UIMessages.java,v >retrieving revision 1.4 >diff -u -r1.4 UIMessages.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/UIMessages.java 14 Feb 2007 17:03:09 -0000 1.4 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/UIMessages.java 27 Feb 2007 18:03:28 -0000 >@@ -24,15 +24,54 @@ > public static String SELECTED_TIME; > public static String TIME_SCALE; > public static String MEM_ANALYSIS_TITLE; >+ public static String NO_THREAD_STATS; > >- public static String _261; >- public static String _262; >- public static String _263; >- public static String _264; >- public static String _265; >- public static String _266; >- public static String _267; >- public static String _269; >+ // state strings >+ public static String _Not_Started; >+ public static String _Running; >+ public static String _Sleeping; >+ public static String _Waiting; >+ public static String _Blocked; >+ public static String _Deadlocked; >+ public static String _Stopped; >+ public static String _Unknown; >+ >+ public static String _not_started; >+ public static String _running; >+ public static String _sleeping; >+ public static String _waiting; >+ public static String _blocked; >+ public static String _deadlocked; >+ public static String _stopped; >+ public static String _unknown; >+ >+ public static String _LINE_NUMBER; >+ public static String _AVG_AGE; >+ public static String _GENERATIONS; >+ public static String _RESET_TIMESCALE; >+ public static String _NEXT_THREAD; >+ public static String _PREV_THREAD; >+ public static String _NEXT_EVENT; >+ public static String _PREV_EVENT; >+ >+ public static String _RESET_TIMESCALE_TTIP; >+ public static String _NEXT_THREAD_TTIP; >+ public static String _PREV_THREAD_TTIP; >+ public static String _NEXT_EVENT_TTIP; >+ public static String _PREV_EVENT_TTIP; >+ >+ public static String _THREAD_NAME; >+ public static String _THREAD_CLASS_NAME; >+ public static String _THREAD_START_TIME; >+ public static String _THREAD_STOP_TIME; >+ public static String _THREAD_STATE; >+ public static String _THREAD_RUNNING_TIME; >+ public static String _THREAD_SLEEPING_TIME; >+ public static String _THREAD_WAITING_TIME; >+ public static String _THREAD_BLOCKED_TIME; >+ public static String _THREAD_DEADLOCKED_TIME; >+ public static String _THREAD_BLOCK_COUNT; >+ public static String _THREAD_DEADLOCK_COUNT; > > private UIMessages() { > // Do not instantiate >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadWaitingTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadWaitingTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadWaitingTimeColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadWaitingTimeColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,24 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadWaitingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadWaitingTimeColumnLabel extends ThreadDetailsColumnLabel { >- >- protected String getContextAttribute() { >- return IContextAttributes.THREAD_WAITING_TIME; >- } >- >- protected Number getValue(ThreadDetails thread) { >- return new Double(thread.getWaitingTime()); >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadSleepingTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadSleepingTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadSleepingTimeColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadSleepingTimeColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,24 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadSleepingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadSleepingTimeColumnLabel extends ThreadDetailsColumnLabel { >- >- protected String getContextAttribute() { >- return IContextAttributes.THREAD_SLEEPING_TIME; >- } >- >- protected Number getValue(ThreadDetails thread) { >- return new Double(thread.getSleepingTime()); >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStartTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStartTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStartTimeColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStartTimeColumnLabel.java 26 Oct 2006 19:28:22 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,42 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadStartTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.emf.ecore.EObject; >-import org.eclipse.hyades.models.trace.TRCThread; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadStartTimeColumnLabel extends AbstractNumberColumnLabel { >- >- protected Number getValue(Object element, ColumnDisplayInfo info) { >- EObject eObj = ContextUpdaterHelper.getEObject(element); >- >- if (eObj instanceof TRCThread) >- return new Double(((TRCThread) eObj).getStartTime()); >- else >- return null; >- } >- >- protected Number getDelta(Object element, ColumnDisplayInfo info) { >- return null; >- } >- >- protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >- EObject eObj = ContextUpdaterHelper.getEObject(element); >- >- if (eObj instanceof TRCThread) >- return IContextAttributes.THREAD_START_TIME; >- else >- return null; >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDetailsColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDetailsColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDetailsColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDetailsColumnLabel.java 26 Oct 2006 19:28:22 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,53 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadDetailsColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.hyades.trace.ui.internal.util.TString; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >-import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >-import org.eclipse.swt.graphics.Image; >- >-public abstract class ThreadDetailsColumnLabel extends AbstractNumberColumnLabel { >- >- protected abstract Number getValue(ThreadDetails thread); >- >- protected abstract String getContextAttribute(); >- >- protected Number getValue(Object element, ColumnDisplayInfo info) { >- if (element instanceof ThreadDetails) { >- return getValue((ThreadDetails) element); >- } >- return null; >- } >- >- public String getDisplayString(Object element, ColumnDisplayInfo info) { >- Number value = getValue(element, info); >- if (value == null || value.doubleValue() == 0) { >- return ""; >- } >- return TString.formatTimeValue(value.doubleValue()); >- } >- >- public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >- return null; >- } >- >- protected Number getDelta(Object element, ColumnDisplayInfo info) { >- return null; >- } >- >- protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >- if (element instanceof ThreadDetails) >- return getContextAttribute(); >- else >- return null; >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesViewer.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesViewer.java,v >retrieving revision 1.2 >diff -u -r1.2 ThreadStatesViewer.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesViewer.java 14 Feb 2007 17:03:09 -0000 1.2 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesViewer.java 27 Feb 2007 18:03:28 -0000 >@@ -43,7 +43,10 @@ > } > > public void makeActions() { >+ if (isInitializedMenu()) >+ return; //create the toolbar only once > super.makeActions(); >+ initializedMenu(true); > createActions(); > IActionBars bars = getViewSite().getActionBars(); > fillLocalPullDown(bars.getMenuManager()); >@@ -55,8 +58,21 @@ > Action _selectPrevEvent; > Action _selectNextThread; > Action _selectPrevThread; >+ Action _resetTimescale; > > private void createActions() { >+ _resetTimescale = new Action() { >+ public void run() { >+ if (getCurrentPage() instanceof ThreadStatesPage) { >+ ((ThreadStatesPage) getCurrentPage()).resetStartFinishTime(); >+ } >+ } >+ }; >+ _resetTimescale.setText(UIMessages._RESET_TIMESCALE); >+ _resetTimescale.setToolTipText(UIMessages._RESET_TIMESCALE_TTIP); >+ _resetTimescale.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.hyades.trace.views" >+ , "icons/full/ctool16/home_nav.gif")); >+ > _selectNextEvent = new Action() { > public void run() { > if (getCurrentPage() instanceof ThreadStatesPage) { >@@ -64,9 +80,8 @@ > } > } > }; >- _selectNextEvent.setText("Next Event"); >- _selectNextEvent.setToolTipText("Select Next Event"); >- //_selectNextEvent.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD)); >+ _selectNextEvent.setText(UIMessages._NEXT_EVENT); >+ _selectNextEvent.setToolTipText(UIMessages._NEXT_EVENT_TTIP); > _selectNextEvent.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID > , "icons/full/obj16/next_event.gif")); > >@@ -77,9 +92,8 @@ > } > } > }; >- _selectPrevEvent.setText("Prev Event"); >- _selectPrevEvent.setToolTipText("Select Previous Event"); >- //_selectPrevEvent.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_BACK)); >+ _selectPrevEvent.setText(UIMessages._PREV_EVENT); >+ _selectPrevEvent.setToolTipText(UIMessages._PREV_EVENT_TTIP); > _selectPrevEvent.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID > , "icons/full/obj16/prev_event.gif")); > >@@ -90,8 +104,8 @@ > } > } > }; >- _selectNextThread.setText("Next Thread"); >- _selectNextThread.setToolTipText("Select Next Thread"); >+ _selectNextThread.setText(UIMessages._NEXT_THREAD); >+ _selectNextThread.setToolTipText(UIMessages._NEXT_THREAD_TTIP); > _selectNextThread.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID > , "icons/full/obj16/next_thread.gif")); > >@@ -102,13 +116,15 @@ > } > } > }; >- _selectPrevThread.setText("Prev Thread"); >- _selectPrevThread.setToolTipText("Select Previous Thread"); >+ _selectPrevThread.setText(UIMessages._PREV_THREAD); >+ _selectPrevThread.setToolTipText(UIMessages._PREV_THREAD_TTIP); > _selectPrevThread.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID > , "icons/full/obj16/prev_thread.gif")); > } > > private void fillLocalPullDown(IMenuManager manager) { >+ manager.removeAll(); >+ manager.add(_resetTimescale); > manager.add(_selectPrevEvent); > manager.add(_selectNextEvent); > manager.add(_selectPrevThread); >@@ -116,6 +132,8 @@ > } > > private void fillLocalToolBar(IToolBarManager manager) { >+ manager.removeAll(); >+ manager.add(_resetTimescale); > manager.add(_selectPrevEvent); > manager.add(_selectNextEvent); > manager.add(_selectPrevThread); >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/messages.properties >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/messages.properties,v >retrieving revision 1.4 >diff -u -r1.4 messages.properties >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/messages.properties 14 Feb 2007 17:03:09 -0000 1.4 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/messages.properties 27 Feb 2007 18:03:30 -0000 >@@ -14,17 +14,55 @@ > # NLS_ENCODING=UTF-8 > > THREAD_STATISTIC_TITLE = Thread Statistics >-THREAD_STATES_TITLE = Thread States >+THREAD_STATES_TITLE = Threads Visualizer > LEGEND_LABEL = Legend > CURRENT_TIME = Current Time > SELECTED_TIME = Selected Time > TIME_SCALE = Time Scale > MEM_ANALYSIS_TITLE = Memory Analysis >-_261 = Running >-_262 = Sleeping >-_263 = Waiting >-_264 = Blocked >-_265 = Deadlock >-_266 = Stopped >-_267 = Unknown >-_269 = No thread statistics is available for display.\nEither you have no trace selected in the Profiling Monitor view or the current selection does not contain thread statistics information.\n\nNote:\nThis view is available only if the trace contains thread statistics. To collect this type of information, on the Profile tab in the Launch configuration, choose the Thread Statistics option. >+NO_THREAD_STATS = No thread statistics is available for display.\nEither you have no trace selected in the Profiling Monitor view or the current selection does not contain thread statistics information.\n\nNote:\nThis view is available only if the trace contains thread statistics. To collect this type of information, on the Profile tab in the Launch configuration, choose the Thread Statistics option. >+_Not_Started = Not Started >+_Running = Running >+_Sleeping = Sleeping >+_Waiting = Waiting >+_Blocked = Blocked >+_Deadlocked = Deadlocked >+_Stopped = Stopped >+_Unknown = Unknown >+_not_started = not started >+_running = running >+_sleeping = sleeping >+_waiting = waiting >+_blocked = blocked >+_deadlocked = deadlocked >+_stopped = stopped >+_unknown = unknown >+ >+#tooltips >+_RESET_TIMESCALE_TTIP = Reset Timescale >+_NEXT_THREAD_TTIP = Select Next Thread >+_PREV_THREAD_TTIP = Select Previous Thread >+_NEXT_EVENT_TTIP = Select Next Event >+_PREV_EVENT_TTIP = Select Previous Event >+ >+# labels >+_RESET_TIMESCALE = Reset Timescale >+_NEXT_THREAD = Next Thread >+_PREV_THREAD = Prev Thread >+_NEXT_EVENT = Next Event >+_PREV_EVENT = Prev Event >+_AVG_AGE = Avg. Age >+_GENERATIONS = Generations >+_LINE_NUMBER = Line No. >+_THREAD_NAME = Thread Name >+_THREAD_CLASS_NAME = Class >+_THREAD_START_TIME = Start Time >+_THREAD_STOP_TIME = Stop Time >+_THREAD_STATE = State >+_THREAD_RUNNING_TIME = Running Time >+_THREAD_SLEEPING_TIME = Sleeping Time >+_THREAD_WAITING_TIME = Waiting Time >+_THREAD_BLOCKED_TIME = Blocked Time >+_THREAD_DEADLOCKED_TIME = Deadlocked Time >+_THREAD_BLOCK_COUNT = Block Count >+_THREAD_DEADLOCK_COUNT = Deadlock Count >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStopTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStopTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStopTimeColumnLabel.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStopTimeColumnLabel.java 26 Oct 2006 19:28:23 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,42 +0,0 @@ >-/********************************************************************** >- * Copyright (c) 2006 Intel Corporation. >- * 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 >- * $Id: ThreadStopTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >- * >- **********************************************************************/ >-package org.eclipse.tptp.trace.jvmti.internal.client.views; >- >-import org.eclipse.emf.ecore.EObject; >-import org.eclipse.hyades.models.trace.TRCThread; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >-import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >-import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >- >-public class ThreadStopTimeColumnLabel extends AbstractNumberColumnLabel { >- >- protected Number getValue(Object element, ColumnDisplayInfo info) { >- EObject eObj = ContextUpdaterHelper.getEObject(element); >- >- if (eObj instanceof TRCThread) >- return new Double(((TRCThread) eObj).getStopTime()); >- else >- return null; >- } >- >- protected Number getDelta(Object element, ColumnDisplayInfo info) { >- return null; >- } >- >- protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >- EObject eObj = ContextUpdaterHelper.getEObject(element); >- >- if (eObj instanceof TRCThread) >- return IContextAttributes.THREAD_STOP_TIME; >- else >- return null; >- } >-} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenCallStackViewAction.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenCallStackViewAction.java,v >retrieving revision 1.2 >diff -u -r1.2 OpenCallStackViewAction.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenCallStackViewAction.java 14 Feb 2007 17:03:09 -0000 1.2 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenCallStackViewAction.java 27 Feb 2007 18:03:27 -0000 >@@ -18,7 +18,7 @@ > > public class OpenCallStackViewAction extends OpenTraceViewActionBase { > >- static final String VIEW_ID = "org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackView"; >+ static final String VIEW_ID = "org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackViewer"; > > public OpenCallStackViewAction() { > super(""); >Index: plugin.properties >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/plugin.properties,v >retrieving revision 1.7 >diff -u -r1.7 plugin.properties >--- plugin.properties 14 Feb 2007 17:03:09 -0000 1.7 >+++ plugin.properties 27 Feb 2007 18:03:27 -0000 >@@ -15,7 +15,7 @@ > pluginName = TPTP Trace JVMTI Client > providerName = Eclipse.org > >-JVMTI_ANALYSIS_TYPE_DESCRIPTION_EXEC = Execution Time Analysis (JVMTI) >+JVMTI_ANALYSIS_TYPE_DESCRIPTION_EXEC = Execution Time Analysis (Java 5.0 +) > JVMTI_ANALYSIS_TYPE_DESCRIPTION_THRD = Thread Statistics > JVMTI_ANALYSIS_TYPE_DESCRIPTION_HEAP = Memory Statistics > JVMTI_ANALYSIS_TYPE_VIEW_FLOW = Execution Flow >@@ -24,9 +24,11 @@ > JVMTI_ANALYSIS_TYPE_VIEW_UML_OBJECT = UML2 Object Interactions > JVMTI_ANALYSIS_TYPE_VIEW_UML_CLASS = UML2 Class Interactions > JVMTI_ANALYSIS_TYPE_VIEW_THRD = Thread Statistics >-JVMTI_ANALYSIS_TYPE_VIEW_THRD_STATES = Thread States >+JVMTI_ANALYSIS_TYPE_VIEW_THRD_STATES = Threads Visualizer > JVMTI_ANALYSIS_TYPE_VIEW_CALL_STACK = Call Stack > JVMTI_ANALYSIS_TYPE_VIEW_HEAP = Memory Statistics >+JVMTI_ANALYSIS_TYPE_VIEW_HEAP_ANALYSIS = Memory Analysis > JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD = Open Thread Statistics >-JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD_STATES = Open Thread States >+JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD_STATES = Open Threads Visualizer > JVMTI_ANALYSIS_TYPE_TOOLTIP_CALL_STACK = Open Call Stack >+JVMTI_ANALYSIS_TYPE_TOOLTIP_HEAP_ANALYSIS = Open Memory Analysis >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/plugin.xml,v >retrieving revision 1.8 >diff -u -r1.8 plugin.xml >--- plugin.xml 14 Feb 2007 17:03:09 -0000 1.8 >+++ plugin.xml 27 Feb 2007 18:03:27 -0000 >@@ -119,9 +119,16 @@ > category="org.eclipse.hyades.trace.internal.ui.trace" > class="org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackViewer" > icon="icons/full/cview16/call_stack_view.gif" >- id="org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackView" >+ id="org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackViewer" > name="%JVMTI_ANALYSIS_TYPE_VIEW_CALL_STACK"> > </view> >+ <view >+ category="org.eclipse.hyades.trace.internal.ui.trace" >+ class="org.eclipse.tptp.trace.jvmti.internal.client.views.MemoryAnalysisViewer" >+ icon="icons/full/obj16/memleakantype_obj.gif" >+ id="org.eclipse.tptp.trace.jvmti.internal.client.views.MemoryAnalysisViewer" >+ name="%JVMTI_ANALYSIS_TYPE_VIEW_HEAP_ANALYSIS"> >+ </view> > </extension> > > <extension >@@ -146,19 +153,25 @@ > relative="org.eclipse.tptp.trace.jvmti.internal.client.views.ThreadStatesViewer" > visible="false"> > </view> >+ <actionSet >+ id="org.eclipse.tptp.trace.jvmti.threadActionSet"> >+ </actionSet> >+ <actionSet >+ id="org.eclipse.tptp.trace.jvmti.heapActionSet"> >+ </actionSet> > </perspectiveExtension> > </extension> > > <extension > point="org.eclipse.ui.actionSets"> > <actionSet >- label="%JVMTI_ANALYSIS_TYPE_DESCRIPTION_THRD" >- visible="true" >+ label="JVMTI" >+ visible="false" > id="org.eclipse.tptp.trace.jvmti.threadActionSet"> > <action > label="%JVMTI_ANALYSIS_TYPE_VIEW_THRD" > icon="icons/full/obj16/thread.gif" >- tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD_STATES" >+ tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD" > class="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenThreadStatisticViewAction" > toolbarPath="trace/group.statistic" > id="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenThreadStatisticViewAction"> >@@ -180,7 +193,28 @@ > toolbarPath="trace/group.statistic" > tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_CALL_STACK"> > </action> >+ <action >+ class="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenMemoryAnalysisViewAction" >+ icon="icons/full/obj16/memleakantype_obj.gif" >+ id="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenMemoryAnalysisViewAction" >+ label="%JVMTI_ANALYSIS_TYPE_VIEW_HEAP_ANALYSIS" >+ style="push" >+ toolbarPath="trace/group.statistic" >+ tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_HEAP_ANALYSIS"> >+ </action> > </actionSet> > </extension> >+ <extension >+ point="org.eclipse.hyades.ui.contextProviders"> >+ <contextProvider >+ class="org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider" >+ id="org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider"> >+ <contexts> >+ <context >+ refID="Java"> >+ </context> >+ </contexts> >+ </contextProvider> >+ </extension> > > </plugin> >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TraceCtrl.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TraceCtrl.java,v >retrieving revision 1.1 >diff -u -r1.1 TraceCtrl.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TraceCtrl.java 13 Feb 2007 20:44:48 -0000 1.1 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TraceCtrl.java 27 Feb 2007 18:03:31 -0000 >@@ -18,17 +18,17 @@ > import org.eclipse.swt.events.PaintEvent; > import org.eclipse.swt.events.PaintListener; > import org.eclipse.swt.graphics.Color; >-import org.eclipse.swt.graphics.GC; >-import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.graphics.Rectangle; > import org.eclipse.swt.widgets.Canvas; > import org.eclipse.swt.widgets.Composite; > > public abstract class TraceCtrl extends Canvas implements PaintListener { > >+ static public final int MARGIN = 4; >+ static public final int SMALL_ICON_SIZE = 16; >+ > protected TraceColorScheme _colors; >- protected Rectangle _rect0 = new Rectangle(0, 0, 0, 0); >- protected Rectangle _rect1 = new Rectangle(0, 0, 0, 0); >+ protected int _fontHeight = 0; > > public TraceCtrl(Composite parent, TraceColorScheme colors) { > this(parent, colors, SWT.NO_BACKGROUND | SWT.NO_FOCUS); >@@ -47,17 +47,18 @@ > public void paintControl(PaintEvent e) { > if (e.widget != this) > return; >- Point size = getSize(); >- if (size.x > 0 && size.y > 0) { >+ _fontHeight = e.gc.getFontMetrics().getHeight(); >+ Rectangle bound = getClientArea(); >+ if (!bound.isEmpty()) { > Color colBackup = e.gc.getBackground(); >- Utils.init(_rect0, 0, 0, size.x, size.y); >- paint(_rect0, e.gc); >+ paint(bound, e); > e.gc.setBackground(colBackup); > } > } > >- void paint(Rectangle rect, GC gc) { >- gc.setBackground(_colors.getColor(TraceColorScheme.BACKGROUND)); >- gc.fillRectangle(rect); >+ public int getFontHeight() { >+ return _fontHeight; > } >+ >+ abstract void paint(Rectangle bound, PaintEvent e); > } >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadStatesCtrl.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadStatesCtrl.java,v >retrieving revision 1.2 >diff -u -r1.2 ThreadStatesCtrl.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadStatesCtrl.java 14 Feb 2007 17:03:09 -0000 1.2 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadStatesCtrl.java 27 Feb 2007 18:03:31 -0000 >@@ -35,40 +35,57 @@ > import org.eclipse.swt.events.MouseEvent; > import org.eclipse.swt.events.MouseListener; > import org.eclipse.swt.events.MouseMoveListener; >+import org.eclipse.swt.events.MouseTrackListener; >+import org.eclipse.swt.events.PaintEvent; > import org.eclipse.swt.events.SelectionEvent; > import org.eclipse.swt.events.SelectionListener; >+import org.eclipse.swt.graphics.Cursor; > import org.eclipse.swt.graphics.GC; >+import org.eclipse.swt.graphics.Image; > import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.graphics.Rectangle; > import org.eclipse.swt.widgets.Composite; > > public class ThreadStatesCtrl extends TraceCtrl implements FocusListener, > KeyListener, MouseMoveListener, MouseListener, ControlListener, >- SelectionListener { >+ SelectionListener, MouseTrackListener { > > private ITimeDataProvider _timeProvider; >- boolean _isInFocus = false; >+ private boolean _isInFocus = false; >+ private boolean _isDragCursor3 = false; >+ private boolean _mouseHover = false; > private int _topItem = 0; > private int _itemHeight = 18; > private int _dragState = 0; > private int _hitIdx = 0; > private int _dragX0 = 0; > private int _dragX = 0; >+ private int _idealNameWidth = 0; > private double _timeStep = 0.01; > private double _time0bak; > private double _time1bak; > private ItemData _data = new ItemData(); > private ArrayList _selectionListeners; >- >+ private Rectangle _rect0 = new Rectangle(0, 0, 0, 0); >+ private Rectangle _rect1 = new Rectangle(0, 0, 0, 0); >+ private Cursor _dragCursor3; >+ > public ThreadStatesCtrl(Composite parent, TraceColorScheme colors) { >- super(parent, colors, SWT.NO_BACKGROUND | SWT.H_SCROLL | SWT.V_SCROLL); >+ super(parent, colors, SWT.NO_BACKGROUND | SWT.H_SCROLL | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED); > addFocusListener(this); > addMouseListener(this); > addMouseMoveListener(this); >+ addMouseTrackListener(this); > addKeyListener(this); > addControlListener(this); > getVerticalBar().addSelectionListener(this); > getHorizontalBar().addSelectionListener(this); >+ _dragCursor3 = new Cursor(parent.getDisplay(), SWT.CURSOR_SIZEWE); >+ } >+ >+ public void dispose() { >+ super.dispose(); >+ _dragCursor3.dispose(); > } > > public void setTimeProvider(ITimeDataProvider timeProvider) { >@@ -141,7 +158,13 @@ > > boolean ensureVisibleItem(int idx, boolean redraw) { > boolean changed = false; >- if (idx < 0 || idx >= _data._items.length) >+ if (idx < 0) { >+ for (idx = 0; idx < _data._items.length; idx++) { >+ if (((Item)_data._items[idx])._selected) >+ break; >+ } >+ } >+ if (idx >= _data._items.length) > return changed; > if (idx < _topItem) { > _topItem = idx; >@@ -162,49 +185,6 @@ > return changed; > } > >- static TRCThreadEvent getFirstEvent(TRCThread thread) { >- EList list = thread.getThreadEvents(); >- TRCThreadEvent event = null; >- if (!list.isEmpty()) >- event = (TRCThreadEvent) list.get(0); >- return event; >- } >- >- static TRCThreadEvent findEvent(TRCThread thread, double time, int n) { >- EList list = thread.getThreadEvents(); >- Iterator it = list.iterator(); >- TRCThreadEvent event = null; >- TRCThreadEvent prevEvent = null; >- TRCThreadEvent nextEvent = null; >- if (it.hasNext()) { >- event = (TRCThreadEvent) it.next(); >- double currTime = event.getTime(); >- if (time < currTime) { >- if (1 != n) >- event = null; >- return event; >- } >- while (it.hasNext()) { >- nextEvent = (TRCThreadEvent) it.next(); >- double nextTime = nextEvent.getTime(); >- if (currTime <= time && time < nextTime) { >- if (1 == n) >- event = nextEvent; >- else if (-1 == n) >- event = prevEvent; >- return event; >- } >- prevEvent = event; >- event = nextEvent; >- } >- } >- if (1 == n) >- event = null; >- else if (-1 == n) >- event = prevEvent; >- return event; >- } >- > static class Selection implements IStructuredSelection { > > List list = new ArrayList(); >@@ -241,7 +221,7 @@ > TRCThread thread = getSelectedThread(); > if (null != thread && null != _timeProvider) { > double selectedTime = _timeProvider.getSelectedTime(); >- TRCThreadEvent event = findEvent(thread, selectedTime, 0); >+ TRCThreadEvent event = Utils.findEvent(thread, selectedTime, 0); > if (null != event) > sel.list.add(event); > } >@@ -307,6 +287,7 @@ > } > } > if (changed) { >+ ensureVisibleItem(-1, false); > redraw(); > fireSelectionChanged(); > } >@@ -322,11 +303,11 @@ > double endTime = _timeProvider.getEndTime(); > TRCThreadEvent nextEvent; > if (-1 == n && selectedTime >= endTime) >- nextEvent = findEvent(thread, selectedTime, 0); >+ nextEvent = Utils.findEvent(thread, selectedTime, 0); > else >- nextEvent = findEvent(thread, selectedTime, n); >+ nextEvent = Utils.findEvent(thread, selectedTime, n); > if (null == nextEvent && -1 == n) >- nextEvent = getFirstEvent(thread); >+ nextEvent = Utils.getFirstEvent(thread); > if (null != nextEvent) { > _timeProvider.setSelectedTime(nextEvent.getTime(), true); > fireSelectionChanged(); >@@ -389,9 +370,7 @@ > } > > int hitTest(int x, int y) { >- if (x < 0) >- return -1; >- if (y < 0) >+ if (x < 0 || y < 0) > return -1; > int hit = -1; > int idx = y / _itemHeight; >@@ -401,6 +380,22 @@ > return hit; > } > >+ int hitSplitTest(int x, int y) { >+ if (x < 0 || y < 0 || null == _timeProvider) >+ return -1; >+ int w = 4; >+ int hit = -1; >+ int nameWidth = _timeProvider.getNameSpace(); >+ if (x > nameWidth - w && x < nameWidth + w) >+ hit = 1; >+ return hit; >+ } >+ >+ public Item getItem(Point pt) { >+ int idx = hitTest(pt.x, pt.y); >+ return idx >= 0 ? (Item)_data._items[idx] : null; >+ } >+ > double hitTimeTest(int x, int y) { > if (null == _timeProvider) > return -1; >@@ -408,10 +403,10 @@ > Point size = getCtrlSize(); > double time0 = _timeProvider.getTime0(); > double time1 = _timeProvider.getTime1(); >- int left = _timeProvider.getNameSpace(); >- x -= left; >- if (x >= 0 && size.x >= left) { >- hitTime = time0 + (time1 - time0) * x / (size.x - left); >+ int nameWidth = _timeProvider.getNameSpace(); >+ x -= nameWidth; >+ if (x >= 0 && size.x >= nameWidth) { >+ hitTime = time0 + (time1 - time0) * x / (size.x - nameWidth); > } > return hitTime; > } >@@ -460,78 +455,87 @@ > return size; > } > >- void getNameRect(Rectangle rect, Point size, int idx, int nameWidth) { >+ void getNameRect(Rectangle rect, Rectangle bound, int idx, int nameWidth) { > idx -= _topItem; >- rect.x = 0; >- rect.y = idx * _itemHeight; >+ rect.x = bound.x; >+ rect.y = bound.y + idx * _itemHeight; > rect.width = nameWidth; > rect.height = _itemHeight; > } > >- void getStatesRect(Rectangle rect, Point size, int idx, int nameWidth) { >+ void getStatesRect(Rectangle rect, Rectangle bound, int idx, int nameWidth) { > idx -= _topItem; >- rect.x = nameWidth; >- rect.y = idx * _itemHeight; >- rect.width = size.x - rect.x; >+ rect.x = bound.x + nameWidth; >+ rect.y = bound.y + idx * _itemHeight; >+ rect.width = bound.width - rect.x; > rect.height = _itemHeight; > } > >- void paint(Rectangle rect, GC gc) { >- Point size = getCtrlSize(); >- if (size.x < 2 || size.y < 2 || null == _timeProvider) >+ void paint(Rectangle bound, PaintEvent e) { >+ _itemHeight = getFontHeight() + 6; >+ if (bound.width < 2 || bound.height < 2 || null == _timeProvider) > return; >+ _idealNameWidth = 0; >+ GC gc = e.gc; >+ int nameWidth = _timeProvider.getNameSpace(); > double time0 = _timeProvider.getTime0(); > double time1 = _timeProvider.getTime1(); > double endTime = _timeProvider.getEndTime(); > double selectedTime = _timeProvider.getSelectedTime(); >- int left = _timeProvider.getNameSpace(); > // draw thread states > Object[] items = _data._items; > for (int i = _topItem; i < items.length; i++) { > Item item = (Item) items[i]; >- getNameRect(_rect0, size, i, left); >- if (_rect0.y >= size.y) >+ getNameRect(_rect0, bound, i, nameWidth); >+ if (_rect0.y >= bound.y + bound.height) > break; > if (item instanceof GroupItem) { >- getStatesRect(_rect1, size, i, left); >+ getStatesRect(_rect1, bound, i, nameWidth); > _rect0.width += _rect1.width; > drawName(item, _rect0, gc); > } else { > drawName(item, _rect0, gc); >- getStatesRect(_rect0, size, i, left); >- drawItemData(item, _rect0, time0, time1, endTime, selectedTime, >- gc); > } >+ getStatesRect(_rect0, bound, i, nameWidth); >+ drawItemData(item, _rect0, time0, time1, endTime, selectedTime, gc); > } > // fill free canvas area >- _rect0.x = 0; >+ _rect0.x = bound.x; > _rect0.y += _rect0.height; >- _rect0.width = size.x; >- _rect0.height = size.y - _rect0.y; >- if (_rect0.y < size.y) { >+ _rect0.width = bound.width; >+ _rect0.height = bound.y + bound.height - _rect0.y; >+ if (_rect0.y < bound.y + bound.height) { > gc.setBackground(_colors.getColor(TraceColorScheme.BACKGROUND)); > gc.fillRectangle(_rect0); > } >+ // draw drag line >+ if (3 == _dragState) { >+ gc.setForeground(_colors.getColor(TraceColorScheme.BLACK)); >+ gc.drawLine(bound.x + nameWidth, bound.y, bound.x + nameWidth, bound.y + bound.height - 1); >+ } else if (0 == _dragState && _mouseHover) { >+ gc.setForeground(_colors.getColor(TraceColorScheme.RED)); >+ gc.drawLine(bound.x + nameWidth, bound.y, bound.x + nameWidth, bound.y + bound.height - 1); >+ } > } > > void drawName(Item item, Rectangle rect, GC gc) { > boolean group = item instanceof GroupItem; > int elemHeight = rect.height / 2; > int elemWidth = elemHeight; >+ String name = item._name; > if (group) { > gc.setBackground(_colors.getBkColorGroup(item._selected, _isInFocus)); > gc.fillRectangle(rect); > if (item._selected && _isInFocus) { > gc.setForeground(_colors.getBkColor(item._selected, _isInFocus, false)); >- //gc.drawRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2); >- gc.drawRoundRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2, 2, 2); >+ gc.drawRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2); > } > gc.setForeground(_colors.getBkColor(false, false, false)); > gc.drawLine(rect.x, rect.y + rect.height - 1, rect.width - 1, rect.y + rect.height - 1); > gc.setForeground(_colors.getFgColorGroup(false, false)); > gc.setBackground(_colors.getBkColor(false, false, false)); > Utils.init(_rect1, rect); >- _rect1.x += 2; >+ _rect1.x += MARGIN; > _rect1.y += (rect.height - elemHeight) / 2; > _rect1.width = elemWidth; > _rect1.height = elemHeight; >@@ -544,28 +548,53 @@ > gc.drawLine(p, _rect1.y + 2, p, _rect1.y + _rect1.height - 3); > } > gc.setForeground(_colors.getFgColorGroup(item._selected, _isInFocus)); >- elemWidth+= 4; >+ elemWidth+= MARGIN; > } else { > gc.setBackground(_colors.getBkColor(item._selected, _isInFocus, true)); > gc.setForeground(_colors.getFgColor(item._selected, _isInFocus)); > gc.fillRectangle(rect); >+ Utils.init(_rect1, rect); >+ _rect1.x += MARGIN; >+ // draw icon >+ TRCThread thread = ((ThreadItem)item)._thread; >+ Image img = Utils.getItemImage(thread); >+ if (null != img) { >+ _rect1.y += (rect.height - img.getImageData().height) / 2; >+ gc.drawImage(img, _rect1.x, _rect1.y); >+ } >+ elemWidth = SMALL_ICON_SIZE; >+ // cut long string with "..." >+ Point size = gc.stringExtent(name); >+ if (_idealNameWidth < size.x) >+ _idealNameWidth = size.x; >+ int width = rect.width - MARGIN - MARGIN - elemWidth; >+ int cuts = 0; >+ while (size.x > width && name.length() > 1) { >+ cuts++; >+ name = name.substring(0, name.length() - 1); >+ size = gc.stringExtent(name + "..."); >+ } >+ if (cuts > 0) >+ name += "..."; >+ elemWidth+= MARGIN; > } > Utils.init(_rect1, rect); >- int leftMargin = 4 + (group ? elemWidth : 0); >+ int leftMargin = MARGIN + elemWidth; > _rect1.x += leftMargin; > _rect1.width -= leftMargin; > int textWidth = 0; > // draw text > if (_rect1.width > 0) { >- String name = group ? item._name + " (group}" : item._name; >+ _rect1.y += 2; > textWidth = Utils.drawText(gc, name, _rect1, true) + 8; >+ _rect1.y -= 2; > } > // draw middle line >- Utils.init(_rect1, rect); >- _rect1.x += textWidth; >- _rect1.width -= textWidth; >- gc.setForeground(_colors.getColor(TraceColorScheme.LIGHT_LINE)); >- if (_rect1.width > 0 && item instanceof ThreadItem) { >+ if (_rect1.width > 0 && !group) { >+ Utils.init(_rect1, rect); >+ _rect1.x += leftMargin + textWidth; >+ _rect1.width -= textWidth; >+ gc.setForeground(_colors.getColor(TraceColorScheme.MID_LINE)); > int midy = _rect1.y + _rect1.height / 2; > gc.drawLine(_rect1.x, midy, _rect1.x + _rect1.width, midy); > } >@@ -586,10 +615,11 @@ > Utils.init(_rect1, rect); > boolean selected = item._selected; > double K = (double) rect.width / (time1 - time0); >+ boolean group = item instanceof GroupItem; > >- if (item instanceof GroupItem) { >- gc.setBackground(_colors.getBkColorGroup(selected, _isInFocus)); >- gc.fillRectangle(rect); >+ if (group) { >+ //gc.setBackground(_colors.getBkColorGroup(selected, _isInFocus)); >+ //gc.fillRectangle(rect); > } else if (item instanceof ThreadItem) { > TRCThread thread = ((ThreadItem) item)._thread; > int x0 = rect.x; >@@ -612,12 +642,10 @@ > // fill space before first event > if (x0 > rect.x) { > _rect1.width = (x0 <= xEnd ? x0 : xEnd) - _rect1.x; >- gc.setBackground(_colors.getBkColor(selected, _isInFocus, >- false)); >+ gc.setBackground(_colors.getBkColor(selected, _isInFocus, false)); > gc.fillRectangle(_rect1); > // draw middle line >- gc.setForeground(_colors >- .getColor(TraceColorScheme.MID_LINE)); >+ gc.setForeground(_colors.getColor(TraceColorScheme.MID_LINE)); > int midy = _rect1.y + _rect1.height / 2; > gc.drawLine(_rect1.x, midy, _rect1.x + _rect1.width, midy); > } >@@ -667,7 +695,7 @@ > > // draw focus ares > Utils.init(_rect1, rect); >- gc.setForeground(_colors.getBkColor(false, false, false)); >+ gc.setForeground(_colors.getBkColor(selected, _isInFocus, false)); > int y = _rect1.y; > gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y); > y++; >@@ -680,15 +708,16 @@ > gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y); > y--; > gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y); >- // gc.setForeground(_colors.getBkColor(selected, _isInFocus, >- // false)); > } > > // draw selected time > int x = rect.x + (int) ((selectedTime - time0) * K); > if (x >= rect.x && x < rect.x + rect.width) { > gc.setForeground(_colors.getColor(TraceColorScheme.SELECTED_TIME)); >- gc.drawLine(x, rect.y, x, rect.y + rect.height); >+ if (group) >+ gc.drawLine(x, rect.y + rect.height - 1, x, rect.y + rect.height); >+ else >+ gc.drawLine(x, rect.y, x, rect.y + rect.height); > } > } > >@@ -756,7 +785,7 @@ > > public void focusLost(FocusEvent e) { > _isInFocus = false; >- if (1 == _dragState) { >+ if (0 != _dragState) { > setCapture(false); > _dragState = 0; > } >@@ -764,14 +793,15 @@ > } > > public void mouseMove(MouseEvent e) { >+ if (null == _timeProvider) >+ return; > Point size = getCtrlSize(); >- if (1 == _dragState && null != _timeProvider) { >- int leftSpace = _timeProvider.getNameSpace(); >- int x = e.x - leftSpace; >- if (x > 0 && size.x > leftSpace && _dragX != x) { >+ if (1 == _dragState) { >+ int nameWidth = _timeProvider.getNameSpace(); >+ int x = e.x - nameWidth; >+ if (x > 0 && size.x > nameWidth && _dragX != x) { > _dragX = x; >- double K = (double) (size.x - leftSpace) >- / (_time1bak - _time0bak); >+ double K = (double) (size.x - nameWidth) / (_time1bak - _time0bak); > double timeDelta = (_dragX - _dragX0) / K; > double time1 = _time1bak - timeDelta; > double maxTime = _timeProvider.getMaxTime(); >@@ -782,12 +812,28 @@ > time0 = 0; > _timeProvider.setStartFinishTime(time0, time1); > } >+ } else if (3 == _dragState) { >+ _dragX = e.x; >+ _timeProvider.setNameSpace(_hitIdx + _dragX - _dragX0); >+ } else if (0 == _dragState) { >+ boolean mouseHover = hitSplitTest(e.x, e.y) > 0; >+ if (_mouseHover != mouseHover) >+ redraw(); >+ _mouseHover = mouseHover; > } >+ updateCursor(e.x, e.y); > } > > public void mouseDoubleClick(MouseEvent e) { >+ if (null == _timeProvider) >+ return; > if (1 == e.button) { >- int idx = hitTest(e.x, e.y); >+ int idx = hitSplitTest(e.x, e.y); >+ if (idx >= 0) { >+ _timeProvider.setNameSpace(_idealNameWidth + 3 * MARGIN + SMALL_ICON_SIZE); >+ return; >+ } >+ idx = hitTest(e.x, e.y); > if (idx >= 0) { > selectItem(idx, false); > if (_data._items[idx] instanceof ThreadItem) { >@@ -797,11 +843,32 @@ > } > } > >+ void updateCursor(int x, int y) { >+ int idx = hitSplitTest(x, y); >+ if (idx > 0 && !_isDragCursor3) { >+ setCursor(_dragCursor3); >+ _isDragCursor3 = true; >+ } else if (idx <= 0 && _isDragCursor3) { >+ setCursor(null); >+ _isDragCursor3 = false; >+ } >+ } >+ > public void mouseDown(MouseEvent e) { > if (null == _timeProvider) > return; > if (1 == e.button) { >- int idx = hitTest(e.x, e.y); >+ int idx = hitSplitTest(e.x, e.y); >+ if (idx > 0) { >+ _dragState = 3; >+ _dragX = _dragX0 = e.x; >+ _hitIdx = _timeProvider.getNameSpace();; >+ _time0bak = _timeProvider.getTime0(); >+ _time1bak = _timeProvider.getTime1(); >+ redraw(); >+ return; >+ } >+ idx = hitTest(e.x, e.y); > if (idx >= 0) { > if (_data._items[idx] instanceof ThreadItem) { > double hitTime = hitTimeTest(e.x, e.y); >@@ -829,6 +896,8 @@ > if (2 == _dragState) { > if (hitTest(e.x, e.y) == _hitIdx) > toggle(_hitIdx); >+ } else if (3 == _dragState) { >+ redraw(); > } > _dragState = 0; > } >@@ -861,6 +930,19 @@ > _timeProvider.setStartFinishTime(time0, time1); > } > } >+ >+ public void mouseEnter(MouseEvent e) { >+ } >+ >+ public void mouseExit(MouseEvent e) { >+ if (_mouseHover) { >+ _mouseHover = false; >+ redraw(); >+ } >+ } >+ >+ public void mouseHover(MouseEvent e) { >+ } > } > > class Item { >@@ -882,7 +964,7 @@ > public TRCThread _thread; > > ThreadItem(TRCThread thread) { >- super(thread.getName()); >+ super(Utils.composeThreadName(thread, false)); > _thread = thread; > } > } >@@ -928,6 +1010,18 @@ > } > } > >+ ThreadItem findThreadItem(TRCThread thread) { >+ ThreadItem threadItem = null; >+ for (int i = 0; i < _items.length; i++) { >+ if (_items[i] instanceof ThreadItem && >+ ((ThreadItem)_items[i])._thread == thread) { >+ threadItem = (ThreadItem) _items[i]; >+ break; >+ } >+ } >+ return threadItem; >+ } >+ > public void updateItems() { > ArrayList itemList = new ArrayList(); > Set keys = _groupTable.keySet(); >@@ -939,8 +1033,13 @@ > itemList.add(group); > if (_flatList || group._expanded) { > Iterator it2 = group._threads.iterator(); >- while (it2.hasNext()) >- itemList.add(new ThreadItem((TRCThread) it2.next())); >+ while (it2.hasNext()) { >+ TRCThread thread = (TRCThread) it2.next(); >+ ThreadItem threadItem = findThreadItem(thread); >+ if (threadItem == null) >+ threadItem = new ThreadItem(thread); >+ itemList.add(threadItem); >+ } > } > } > _items = itemList.toArray(); >@@ -972,7 +1071,7 @@ > groupName = undef; > GroupItem group = (GroupItem) _groupTable.get(groupName); > if (null == group) { >- group = new GroupItem(groupName); >+ group = new GroupItem("Thread Group [" + groupName + "]"); > group._expanded = !groupName.equalsIgnoreCase("system") > && !groupName.equalsIgnoreCase(undef); > _groupTable.put(groupName, group); >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/LegendCtrl.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/LegendCtrl.java,v >retrieving revision 1.1 >diff -u -r1.1 LegendCtrl.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/LegendCtrl.java 13 Feb 2007 20:44:47 -0000 1.1 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/LegendCtrl.java 27 Feb 2007 18:03:30 -0000 >@@ -14,6 +14,7 @@ > > package org.eclipse.tptp.trace.jvmti.internal.client.widgets; > >+import org.eclipse.swt.events.PaintEvent; > import org.eclipse.swt.graphics.GC; > import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.graphics.Rectangle; >@@ -23,6 +24,7 @@ > public class LegendCtrl extends TraceCtrl { > > static private String _names[]; >+ private Rectangle _rect0 = new Rectangle(0, 0, 0, 0); > > public LegendCtrl(Composite parent, TraceColorScheme colors) { > super(parent, colors); >@@ -31,41 +33,43 @@ > static private String [] getNames() { > if (null == _names) { > String names[] = { >- UIMessages._267, // "Unknown", >- UIMessages._261, // "Running", >- UIMessages._262, // "Sleeping", >- UIMessages._263, // "Waiting", >- UIMessages._264, // "Blocked", >- UIMessages._265, // "Deadlock", >- UIMessages._266, // "Stopped", >+ UIMessages._Unknown, // "Unknown", >+ UIMessages._Running, // "Running", >+ UIMessages._Sleeping, // "Sleeping", >+ UIMessages._Waiting, // "Waiting", >+ UIMessages._Blocked, // "Blocked", >+ UIMessages._Deadlocked, // "Deadlock", >+ UIMessages._Stopped, // "Stopped", > }; > _names = names; > } > return _names; > } > >- void paint(Rectangle rect, GC gc) { >+ void paint(Rectangle rect, PaintEvent e) { >+ GC gc = e.gc; > gc.setBackground(_colors.getColor(TraceColorScheme.LEGEND_BACKGROUND)); > gc.fillRectangle(rect); > // draw legend rect >- Utils.init(_rect1, rect); >+ Utils.init(_rect0, rect); > //gc.setForeground(_colors.getColor(TraceColorScheme.LEGEND_FOREGROUND)); >- //gc.drawRectangle(_rect1.x, _rect1.y, _rect1.width - 1, _rect1.height - 1); >+ //gc.drawRectangle(_rect0.x, _rect0.y, _rect0.width - 1, _rect0.height - 1); >+ //gc.drawRoundRectangle(_rect0.x, _rect0.y, _rect0.width - 1, _rect0.height - 1, 5, 5); > // draw legend elements > int idx = 0; > String names[] = getNames(); >- _rect1.x += 4; >- _rect1.y += 2; >- while (idx < names.length && _rect1.x < rect.x + rect.width) { >+ _rect0.x += 4; >+ _rect0.y += 4; >+ while (idx < names.length && _rect0.x < rect.x + rect.width) { > Point size = gc.stringExtent(names[idx]); >- _rect1.width = 16; >- _rect1.height = size.y; >- Utils.drawState(_colors, idx, _rect1, gc, false, true, false); >- _rect1.x += _rect1.width + 2; >- _rect1.width = size.x; >+ _rect0.width = 16; >+ _rect0.height = size.y; >+ Utils.drawState(_colors, idx, _rect0, gc, false, true, false); >+ _rect0.x += _rect0.width + 2; >+ _rect0.width = size.x; > gc.setForeground(_colors.getColor(TraceColorScheme.LEGEND_FOREGROUND)); >- Utils.drawText(gc, names[idx], _rect1, true); >- _rect1.x += _rect1.width + 8; >+ Utils.drawText(gc, names[idx], _rect0, true); >+ _rect0.x += _rect0.width + 8; > idx++; > } > } >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TimeScaleCtrl.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TimeScaleCtrl.java,v >retrieving revision 1.1 >diff -u -r1.1 TimeScaleCtrl.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TimeScaleCtrl.java 13 Feb 2007 20:44:48 -0000 1.1 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TimeScaleCtrl.java 27 Feb 2007 18:03:31 -0000 >@@ -14,19 +14,20 @@ > > package org.eclipse.tptp.trace.jvmti.internal.client.widgets; > >+import org.eclipse.swt.SWT; > import org.eclipse.swt.events.MouseEvent; > import org.eclipse.swt.events.MouseListener; > import org.eclipse.swt.events.MouseMoveListener; >+import org.eclipse.swt.events.PaintEvent; > import org.eclipse.swt.graphics.GC; > import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.graphics.Rectangle; > import org.eclipse.swt.widgets.Composite; >-import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; > > public class TimeScaleCtrl extends TraceCtrl implements MouseListener, MouseMoveListener { > > public TimeScaleCtrl(Composite parent, TraceColorScheme colors) { >- super(parent, colors); >+ super(parent, colors, SWT.NO_BACKGROUND | SWT.NO_FOCUS | SWT.DOUBLE_BUFFERED); > addMouseListener(this); > addMouseMoveListener(this); > } >@@ -38,6 +39,7 @@ > private double _time0bak; > private double _time1bak; > private boolean _isInUpdate; >+ private Rectangle _rect0 = new Rectangle(0, 0, 0, 0); > > public void setTimeProvider(ITimeDataProvider timeProvider) { > _timeProvider = timeProvider; >@@ -88,11 +90,12 @@ > return timeDraw; > } > >- void paint(Rectangle rect, GC gc) { >+ void paint(Rectangle rect, PaintEvent e) { > > if (_isInUpdate || null == _timeProvider) > return; > >+ GC gc = e.gc; > if (null == _timeProvider) { > gc.fillRectangle(rect); > return; >@@ -106,10 +109,11 @@ > int leftSpace = _timeProvider.getNameSpace(); > int timeSpace = _timeProvider.getTimeSpace(); > >- if (time1 <= time0) { >+ if (time1 <= time0 || timeSpace < 2) { > gc.fillRectangle(rect); > return; > } >+ > double timeRange = time1 - time0; > int numDigits = 8; // 11:222 > if (timeRange < .00001) >@@ -117,7 +121,7 @@ > else if (timeRange < .01) > numDigits = 12; // 11:222:333__ > >- Utils.init(_rect1, rect); >+ Utils.init(_rect0, rect); > int labelWidth = gc.getCharWidth('0') * numDigits; > double K = 1; > if (rect.width - leftSpace > 0) { >@@ -127,57 +131,57 @@ > TimeDraw timeDraw = getTimeDraw(_timeDelta); > > // draw top left area >- _rect1.width = leftSpace; >- gc.fillRectangle(_rect1); >- _rect1.x += 4; >- _rect1.width -= 4; >- if (_rect1.width > 0) { >- if (rect.width - leftSpace > 0) >- Utils.drawText(gc, "Time: " + timeDraw.hint(), _rect1, true); >+ _rect0.width = leftSpace; >+ gc.fillRectangle(_rect0); >+ _rect0.x += 4; >+ _rect0.width -= 4; >+ if (_rect0.width > 0) { >+ if (false && rect.width - leftSpace > 0) >+ Utils.drawText(gc, "Time scale: " + timeDraw.hint(), _rect0, true); > else >- Utils.drawText(gc, UIMessages.TIME_SCALE, _rect1, true); >+ Utils.drawText(gc, "Time scale:", _rect0, true); > } >- _rect1.x -= 4; >- _rect1.width += 4; >+ _rect0.x -= 4; >+ _rect0.width += 4; > > // prepare and draw right rect of the timescale >- _rect1.x += leftSpace; >- _rect1.width = rect.width - leftSpace; >+ _rect0.x += leftSpace; >+ _rect0.width = rect.width - leftSpace; > > // draw bottom border and erase all other area > gc.drawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1, > rect.y + rect.height - 1); >- _rect1.height--; >- gc.fillRectangle(_rect1); >+ _rect0.height--; >+ gc.fillRectangle(_rect0); > >- if (_rect1.isEmpty()) >+ if (_rect0.isEmpty()) > return; > > // draw selected time >- int x = _rect1.x + (int) ((selectedTime - time0) * K); >- if (x >= _rect1.x && x < _rect1.x + _rect1.width) { >+ int x = _rect0.x + (int) ((selectedTime - time0) * K); >+ if (x >= _rect0.x && x < _rect0.x + _rect0.width) { > gc.setForeground(_colors.getColor(TraceColorScheme.SELECTED_TIME)); >- gc.drawLine(x, _rect1.y + _rect1.height - 6, x, _rect1.y + _rect1.height); >+ gc.drawLine(x, _rect0.y + _rect0.height - 6, x, _rect0.y + _rect0.height); > gc.setForeground(_colors.getColor(TraceColorScheme.TOOL_FOREGROUND)); > } > > // draw time scale ticks >- _rect1.y = rect.y; >- _rect1.height = rect.height - 4; >- _rect1.width = labelWidth; >+ _rect0.y = rect.y; >+ _rect0.height = rect.height - 4; >+ _rect0.width = labelWidth; > double time = Math.floor(time0 / _timeDeltaD) * _timeDeltaD; > long t = (long)(time * 1000000000); >- int y = _rect1.y + _rect1.height; >+ int y = _rect0.y + _rect0.height; > while (true) { > x = rect.x + leftSpace + (int) ((time - time0) * K); >- if (x >= rect.x + leftSpace + rect.width - _rect1.width) { >+ if (x >= rect.x + leftSpace + rect.width - _rect0.width) { > break; > } > if (x >= rect.x + leftSpace) { > gc.drawLine(x, y, x, y + 4); >- _rect1.x = x; >- if (x + _rect1.width <= rect.x + rect.width) >- timeDraw.draw(gc, t, _rect1); >+ _rect0.x = x; >+ if (x + _rect0.width <= rect.x + rect.width) >+ timeDraw.draw(gc, t, _rect0); > } > time += _timeDeltaD; > t += _timeDelta; >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/Utils.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/Utils.java,v >retrieving revision 1.2 >diff -u -r1.2 Utils.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/Utils.java 14 Feb 2007 17:03:09 -0000 1.2 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/Utils.java 27 Feb 2007 18:03:31 -0000 >@@ -14,6 +14,16 @@ > > package org.eclipse.tptp.trace.jvmti.internal.client.widgets; > >+import java.util.Iterator; >+ >+import org.eclipse.emf.common.util.EList; >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.models.hierarchy.TRCAnnotation; >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCMethod; >+import org.eclipse.hyades.models.trace.TRCMethodInvocation; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.models.trace.TRCThread; > import org.eclipse.hyades.models.trace.TRCThreadDeadEvent; > import org.eclipse.hyades.models.trace.TRCThreadDeadLockEvent; > import org.eclipse.hyades.models.trace.TRCThreadEvent; >@@ -21,16 +31,67 @@ > import org.eclipse.hyades.models.trace.TRCThreadSleepingEvent; > import org.eclipse.hyades.models.trace.TRCThreadWaitingForLockEvent; > import org.eclipse.hyades.models.trace.TRCThreadWaitingForObjectEvent; >+import org.eclipse.hyades.trace.ui.ITraceSelection; >+import org.eclipse.hyades.trace.ui.UIPlugin; >+import org.eclipse.hyades.trace.views.internal.TraceUIPlugin; >+import org.eclipse.hyades.ui.provisional.context.ContextManager; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.jface.action.Action; >+import org.eclipse.jface.resource.ImageDescriptor; > import org.eclipse.swt.SWT; > import org.eclipse.swt.graphics.Color; > import org.eclipse.swt.graphics.Device; > import org.eclipse.swt.graphics.GC; >+import org.eclipse.swt.graphics.Image; > import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.graphics.Rectangle; > import org.eclipse.swt.widgets.Display; >+import org.eclipse.tptp.trace.jvmti.internal.client.MethodDetails; >+import org.eclipse.tptp.trace.jvmti.internal.client.TITracePlugin; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.ui.plugin.AbstractUIPlugin; > > public class Utils { > >+ static public final int IMG_THREAD_RUNNING = 0; >+ static public final int IMG_THREAD_SUSPENDED = 1; >+ static public final int IMG_THREAD_STOPPED = 2; >+ static public final int IMG_METHOD_RUNNING = 3; >+ static public final int IMG_METHOD = 4; >+ static public final int IMG_NUM = 5; >+ >+ static public final Object[] _empty = new Object[0]; >+ >+ static private String _externalPlugin[] = { >+ "org.eclipse.debug.ui", >+ "org.eclipse.debug.ui", >+ "org.eclipse.debug.ui", >+ "org.eclipse.debug.ui", >+ "org.eclipse.debug.ui", >+ }; >+ >+ static private String _externalPath[] = { >+ "icons/full/obj16/thread_obj.gif", // running thread >+ "icons/full/obj16/threads_obj.gif", // suspended >+ "icons/full/obj16/threadt_obj.gif", // stopped >+ "icons/full/obj16/stckframe_running_obj.gif", // running stack frame >+ "icons/full/obj16/stckframe_obj.gif", // stack frame >+ }; >+ >+ static public Image getImage(int idx) { >+ if (idx < 0 || idx >= IMG_NUM) >+ SWT.error(SWT.ERROR_INVALID_ARGUMENT); >+ String key = "trace.img." + idx; >+ Image img = TITracePlugin.getDefault().getImageRegistry().get(key); >+ if (null == img) { >+ ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin( >+ _externalPlugin[idx], _externalPath[idx]); >+ TITracePlugin.getDefault().getImageRegistry().put(key, desc); >+ img = TITracePlugin.getDefault().getImageRegistry().get(key); >+ } >+ return img; >+ } >+ > static public void init(Rectangle rect) { > rect.x = 0; > rect.y = 0; >@@ -97,16 +158,16 @@ > Rectangle rect, GC gc, boolean selected, boolean rectBound, boolean timeSelected) { > if (rect.isEmpty()) > return; >- // FILL RECT >+ // fill all rect area > int colorIdx1 = colorIdx; > timeSelected = timeSelected && selected; >- if (selected) >+ if (timeSelected) > colorIdx1 = colorIdx + TraceColorScheme.STATES_SEL0 - TraceColorScheme.STATES0; > gc.setBackground(colors.getColor(colorIdx1)); > gc.fillRectangle(rect); > colorIdx1 = colorIdx + TraceColorScheme.STATES_BORDER0 - TraceColorScheme.STATES0; > gc.setForeground(colors.getColor(colorIdx1)); >- // DRAW BOUNDS >+ // draw bounds > if (!timeSelected) { > if (rectBound && rect.width >= 3) { > gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1); >@@ -115,7 +176,7 @@ > gc.drawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1, rect.y + rect.height - 1); > } > } >- // DRAW MID LINE >+ // draw decoration middle line > int mindy = rect.y + rect.height / 2; > if (TraceColorScheme.BLOCKED == colorIdx || TraceColorScheme.WAITING == colorIdx) { > int s = gc.getLineStyle(); >@@ -131,10 +192,10 @@ > gc.drawLine(rect.x, mindy, rect.x + rect.width, mindy); > gc.setLineWidth(w); > } >- // DRAW SELECTED BOUNDS >+ // draw selection bounds > if (timeSelected) { >+ gc.setForeground(colors.getColor(TraceColorScheme.SELECTED_TIME)); > if (rect.width >= 3) { >- gc.setForeground(colors.getColor(TraceColorScheme.SELECTED_TIME)); > gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1); > //gc.drawRectangle(rect.x + 1, rect.y + 1, rect.width - 3, rect.height - 3); > } else { >@@ -167,4 +228,303 @@ > gc.drawText(text, rect.x, rect.y, transp); > return size.x; > } >+ >+ static public String composeThreadName(TRCThread thread, boolean inclState) { >+ String name = thread.getName(); >+ String threadClass = getThreadClassName(thread); >+ if (threadClass != null && threadClass.length() > 0) { >+ name += " [" + threadClass + "]"; >+ } >+ if (inclState) { >+ EList list = thread.getThreadEvents(); >+ if (null != list && list.size() > 0) >+ name+= " (" + getEventName2((TRCThreadEvent)list.get(list.size() - 1)) + ")"; >+ } >+ return name; >+ } >+ >+ static public String getThreadClassName(TRCThread thread) { >+ String name = ""; >+ TRCClass cls = null; >+ TRCPackage pkg = null; >+ if (thread.getThreadObject() != null) { >+ cls = thread.getThreadObject().getIsA(); >+ } else if (thread.getInitialInvocations().size() > 0) { >+ cls = ((TRCMethodInvocation) thread.getInitialInvocations().get(0)).getMethod().getDefiningClass(); >+ } >+ if (cls != null) >+ pkg = cls.getPackage(); >+ if (cls != null && pkg != null) { >+ name = "".equals(pkg.getName()) ? cls.getName() : (pkg.getName() + "." + cls.getName()); >+ } >+ return name; >+ } >+ >+ static public String composeMethodName(TRCMethodInvocation method) { >+ TRCMethod m = method.getMethod(); >+ String name = ""; >+ name += m.getDefiningClass().getName(); >+ name += "."; >+ name += m.getName(); >+ name += m.getSignature(); >+ name += " [" + m.getCalls() + "]"; >+ return name; >+ } >+ >+ static public String getEventName(TRCThreadEvent event) { >+ if (event instanceof TRCThreadRunningEvent) { >+ return UIMessages._Running; >+ } else if (event instanceof TRCThreadSleepingEvent) { >+ return UIMessages._Sleeping; >+ } else if (event instanceof TRCThreadDeadLockEvent) { >+ return UIMessages._Deadlocked; >+ } else if (event instanceof TRCThreadWaitingForLockEvent) { >+ return UIMessages._Blocked; >+ } else if (event instanceof TRCThreadWaitingForObjectEvent) { >+ return UIMessages._Waiting; >+ } else if (event instanceof TRCThreadDeadEvent) { >+ return UIMessages._Stopped; >+ } >+ return UIMessages._Unknown; >+ } >+ >+ static public String getEventName2(TRCThreadEvent event) { >+ if (event instanceof TRCThreadRunningEvent) { >+ return UIMessages._running; >+ } else if (event instanceof TRCThreadSleepingEvent) { >+ return UIMessages._sleeping; >+ } else if (event instanceof TRCThreadDeadLockEvent) { >+ return UIMessages._deadlocked; >+ } else if (event instanceof TRCThreadWaitingForLockEvent) { >+ return UIMessages._blocked; >+ } else if (event instanceof TRCThreadWaitingForObjectEvent) { >+ return UIMessages._waiting; >+ } else if (event instanceof TRCThreadDeadEvent) { >+ return UIMessages._stopped; >+ } >+ return UIMessages._unknown; >+ } >+ >+ static public String composeEventName(TRCThreadEvent event) { >+ String name = event.getThread().getName(); >+ name += " [" + event.getThread().getGroupName() + "] (" + getEventName2(event); >+ if (event instanceof TRCThreadWaitingForObjectEvent) { >+ name += " timeout=" + ((TRCThreadWaitingForObjectEvent)event).getTimeout(); >+ } else if (event instanceof TRCThreadWaitingForLockEvent) { >+ TRCThread thread = ((TRCThreadWaitingForLockEvent)event).getLockingThread(); >+ if (null != thread) >+ name += " by thread=" + thread.getName(); >+ } >+ name += ")"; >+ return name; >+ } >+ >+ static public String composeMethodName(MethodDetails method) { >+ String name = ""; >+ if (method.name != null) >+ name += method.name; >+ if (method.signature != null) >+ name += method.signature; >+ if (method.line >= 0) >+ name += " line: " + method.line; >+ return name; >+ } >+ >+ static public Image getItemImage(Object obj) { >+ if (obj instanceof MethodDetails) { >+ if (((MethodDetails)obj).running) >+ return getImage(IMG_METHOD_RUNNING); >+ else >+ return getImage(IMG_METHOD); >+ } >+ if (obj instanceof TRCThread) { >+ EList list = ((TRCThread)obj).getThreadEvents(); >+ if (null != list && list.size() > 0) >+ obj = list.get(list.size() - 1); >+ else if (((TRCThread)obj).getStopTime() > 0) >+ return getImage(IMG_THREAD_STOPPED); >+ else >+ return getImage(IMG_THREAD_RUNNING); >+ } >+ if (obj instanceof TRCThreadEvent) { >+ if (obj instanceof TRCThreadDeadEvent) >+ return getImage(IMG_THREAD_STOPPED); >+ else if (obj instanceof TRCThreadRunningEvent) >+ return getImage(IMG_THREAD_RUNNING); >+ else >+ return getImage(IMG_THREAD_SUSPENDED); >+ } >+ return null; >+ } >+ >+ static public void setActionProperties(Action action, String context, >+ String attributeId) { >+ String strLevel = null; >+ Image icon = null; >+ IContextLabelFormatProvider clfp = ContextManager.getContextLabelFormatProvider(context >+ , attributeId, IContextLabelFormatProvider.MODE_VIEW_ACTION); >+ if (clfp != null) { >+ strLevel = clfp.getDisplayStringFromElement(attributeId, null, IContextLabelFormatProvider.MODE_VIEW_ACTION); >+ icon = clfp.getDisplayImageByElement(attributeId, null, IContextLabelFormatProvider.MODE_VIEW_ACTION); >+ } else { >+ strLevel = attributeId; >+ } >+ action.setText(strLevel); >+ action.setImageDescriptor(ImageDescriptor.createFromImage(icon)); >+ action.setDescription(strLevel); >+ action.setToolTipText(strLevel); >+ } >+ >+ static public Object[] getCallStack(TRCThreadEvent event) { >+ Object[] ret = _empty; >+ EList list = event.getAnnotations(); >+ TRCAnnotation callStackDumpMethods = null; >+ TRCAnnotation callStackDumpLineNumbers = null; >+ if (null != list) { >+ for (int i = 0; i < list.size(); i++) { >+ TRCAnnotation annotation = (TRCAnnotation) list.get(i); >+ if (annotation.getName().equals("callStackDumpMethods")) >+ callStackDumpMethods = annotation; >+ else if (annotation.getName().equals("callStackDumpLineNumbers")) >+ callStackDumpLineNumbers = annotation; >+ } >+ } >+ if (null != callStackDumpMethods) { >+ list = callStackDumpMethods.getValues(); >+ ret = new Object[list.size()]; >+ for (int i = 0; i < list.size(); i++) { >+ String name = list.get(i).toString(); >+ String sig = null; >+ int pos = name.indexOf('('); >+ if (pos >= 0) { >+ sig = name.substring(pos + 1); >+ name = name.substring(0, pos); >+ } >+ MethodDetails method = new MethodDetails(name, sig); >+ method.running = event instanceof TRCThreadRunningEvent; >+ ret[i] = method; >+ } >+ if (null != callStackDumpLineNumbers) { >+ list = callStackDumpLineNumbers.getValues(); >+ for (int i = 0; i < ret.length && i < list.size(); i++) { >+ ((MethodDetails)ret[i]).line = Integer.parseInt(list.get(i).toString()); >+ } >+ } >+ } >+ return ret; >+ } >+ >+ static public boolean canOpenSourceOnThisObject(EObject mofObj) { >+ ITraceSelection _model = UIPlugin.getDefault().getSelectionModel(mofObj); >+ if (_model.size() == 0 || _model.getFirstElement() == null) { >+ return false; >+ } >+ Object firstElement = _model.getFirstElement(); >+ if (firstElement instanceof TRCClass && >+ ((TRCClass)firstElement).getSourceInfo() != null && >+ ((TRCClass)firstElement).getSourceInfo().getLocation().length() > 0) { >+ return true; >+ } else if (firstElement instanceof TRCMethod) { >+ return true; >+ } >+ return false; >+ } >+ >+ /** >+ * Formats time in format: MM:SS:NNN >+ * @param v >+ * @return >+ */ >+ static public String formatTime(double v) { >+ StringBuffer str = new StringBuffer(); >+ boolean neg = v < 0; >+ if (neg) { >+ v = -v; >+ str.append('-'); >+ } >+ long sec = (long) v; >+ if (sec / 60 < 10) >+ str.append('0'); >+ str.append(sec / 60); >+ str.append(':'); >+ sec %= 60; >+ if (sec < 10) >+ str.append('0'); >+ str.append(sec); >+ str.append(':'); >+ long ms = (long) (v * 1000); >+ ms %= 1000; >+ if (ms < 10) >+ str.append("00"); >+ else if (ms < 100) >+ str.append('0'); >+ str.append(ms); >+ return str.toString(); >+ } >+ >+ static public int loadIntOption(String opt, int def, int min, int max) { >+ int val = TraceUIPlugin.getDefault().getPreferenceStore().getInt(opt); >+ if (0 == val) >+ val = def; >+ if (val < min) >+ val = min; >+ if (val > max) >+ val = max; >+ return val; >+ } >+ >+ static public void saveIntOption(String opt, int val) { >+ TraceUIPlugin.getDefault().getPreferenceStore().setValue(opt, val); >+ } >+ >+ static TRCThreadEvent getFirstEvent(TRCThread thread) { >+ EList list = thread.getThreadEvents(); >+ TRCThreadEvent event = null; >+ if (!list.isEmpty()) >+ event = (TRCThreadEvent) list.get(0); >+ return event; >+ } >+ >+ static TRCThreadEvent findEvent(TRCThread thread, double time, int n) { >+ EList list = thread.getThreadEvents(); >+ Iterator it = list.iterator(); >+ TRCThreadEvent event = null; >+ TRCThreadEvent prevEvent = null; >+ TRCThreadEvent nextEvent = null; >+ if (it.hasNext()) { >+ event = (TRCThreadEvent) it.next(); >+ double currTime = event.getTime(); >+ if (time < currTime) { >+ if (1 != n) >+ event = null; >+ return event; >+ } >+ while (it.hasNext()) { >+ nextEvent = (TRCThreadEvent) it.next(); >+ double nextTime = nextEvent.getTime(); >+ if (currTime <= time && time < nextTime) { >+ if (1 == n) >+ event = nextEvent; >+ else if (-1 == n) >+ event = prevEvent; >+ return event; >+ } >+ prevEvent = event; >+ event = nextEvent; >+ } >+ } >+ if (1 == n) >+ event = null; >+ else if (-1 == n) >+ event = prevEvent; >+ return event; >+ } >+ >+ static public TRCPackage getPackage(Object element) { >+ if (element instanceof TRCPackage) >+ return (TRCPackage) element; >+ if (element instanceof TRCClass) >+ return ((TRCClass) element).getPackage(); >+ return null; >+ } > } >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ITimeDataProvider.java >=================================================================== >RCS file: /cvsroot/tptp/trace/org.eclipse.tptp.trace.jvmti.client/src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ITimeDataProvider.java,v >retrieving revision 1.1 >diff -u -r1.1 ITimeDataProvider.java >--- src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ITimeDataProvider.java 13 Feb 2007 20:44:49 -0000 1.1 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ITimeDataProvider.java 27 Feb 2007 18:03:30 -0000 >@@ -40,5 +40,7 @@ > > int getNameSpace(); > >+ void setNameSpace(int width); >+ > int getTimeSpace(); > } >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockedTimeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockedTimeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockedTimeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockedTimeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class ThreadDeadlockedTimeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_DEADLOCKED_TIME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Double) >+ return Utils.formatTime(((Double)value).doubleValue()); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadsTipHandler.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadsTipHandler.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadsTipHandler.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadsTipHandler.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,183 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Vitaly A. Provodin, Intel - Initial API and implementation >+ * >+ * $Id: >+ *****************************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.widgets; >+ >+import org.eclipse.hyades.models.trace.TRCObject; >+import org.eclipse.hyades.models.trace.TRCThread; >+import org.eclipse.hyades.models.trace.TRCThreadEvent; >+import org.eclipse.hyades.models.trace.TRCThreadWaitingForLockEvent; >+import org.eclipse.hyades.models.trace.TRCThreadWaitingForObjectEvent; >+import org.eclipse.hyades.trace.views.internal.TraceUIMessages; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.MouseAdapter; >+import org.eclipse.swt.events.MouseEvent; >+import org.eclipse.swt.events.MouseTrackAdapter; >+import org.eclipse.swt.graphics.Point; >+import org.eclipse.swt.graphics.Rectangle; >+import org.eclipse.swt.layout.GridData; >+import org.eclipse.swt.layout.GridLayout; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.swt.widgets.Display; >+import org.eclipse.swt.widgets.Shell; >+import org.eclipse.swt.widgets.Table; >+import org.eclipse.swt.widgets.TableColumn; >+import org.eclipse.swt.widgets.TableItem; >+import org.eclipse.swt.widgets.Widget; >+ >+public class ThreadsTipHandler { >+ >+ private Shell tipShell; >+ private Table tipTable; >+ private Item tipItem; >+ private Point tipPosition; >+ >+ public ThreadsTipHandler(Shell parent) { >+ final Display display = parent.getDisplay(); >+ >+ tipShell = new Shell(parent, SWT.ON_TOP | SWT.TOOL); >+ GridLayout gridLayout = new GridLayout(); >+ gridLayout.numColumns = 2; >+ gridLayout.marginWidth = 2; >+ gridLayout.marginHeight = 2; >+ tipShell.setLayout(gridLayout); >+ tipShell.setBackground(display >+ .getSystemColor(SWT.COLOR_INFO_BACKGROUND)); >+ >+ tipTable = new Table(tipShell, SWT.NONE); >+ tipTable.setForeground(display >+ .getSystemColor(SWT.COLOR_INFO_FOREGROUND)); >+ tipTable.setBackground(display >+ .getSystemColor(SWT.COLOR_INFO_BACKGROUND)); >+ tipTable.setHeaderVisible(false); >+ tipTable.setLinesVisible(false); >+ >+ tipTable.setLayoutData(new GridData(GridData.FILL_HORIZONTAL >+ | GridData.VERTICAL_ALIGN_CENTER)); >+ } >+ >+ public void activateHoverHelp(final Control control) { >+ control.addMouseListener(new MouseAdapter() { >+ public void mouseDown(MouseEvent e) { >+ if (tipShell.isVisible()) >+ tipShell.setVisible(false); >+ } >+ }); >+ >+ control.addMouseTrackListener(new MouseTrackAdapter() { >+ public void mouseExit(MouseEvent e) { >+ if (tipShell.isVisible()) >+ tipShell.setVisible(false); >+ tipItem = null; >+ >+ } >+ >+ private void addItem(String name, String value) { >+ TableItem line = new TableItem(tipTable, SWT.NONE); >+ line.setText(0, name); >+ line.setText(1, value); >+ } >+ >+ private void fillValues(Point pt, >+ ThreadStatesCtrl threadStates, Item item) { >+ if (item instanceof ThreadItem) { >+ TRCThread thrd = ((ThreadItem) item)._thread; >+ TRCThreadEvent threadEvent = Utils.findEvent( >+ thrd, threadStates.hitTimeTest(pt.x, pt.y), 0); >+ TRCThreadEvent nextEvent = Utils.findEvent(thrd, >+ threadStates.hitTimeTest(pt.x, pt.y), 1); >+ // thread name >+ addItem(TraceUIMessages._203, thrd.getName()); >+ // class name >+ addItem(TraceUIMessages._198, Utils.getThreadClassName(thrd)); >+ // thread state >+ addItem(TraceUIMessages._255, Utils.getEventName(threadEvent)); >+ >+ TRCObject obj; >+ if (threadEvent instanceof TRCThreadWaitingForObjectEvent) { >+ TRCThreadWaitingForObjectEvent event = (TRCThreadWaitingForObjectEvent) threadEvent; >+ obj = event.getObjectWaitingFor(); >+ addItem("object for which the thread wait", >+ obj != null ? obj.getIsA().getName() : "null"); >+ addItem("timeout", "" + event.getTimeout()); >+ >+ } else if (threadEvent instanceof TRCThreadWaitingForLockEvent) { >+ TRCThreadWaitingForLockEvent event = (TRCThreadWaitingForLockEvent) threadEvent; >+ TRCThread thread = event.getLockingThread(); >+ if (thread != null) >+ addItem("locking thread", thread.getName() >+ + "[" + Utils.getThreadClassName(thread) + "]"); >+ obj = event.getLockedObject(); >+ addItem("locked object", obj != null ? obj >+ .toString() : "null"); >+ >+ } >+ >+ // start time >+ double startTime = threadEvent == null ? thrd >+ .getStartTime() : threadEvent.getTime(); >+ double stopTime = (nextEvent == null ? thrd.getStopTime() >+ : nextEvent.getTime()); >+ double duration = stopTime - startTime; >+ addItem(TraceUIMessages._253, Utils.formatTime(startTime)); >+ addItem("Duration", duration > 0 ? Utils.formatTime(duration) : "?"); >+ >+ } else if (item instanceof GroupItem) { >+ addItem("Group name", item.toString()); >+ addItem("Number of threads", "" >+ + ((GroupItem) item)._threads.size()); >+ } >+ } >+ >+ public void mouseHover(MouseEvent event) { >+ Point pt = new Point(event.x, event.y); >+ Widget widget = event.widget; >+ Item item = null; >+ if (widget instanceof ThreadStatesCtrl) { >+ ThreadStatesCtrl threadStates = (ThreadStatesCtrl) widget; >+ item = (Item) threadStates.getItem(pt); >+ tipTable.remove(0, tipTable.getItemCount() - 1); >+ new TableColumn(tipTable, SWT.NONE); >+ new TableColumn(tipTable, SWT.NONE); >+ fillValues(pt, threadStates, item); >+ tipTable.getColumn(0).setWidth(100); >+ tipTable.getColumn(1).pack(); >+ tipTable.setSize(tipTable.computeSize(SWT.DEFAULT, 200)); >+ tipShell.pack(); >+ } else if (widget == null) { >+ tipShell.setVisible(false); >+ tipItem = null; >+ return; >+ } >+ if (item == tipItem) >+ return; >+ tipItem = item; >+ tipPosition = control.toDisplay(pt); >+ tipShell.pack(); >+ setHoverLocation(tipShell, tipPosition); >+ tipShell.setVisible(true); >+ } >+ }); >+ } >+ >+ private void setHoverLocation(Shell shell, Point position) { >+ Rectangle displayBounds = shell.getDisplay().getBounds(); >+ Rectangle shellBounds = shell.getBounds(); >+ shellBounds.x = Math.max(Math.min(position.x, displayBounds.width >+ - shellBounds.width), 0); >+ shellBounds.y = Math.max(Math.min(position.y + 16, displayBounds.height >+ - shellBounds.height), 0); >+ shell.setBounds(shellBounds); >+ } >+ >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStartTimeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStartTimeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStartTimeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStartTimeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class ThreadStartTimeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_START_TIME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Double) >+ return Utils.formatTime(((Double)value).doubleValue()); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadClassNameLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadClassNameLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadClassNameLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadClassNameLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,43 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.models.trace.TRCThread; >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class ThreadClassNameLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_CLASS_NAME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (element instanceof TRCThread) >+ return Utils.getThreadClassName((TRCThread)element); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/LineNumberLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/LineNumberLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/LineNumberLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/LineNumberLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,39 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class LineNumberLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._LINE_NUMBER; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) >+ return "placeholder (Line Number)"; >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveSizeLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveSizeLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveSizeLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveSizeLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,67 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCMethod; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.trace.ui.internal.util.TString; >+import org.eclipse.hyades.trace.views.internal.TracePluginImages; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ActiveSizeColumnLabel; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class LiveSizeLabelAdapter extends ActiveSizeColumnLabel { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return ""; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ if (!info.isDeltaColumn) { >+ if (info.showPercentage) >+ return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max); >+ else >+ return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ } else { >+ if (element instanceof TRCPackage >+ || element instanceof TRCClass >+ || element instanceof TRCMethod >+ || element instanceof MethodCallDetails) >+ return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ else >+ return ""; >+ } >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ if (!info.isDeltaColumn) { >+ Number delta = getDelta(element, info); >+ double d = delta != null ? delta.doubleValue() : 0; >+ if (d < 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN); >+ if (d > 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP); >+ else { >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return null; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ } >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockCountLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockCountLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockCountLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockCountLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,41 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class ThreadDeadlockCountLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_DEADLOCK_COUNT; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Integer) >+ return value.toString(); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockedTimeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockedTimeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockedTimeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockedTimeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,39 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class ThreadBlockedTimeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_BLOCKED_TIME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) >+ return "placeholder (Avg. Age)"; >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadNameLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadNameLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadNameLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadNameLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.models.trace.TRCThread; >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class ThreadNameLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_NAME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (element instanceof TRCThread) >+ return ((TRCThread)element).getName(); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextProvider.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextProvider.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,128 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.ArrayList; >+import java.util.HashMap; >+import java.util.Map; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.BasicContextProvider; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+ >+public class TIContextProvider extends BasicContextProvider implements TIContextAttributes { >+ >+ private Map _contextLabelFormatProviders; >+ private ArrayList _supportAttributes; >+ static private TIContextProvider _instance; >+ >+ static public TIContextProvider instance() { >+ if (null == _instance) >+ _instance = new TIContextProvider(); >+ return _instance; >+ } >+ >+ public TIContextProvider() { >+ _instance = this; >+ _contextLabelFormatProviders = new HashMap(); >+ _supportAttributes = new ArrayList(); >+ _supportAttributes.add(METHOD_LINE_NUMBER); >+ _supportAttributes.add(PACKAGE_AVG_AGE); >+ _supportAttributes.add(PACKAGE_GENERATIONS); >+ _supportAttributes.add(CLASS_AVG_AGE); >+ _supportAttributes.add(CLASS_GENERATIONS); >+ _supportAttributes.add(CALL_SITE_AVG_AGE); >+ _supportAttributes.add(CALL_SITE_GENERATIONS); >+ _supportAttributes.add(THREAD_NAME); >+ _supportAttributes.add(THREAD_CLASS_NAME); >+ _supportAttributes.add(THREAD_START_TIME); >+ _supportAttributes.add(THREAD_STOP_TIME); >+ _supportAttributes.add(THREAD_STATE); >+ _supportAttributes.add(THREAD_RUNNING_TIME); >+ _supportAttributes.add(THREAD_SLEEPING_TIME); >+ _supportAttributes.add(THREAD_WAITING_TIME); >+ _supportAttributes.add(THREAD_BLOCKED_TIME); >+ _supportAttributes.add(THREAD_DEADLOCKED_TIME); >+ _supportAttributes.add(THREAD_BLOCK_COUNT); >+ _supportAttributes.add(THREAD_DEADLOCK_COUNT); >+ } >+ >+ public String getBaseProvider() { >+ //return "org.eclipse.hyades.trace.views.internal.context.java.BasicContextProvider"; >+ return null; >+ } >+ >+ public IContextLabelFormatProvider getContextLabelFormatProvider(String key) { >+ IContextLabelFormatProvider result = (IContextLabelFormatProvider) _contextLabelFormatProviders.get(key); >+ if (result != null) { >+ return result; >+ } else if (_supportAttributes.contains(key)) { >+ if (key.equals(METHOD_LINE_NUMBER)) >+ result = new LineNumberLP(); >+ else if (key.equals(PACKAGE_AVG_AGE) || key.equals(CLASS_AVG_AGE) || key.equals(CALL_SITE_AVG_AGE)) >+ result = new AverageAgeLP(); >+ else if (key.equals(PACKAGE_GENERATIONS) || key.equals(CLASS_GENERATIONS) || key.equals(CALL_SITE_GENERATIONS)) >+ result = new GenerationsLP(); >+ else if (key.equals(IContextAttributes.THREAD_NAME)) >+ result = new ThreadNameLP(); >+ else if (key.equals(IContextAttributes.THREAD_CLASS_NAME)) >+ result = new ThreadClassNameLP(); >+ else if (key.equals(IContextAttributes.THREAD_START_TIME)) >+ result = new ThreadStartTimeLP(); >+ else if (key.equals(IContextAttributes.THREAD_STOP_TIME)) >+ result = new ThreadStopTimeLP(); >+ else if (key.equals(IContextAttributes.THREAD_STATE)) >+ result = new ThreadStateLP(); >+ else if (key.equals(IContextAttributes.THREAD_RUNNING_TIME)) >+ result = new ThreadRunningTimeLP(); >+ else if (key.equals(IContextAttributes.THREAD_SLEEPING_TIME)) >+ result = new ThreadSleepingTimeLP(); >+ else if (key.equals(IContextAttributes.THREAD_WAITING_TIME)) >+ result = new ThreadWaitingTimeLP(); >+ else if (key.equals(IContextAttributes.THREAD_BLOCKED_TIME)) >+ result = new ThreadBlockedTimeLP(); >+ else if (key.equals(IContextAttributes.THREAD_DEADLOCKED_TIME)) >+ result = new ThreadDeadlockedTimeLP(); >+ else if (key.equals(IContextAttributes.THREAD_BLOCK_COUNT)) >+ result = new ThreadBlockCountLP(); >+ else if (key.equals(IContextAttributes.THREAD_DEADLOCK_COUNT)) >+ result = new ThreadDeadlockCountLP(); >+ } else { >+ result = super.getContextLabelFormatProvider(key); >+ } >+ if (result != null) { >+ _contextLabelFormatProviders.put(key, result); >+ } >+ return result; >+ } >+ >+ public String getDescription() { >+ return null; >+ } >+ >+ public String getName() { >+ return "JVMTI profiler context provider"; >+ } >+ >+ public String[] getSupportAttributes() { >+ String[] supportAttributes0 = super.getSupportAttributes(); >+ String[] supportAttributes = new String[supportAttributes0.length + _supportAttributes.size()]; >+ System.arraycopy(supportAttributes0, 0, supportAttributes, 0, supportAttributes0.length); >+ for (int i = supportAttributes0.length; i < supportAttributes.length; i++) { >+ supportAttributes[i] = (String) _supportAttributes.get(i - supportAttributes0.length); >+ } >+ return supportAttributes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockCountLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockCountLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockCountLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockCountLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,39 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class ThreadBlockCountLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_BLOCK_COUNT; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) >+ return "placeholder (Avg. Age)"; >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStateLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStateLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStateLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStateLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,41 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class ThreadStateLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_STATE; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof String) >+ return (String)value; >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseMemoryStatisticView.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseMemoryStatisticView.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseMemoryStatisticView.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseMemoryStatisticView.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,336 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views; >+ >+import java.util.Hashtable; >+import java.util.Iterator; >+import java.util.Map; >+ >+import org.eclipse.emf.common.util.EList; >+import org.eclipse.hyades.models.hierarchy.extensions.SimpleSearchQuery; >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCFullTraceObject; >+import org.eclipse.hyades.models.trace.TRCGCEvent; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.models.trace.impl.TRCClassImpl; >+import org.eclipse.hyades.models.trace.impl.TRCPackageImpl; >+import org.eclipse.hyades.models.trace.impl.TRCClassImpl.TRCClassSnapshot; >+import org.eclipse.hyades.models.trace.impl.TRCPackageImpl.TRCPackageSnapshot; >+import org.eclipse.hyades.trace.ui.TraceViewerPage; >+import org.eclipse.hyades.trace.ui.internal.util.PerftraceUtil; >+import org.eclipse.hyades.trace.views.adapter.internal.DynamicFilter; >+import org.eclipse.hyades.trace.views.internal.FilteringUtil; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >+import org.eclipse.hyades.trace.views.util.internal.ColumnData; >+import org.eclipse.hyades.trace.views.util.internal.StatisticTableColumnInfo; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextUpdaterHelper; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.LiveSizeLabelAdapter; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.AvgAgeLabelAdapter; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ClassPackageNameLabelAdapter; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.LiveInstancesLabelAdapter; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.PackageNameLabelAdapter; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.TotalInstancesLabelAdapter; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.TotalSizeLabelAdapter; >+ >+public class BaseMemoryStatisticView extends BaseStatisticView { >+ >+ static public final int CLASS_MODE = 0; // CM >+ static public final int PACKAGE_MODE = 1;// PM >+ // class mode >+ static public final int CM_COL_NAME = 0; >+ static public final int CM_COL_PACKAGE_NAME = 1; >+ static public final int CM_COL_LIVE_INST = 2; >+ static public final int CM_COL_LIVE_SIZE = 3; >+ static public final int CM_COL_TOTAL_INST = 4; >+ static public final int CM_COL_TOTAL_SIZE = 5; >+ static public final int CM_COL_AVG_AGE = 6; >+ //static public final int CM_COL_GENERATIONS = 7; >+ static public final int CM_COL_NUM = 7; >+ // package mode >+ static public final int PM_COL_NAME = 0; >+ static public final int PM_COL_LIVE_INST = 1; >+ static public final int PM_COL_LIVE_SIZE = 2; >+ static public final int PM_COL_TOTAL_INST = 3; >+ static public final int PM_COL_TOTAL_SIZE = 4; >+ static public final int PM_COL_AVG_AGE = 5; >+ //static public final int PM_COL_GENERATIONS = 6; >+ static public final int PM_COL_NUM = 6; >+ >+ protected int _totalAge; >+ protected int _totalGenerations; >+ >+ static private int V = ColumnData.IS_VISIBLE; >+ static private int D = ColumnData.SUPPORTS_DELTA; >+ >+ private int _viewMode = CLASS_MODE; >+ private TRCPackageSnapshot packageSnapshot = new TRCPackageImpl.TRCPackageSnapshot(); >+ private TRCClassSnapshot classSnapshot = new TRCClassImpl.TRCClassSnapshot(); >+ private ColumnLabelAdapter _packageModeCols[] = new ColumnLabelAdapter[PM_COL_NUM]; >+ private ColumnLabelAdapter _classModeCols[] = new ColumnLabelAdapter[CM_COL_NUM]; >+ private Map _ageMap = new Hashtable(); >+ >+ public BaseMemoryStatisticView(Composite parent, TraceViewerPage page) { >+ super(parent, page); >+ createColumnsLabelProviders(); >+ } >+ >+ public int getViewMode() { >+ return _viewMode; >+ } >+ >+ public void setViewMode(int viewMode) { >+ if (PACKAGE_MODE == viewMode) >+ viewMode = PACKAGE_MODE; >+ else >+ viewMode = CLASS_MODE; >+ if (viewMode == _viewMode) >+ return; >+ _viewMode = viewMode; >+ redrawTable(); >+ } >+ >+ ColumnLabelAdapter getColumnsLabelProvider(int col) { >+ if (PACKAGE_MODE == _viewMode) >+ return _packageModeCols[col]; >+ else >+ return _classModeCols[col]; >+ } >+ >+ private void createColumnsLabelProviders() { >+ _classModeCols[CM_COL_NAME] = new ClassPackageNameLabelAdapter(); >+ _classModeCols[CM_COL_PACKAGE_NAME] = new PackageNameLabelAdapter(); >+ _classModeCols[CM_COL_LIVE_INST] = new LiveInstancesLabelAdapter(); >+ _classModeCols[CM_COL_LIVE_SIZE] = new LiveSizeLabelAdapter(); >+ _classModeCols[CM_COL_TOTAL_INST] = new TotalInstancesLabelAdapter(); >+ _classModeCols[CM_COL_TOTAL_SIZE] = new TotalSizeLabelAdapter(); >+ _classModeCols[CM_COL_AVG_AGE] = new AvgAgeLabelAdapter(_ageMap); >+ //_classModeCols[CM_COL_GENERATIONS] = new GenerationsColumnLabel(); >+ >+ _packageModeCols[PM_COL_NAME] = _classModeCols[CM_COL_NAME]; >+ _packageModeCols[PM_COL_LIVE_INST] = _classModeCols[CM_COL_LIVE_INST]; >+ _packageModeCols[PM_COL_LIVE_SIZE] = _classModeCols[CM_COL_LIVE_SIZE]; >+ _packageModeCols[PM_COL_TOTAL_INST] = _classModeCols[CM_COL_TOTAL_INST]; >+ _packageModeCols[PM_COL_TOTAL_SIZE] = _classModeCols[CM_COL_TOTAL_SIZE]; >+ _packageModeCols[PM_COL_AVG_AGE] = _classModeCols[CM_COL_AVG_AGE]; >+ //_packageModeCols[PM_COL_GENERATIONS] = _classModeCols[CM_COL_GENERATIONS]; >+ >+ for (int i = 0; i < CM_COL_NUM; i++) { >+ if (i != CM_COL_NAME && i != CM_COL_PACKAGE_NAME && null != _classModeCols[i]) >+ _classModeCols[i].initialize(packageSnapshot, classSnapshot, null); >+ } >+ } >+ >+ protected ColumnDisplayInfo getColumnDisplayInfo(ColumnLabelAdapter col, boolean isDeltaColumn) { >+ if (col == _classModeCols[CM_COL_PACKAGE_NAME]) >+ return TIContextUpdaterHelper.updatePackageName(col, _page.getMOFObject()); >+ else if (col == _classModeCols[CM_COL_TOTAL_INST]) >+ return TIContextUpdaterHelper.updateTotalInstances(col, isDeltaColumn, isShowPercent(), _totalInst); >+ else if (col == _classModeCols[CM_COL_LIVE_INST]) >+ return TIContextUpdaterHelper.updateLiveInstances(col, isDeltaColumn, isShowPercent(), _activeInst); >+ else if (col == _classModeCols[CM_COL_TOTAL_SIZE]) >+ return TIContextUpdaterHelper.updateTotalSize(col, isDeltaColumn, isShowPercent(), _totalSize); >+ else if (col == _classModeCols[CM_COL_LIVE_SIZE]) >+ return TIContextUpdaterHelper.updateActiveSize(col, isDeltaColumn, isShowPercent(), _activeSize); >+ else if (col == _classModeCols[CM_COL_AVG_AGE]) >+ return TIContextUpdaterHelper.updateAverageAge(col, isDeltaColumn, isShowPercent(), _totalAge); >+ //else if (col == _classModeCols[CM_COL_GENERATIONS]) >+ // return TIContextUpdaterHelper.updateAverageAge(col, isDeltaColumn, isShowPercent(), _totalGenerations); >+ else >+ return super.getColumnDisplayInfo(col, isDeltaColumn); >+ } >+ >+ protected void showPercentUpdate() { >+ if (isShowPercent()) { >+ _totalInst = PerftraceUtil.getTotalInstances(_page.getMOFObject()); >+ if (_totalInst < 1) >+ _totalInst = 1; >+ _activeInst = PerftraceUtil.getActiveInstances(_page.getMOFObject()); >+ if (_activeInst < 1) >+ _activeInst = 1; >+ _totalSize = PerftraceUtil.getTotalSize(_page.getMOFObject()); >+ if (_totalSize < 1) >+ _totalSize = 1; >+ _activeSize = PerftraceUtil.getActiveSize(_page.getMOFObject()); >+ if (_activeSize < 1) >+ _activeSize = 1; >+ _collectedInst = PerftraceUtil.getTotalCollectedInstances(_page.getMOFObject()); >+ if (_collectedInst < 1) >+ _collectedInst = 1; >+ //TODO _totalAge = get total age >+ if (_totalAge < 1) >+ _totalAge = 1; >+ } >+ } >+ >+ protected String getColumnsPreferencesKey() { >+ if (PACKAGE_MODE == _viewMode) >+ return PREFERENCE_KEY_PREFIX + "MemStatsPack12"; >+ else >+ return PREFERENCE_KEY_PREFIX + "MemStatsClass12"; >+ } >+ >+ protected String getViewTypeStr() { >+ return org.eclipse.hyades.trace.views.adapter.internal.TraceConstants.MEMORY_STATS_VIEW; >+ } >+ >+ protected String getDefaultColumnsTemplate() { >+ if (PACKAGE_MODE == _viewMode) >+ return getPackageModeColumnsTemplate(); >+ else >+ return getClassModeColumnsTemplate(); >+ } >+ >+ public String getColumnText(Object element, int columnIndex) { >+ StatisticTableColumnInfo info = StatisticTableColumnInfo.getStatisticTableColumnInfo(getTree().getColumn(columnIndex)); >+ int pos = info.getColumnData().getInitalPos(); >+ String label = "placeholder(view)"; >+ ColumnLabelAdapter columnAdapter = getColumnsLabelProvider(pos); >+ if (null != columnAdapter) >+ label = getElementColumnText(element, columnAdapter, info.isDeltaColumn()); >+ return label; >+ } >+ >+ public Image getColumnImage(Object element, int columnIndex) { >+ StatisticTableColumnInfo info = StatisticTableColumnInfo.getStatisticTableColumnInfo(getTree().getColumn(columnIndex)); >+ int pos = info.getColumnData().getInitalPos(); >+ Image image = null; >+ ColumnLabelAdapter columnAdapter = getColumnsLabelProvider(pos); >+ if (null != columnAdapter) >+ image = getElementColumnImage(element, columnAdapter, info.isDeltaColumn()); >+ return image; >+ } >+ >+ protected StatisticSorter getViewerSorterInstance() { >+ return new StatisticSorter() { >+ public int compare(Viewer viewer, Object e1, Object e2) { >+ ColumnLabelAdapter columnAdapter = getColumnsLabelProvider(_pos); >+ int ret = 0; >+ if (null != columnAdapter) >+ ret = _sortSequence * compareElements(e1, e2, columnAdapter, _info.isDeltaColumn()); >+ return ret; >+ } >+ }; >+ } >+ >+ protected String getClassModeColumnsTemplate() { >+ return >+ IContextAttributes.THREAD_CLASS_NAME + ":" + CM_COL_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | V | ColumnData.NONMOVABLE) + ":left:150," >+ + IContextAttributes.PACKAGE_NAME + ":" + CM_COL_PACKAGE_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | V | ColumnData.NONMOVABLE) + ":left:120," >+ + IContextAttributes.CLASS_LIVE_INST + ":" + CM_COL_LIVE_INST + ":" + String.valueOf(V | D) + ":right:80," >+ + IContextAttributes.CLASS_ACTIVE_SIZE + ":" + CM_COL_LIVE_SIZE + ":" + String.valueOf(V | D) + ":right:80," >+ + IContextAttributes.CLASS_TOTAL_INST + ":" + CM_COL_TOTAL_INST + ":" + String.valueOf(V | D) + ":right:80," >+ + IContextAttributes.CLASS_TOTAL_SIZE + ":" + CM_COL_TOTAL_SIZE + ":" + String.valueOf(V | D) + ":right:80," >+ + TIContextAttributes.CLASS_AVG_AGE + ":" + CM_COL_AVG_AGE + ":" + String.valueOf(V | D) + ":right:80" >+ //+ TIContextAttributes.CLASS_GENERATIONS + ":" + CM_COL_GENERATIONS + ":" + String.valueOf(V | D) + ":right:80" >+ ; >+ } >+ >+ protected String getPackageModeColumnsTemplate() { >+ return >+ IContextAttributes.PACKAGE_NAME + ":" + PM_COL_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | V | ColumnData.NONMOVABLE) + ":left:120," >+ + IContextAttributes.PACKAGE_LIVE_INST + ":" + PM_COL_LIVE_INST + ":" + String.valueOf(V | D) + ":right:80," >+ + IContextAttributes.PACKAGE_ACTIVE_SIZE + ":" + PM_COL_LIVE_SIZE + ":" + String.valueOf(V | D) + ":right:80," >+ + IContextAttributes.PACKAGE_TOTAL_INST + ":" + PM_COL_TOTAL_INST + ":" + String.valueOf(V | D) + ":right:80," >+ + IContextAttributes.PACKAGE_TOTAL_SIZE + ":" + PM_COL_TOTAL_SIZE + ":" + String.valueOf(V | D) + ":right:80," >+ + TIContextAttributes.PACKAGE_AVG_AGE + ":" + PM_COL_AVG_AGE + ":" + String.valueOf(V | D) + ":right:80" >+ //+ TIContextAttributes.PACKAGE_GENERATIONS + ":" + PM_COL_GENERATIONS + ":" + String.valueOf(V | D) + ":right:80" >+ ; >+ } >+ >+ public Object[] getElements(Object inputElement) { >+ Object ret[] = _empty; >+ SimpleSearchQuery currentFilter = getCurrentFilter(); >+ if (DynamicFilter.containsDynamicFilters(currentFilter)) { >+ currentFilter = DynamicFilter.updateDynamicFilters(currentFilter, _page.getMOFObject()); >+ } >+ if (PACKAGE_MODE == _viewMode) { >+ ret = FilteringUtil.getFilteredPackages(currentFilter, FilteringUtil.getProcessList(_page.getMOFObject())).toArray(); >+ } >+ else if (CLASS_MODE == _viewMode) { >+ ret = FilteringUtil.getFilteredClasses(currentFilter, FilteringUtil.getProcessList(_page.getMOFObject())).toArray(); >+ updateAgeInfo(ret); >+ } >+ return ret; >+ } >+ >+ public boolean hasChildren(Object element) { >+ boolean ret = false; >+ if (FilteringUtil.USE_ENGINE_FOR_HAS_CHILDREN) >+ ret = getChildren(element).length > 0; >+ else if (element instanceof TRCPackage) >+ ret = true; >+ return ret; >+ } >+ >+ public Object[] getChildren(Object parentElement) { >+ Object ret[] = _empty; >+ if (parentElement instanceof TRCPackage) { >+ ret = FilteringUtil.getFilteredClasses(getCurrentFilter(), (TRCPackage)parentElement).toArray(); >+ } >+ return ret; >+ } >+ >+ int getObjAge(TRCFullTraceObject obj, EList listGC) { >+ int age = 0; >+ double t0 = obj.getCreateTime(); >+ double t1 = obj.getCollectTime(); >+ Iterator it = listGC.iterator(); >+ while (it.hasNext()) { >+ TRCGCEvent gcEvent = (TRCGCEvent) it.next(); >+ double time = gcEvent.getTime(); >+ if (time <= t0) >+ continue; >+ if (t1 > 0 && time >= t1) >+ break; >+ age++; >+ } >+ return age; >+ } >+ >+ void updateAgeInfo(Object arr[]) { >+ _ageMap.clear(); >+ for (int i = 0; i < arr.length; i++) { >+ if (arr[i] instanceof TRCClass) { >+ TRCClass cls = (TRCClass) arr[i]; >+ AgeInfo ageInfo = new AgeInfo(); >+ EList listGC = cls.getPackage().getProcess().getGcEvents(); >+ if (null == listGC || listGC.size() == 0) >+ return; >+ EList list = cls.getObjects(); >+ int len = list.size(); >+ for (int j = 0; j < len; j++) { >+ Object obj = list.get(j); >+ if (obj instanceof TRCFullTraceObject ) { >+ int age = getObjAge((TRCFullTraceObject)obj, listGC); >+ ageInfo.sumAges += age; >+ ageInfo.objCount++; >+ } >+ } >+ _ageMap.put(cls, ageInfo); >+ } >+ } >+ } >+ >+ static public class AgeInfo { >+ public int sumAges; >+ public int objCount; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextUpdaterHelper.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextUpdaterHelper.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextUpdaterHelper.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextUpdaterHelper.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,40 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+ >+public class TIContextUpdaterHelper extends ContextUpdaterHelper { >+ >+ public static ColumnDisplayInfo updateAverageAge(ColumnLabelAdapter col, boolean isDeltaColumn, boolean showPercent, double totalAge) >+ { >+ ColumnDisplayInfo info = col.getColumnDisplayInfo(); >+ info.isDeltaColumn = isDeltaColumn; >+ info.showPercentage = showPercent; >+ info.max = totalAge; >+ return info; >+ } >+ >+ public static ColumnDisplayInfo updateGenerations(ColumnLabelAdapter col, boolean isDeltaColumn, boolean showPercent, double totalGenerations) >+ { >+ ColumnDisplayInfo info = col.getColumnDisplayInfo(); >+ info.isDeltaColumn = isDeltaColumn; >+ info.showPercentage = showPercent; >+ info.max = totalGenerations; >+ return info; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisViewer.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisViewer.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisViewer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisViewer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,219 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views; >+ >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.trace.ui.FilterTraceViewer; >+import org.eclipse.hyades.trace.ui.TraceViewerPage; >+import org.eclipse.hyades.trace.ui.UIPlugin; >+import org.eclipse.hyades.trace.views.actions.internal.ContextSelectionMenuListener; >+import org.eclipse.hyades.trace.views.adapter.internal.IContextViewer; >+import org.eclipse.hyades.trace.views.internal.TracePluginImages; >+import org.eclipse.hyades.trace.views.internal.TraceUIMessages; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.hyades.trace.views.util.internal.OpenSource; >+import org.eclipse.hyades.ui.filters.IFilterScopes; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+import org.eclipse.jface.action.Action; >+import org.eclipse.jface.action.IMenuManager; >+import org.eclipse.jface.action.IToolBarManager; >+import org.eclipse.swt.widgets.Menu; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+import org.eclipse.ui.IActionBars; >+ >+public class MemoryAnalysisViewer extends FilterTraceViewer implements IContextViewer { >+ >+ Action _viewPackage; >+ Action _viewClass; >+ Action _openSource; >+ Action _chooseColumns; >+ Action _sortByColumn; >+ Action _percentMode; >+ Action _deltaColumns; >+ Menu _contextMenu; >+ private String _context; >+ private boolean _contextChanged; >+ private ContextSelectionMenuListener _contextSelectionMenuListener; >+ >+ public TraceViewerPage createPage(EObject mofObject) { >+ return new MemoryAnalysisPage(mofObject, this); >+ } >+ >+ public void dispose() { >+ if (_contextMenu != null) >+ _contextMenu.dispose(); >+ super.dispose(); >+ } >+ >+ public String getViewTitle() { >+ return UIMessages.MEM_ANALYSIS_TITLE; >+ } >+ >+ public boolean contextChanged() { >+ return _contextChanged; >+ } >+ >+ public ContextSelectionMenuListener getContextSelectionMenuListener() { >+ if (_contextSelectionMenuListener == null) >+ _contextSelectionMenuListener = new ContextSelectionMenuListener(); >+ return _contextSelectionMenuListener; >+ } >+ >+ public String getSelectedContext() { >+ return _context; >+ } >+ >+ public void setSelectedContext(String context) { >+ setSelectedContext(context, true); >+ } >+ >+ public void setSelectedContext(String context, boolean refresh) { >+ if (context == null) >+ _contextChanged = _context != null; >+ else >+ _contextChanged = !context.equals(_context); >+ _context = context; >+ if (_contextChanged && refresh && getCurrentPage() != null) >+ ((TraceViewerPage) getCurrentPage()).refreshPage(); >+ } >+ >+ public void updateContext() { >+ ContextUpdaterHelper.setCurrentFocusContextLanguage(getSelectedContext()); >+ _contextChanged = false; >+ } >+ >+ public void filterUpdated() { >+ TraceViewerPage page = (TraceViewerPage) getCurrentPage(); >+ if (page != null) { >+ if (fPartVisible) >+ page.refreshPage(); >+ else >+ fForceRefresh = true; >+ } >+ } >+ >+ public String[] getFilterScope() { >+ String[] scope = new String[] { IFilterScopes.PROFILING_AGENT_FILTER_SCOPE }; >+ return scope; >+ } >+ >+ public void makeActions() { >+ if (isInitializedMenu()) >+ return; //create the toolbar only once >+ super.makeActions(); >+ initializedMenu(true); >+ createActions(); >+ updateButtons(); >+ IActionBars bars = getViewSite().getActionBars(); >+ fillLocalPullDown(bars.getMenuManager()); >+ fillLocalToolBar(bars.getToolBarManager()); >+ bars.updateActionBars(); >+ } >+ >+ public void updateButtons() { >+ MemoryAnalysisPage page = null; >+ if (getCurrentPage() instanceof MemoryAnalysisPage) >+ page = (MemoryAnalysisPage) getCurrentPage(); >+ boolean memStatsTab = null != page && page.getViewTab() == MemoryAnalysisPage.TAB_MEMORY_STATS; >+ boolean classMode = memStatsTab && page.getViewTabViewMode() == BaseMemoryStatisticView.CLASS_MODE; >+ boolean packageMode = memStatsTab && page.getViewTabViewMode() == BaseMemoryStatisticView.PACKAGE_MODE; >+ boolean isDelta = memStatsTab && page.isShowDelta(); >+ boolean isPercent = memStatsTab && page.isShowPercent(); >+ _viewClass.setEnabled(memStatsTab); >+ _viewClass.setChecked(classMode); >+ _viewPackage.setEnabled(memStatsTab); >+ _viewPackage.setChecked(packageMode); >+ boolean canSrc = null != page && Utils.canOpenSourceOnThisObject(page.getMOFObject()); >+ _openSource.setEnabled(canSrc); >+ _deltaColumns.setEnabled(memStatsTab); >+ _percentMode.setEnabled(memStatsTab); >+ _deltaColumns.setChecked(isDelta); >+ _percentMode.setChecked(isPercent); >+ } >+ >+ void createActions() { >+ _viewClass = new Action() { >+ public void run() { >+ MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage(); >+ page.setViewMode(0, BaseMemoryStatisticView.CLASS_MODE); >+ } >+ }; >+ _viewPackage = new Action() { >+ public void run() { >+ MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage(); >+ page.setViewMode(0, BaseMemoryStatisticView.PACKAGE_MODE); >+ } >+ }; >+ Utils.setActionProperties(_viewPackage, _context, IContextAttributes.SHOW_PACKAGE_LEVEL); >+ Utils.setActionProperties(_viewClass, _context, IContextAttributes.SHOW_CLASS_LEVEL); >+ >+ String openSourceStr = TraceUIMessages._74; >+ _openSource = new Action(openSourceStr) { >+ public void run() { >+ MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage(); >+ if (null != page) >+ OpenSource.openSource(UIPlugin.getDefault().getSelectionModel(page.getMOFObject()).getFirstElement()); >+ } >+ }; >+ _openSource.setText(openSourceStr); >+ TracePluginImages.setImageDescriptors(_openSource,TracePluginImages.T_TOOL,TracePluginImages.IMG_SOURCE); >+ _openSource.setDescription(openSourceStr); >+ _openSource.setToolTipText(openSourceStr); >+ _openSource.setEnabled(false); >+ >+ String strShowPercent = TraceUIMessages._13; >+ _percentMode = new Action(strShowPercent) { >+ public void run() { >+ MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage(); >+ if (null != page) >+ page.getCurrentView().getShowPercentAction().run(); >+ } >+ }; >+ _percentMode.setText(strShowPercent); >+ TracePluginImages.setImageDescriptors(_percentMode,TracePluginImages.T_LCL,TracePluginImages.IMG_PERCENT); >+ _percentMode.setDescription(strShowPercent); >+ _percentMode.setToolTipText(strShowPercent); >+ _percentMode.setEnabled(true); >+ >+ String strShowDelta = TraceUIMessages._84; >+ _deltaColumns = new Action(strShowDelta) { >+ public void run() { >+ MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage(); >+ if (null != page) >+ page.getCurrentView().getDeltaColumnsAction().run(); >+ } >+ }; >+ >+ _deltaColumns.setText(strShowDelta); >+ TracePluginImages.setImageDescriptors(_deltaColumns,TracePluginImages.T_LCL,TracePluginImages.IMG_DELTACOLUMNS); >+ _deltaColumns.setDescription(strShowDelta); >+ _deltaColumns.setToolTipText(strShowDelta); >+ _deltaColumns.setEnabled(true); >+ } >+ >+ void fillLocalPullDown(IMenuManager manager) { >+ //manager.removeAll(); >+ manager.add(_openSource); >+ } >+ >+ void fillLocalToolBar(IToolBarManager manager) { >+ //manager.removeAll(); >+ manager.add(_viewPackage); >+ manager.add(_viewClass); >+ manager.add(_openSource); >+ manager.add(_percentMode); >+ manager.add(_deltaColumns); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/NumberLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/NumberLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/NumberLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/NumberLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,67 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCMethod; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.trace.ui.internal.util.TString; >+import org.eclipse.hyades.trace.views.internal.TracePluginImages; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public abstract class NumberLabelAdapter extends AbstractNumberColumnLabel { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return ""; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ if (!info.isDeltaColumn) { >+ if (info.showPercentage) >+ return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max); >+ else >+ return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ } else { >+ if (element instanceof TRCPackage >+ || element instanceof TRCClass >+ || element instanceof TRCMethod >+ || element instanceof MethodCallDetails) >+ return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ else >+ return ""; >+ } >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ if (!info.isDeltaColumn) { >+ Number delta = getDelta(element, info); >+ double d = delta != null ? delta.doubleValue() : 0; >+ if (d < 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN); >+ if (d > 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP); >+ else { >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return null; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ } >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStopTimeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStopTimeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStopTimeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStopTimeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class ThreadStopTimeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_STOP_TIME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Double) >+ return Utils.formatTime(((Double)value).doubleValue()); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockedTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockedTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockedTimeColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockedTimeColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,24 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadBlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadBlockedTimeColumnLabel extends ThreadDetailsColumnLabel { >+ >+ protected String getContextAttribute() { >+ return IContextAttributes.THREAD_BLOCKED_TIME; >+ } >+ >+ protected Number getValue(ThreadDetails thread) { >+ return new Double(thread.getBlockedTime()); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisPage.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisPage.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisPage.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisPage.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,158 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views; >+ >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.models.hierarchy.extensions.SimpleSearchQuery; >+import org.eclipse.hyades.trace.ui.TraceViewer; >+import org.eclipse.hyades.trace.ui.TraceViewerPage; >+import org.eclipse.hyades.trace.views.internal.StatisticView; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.custom.CTabFolder; >+import org.eclipse.swt.custom.CTabItem; >+import org.eclipse.swt.events.SelectionEvent; >+import org.eclipse.swt.events.SelectionListener; >+import org.eclipse.swt.layout.GridData; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Control; >+ >+public class MemoryAnalysisPage extends TraceViewerPage { >+ >+ static public final int TAB_MEMORY_STATS = 0; >+ static public final int TAB_ALLOC_DETAILS = 1; >+ >+ CTabFolder _tabFolder; >+ StatisticView _views[]; >+ >+ public MemoryAnalysisPage(EObject mofObject, TraceViewer viewer) { >+ super(mofObject, viewer); >+ } >+ >+ public void refreshPage() { >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ view.refresh(); >+ updateButtons(); >+ } >+ >+ public void selectionChanged() { >+ } >+ >+ public void update(boolean newPage) { >+ if (newPage) { >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ view.updateUI(view.getColumnDataList()); >+ updateButtons(); >+ } >+ } >+ >+ public void createControl(Composite parent) { >+ GridData gd = new GridData(); >+ gd.horizontalAlignment = GridData.FILL; >+ gd.grabExcessHorizontalSpace = true; >+ gd.verticalAlignment = GridData.FILL; >+ gd.grabExcessVerticalSpace = true; >+ >+ _tabFolder = new CTabFolder(parent, SWT.BOTTOM | SWT.FLAT); >+ _tabFolder.setLayoutData(gd); >+ _tabFolder.addSelectionListener(new SelectionListener() { >+ public void widgetDefaultSelected(SelectionEvent e) { >+ ; >+ } >+ public void widgetSelected(SelectionEvent e) { >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ view.updateUI(view.getColumnDataList()); >+ updateButtons(); >+ } >+ }); >+ >+ _views = new StatisticView[2]; >+ CTabItem tabItem; >+ >+ tabItem = new CTabItem(_tabFolder, SWT.NONE); >+ tabItem.setText("Memory Statistic"); >+ _views[0] = new BaseMemoryStatisticView(_tabFolder, this); >+ tabItem.setControl(_views[0].getControl()); >+ >+ tabItem = new CTabItem(_tabFolder, SWT.NONE); >+ tabItem.setText("Allocation Details"); >+ _views[1] = new AllocationDetailsView(_tabFolder, this); >+ tabItem.setControl(_views[1].getControl()); >+ >+ _tabFolder.setSelection(0); >+ } >+ >+ public Control getControl() { >+ return _tabFolder; >+ } >+ >+ public void setFocus() { >+ _views[_tabFolder.getSelectionIndex()].getControl().setFocus(); >+ } >+ >+ public SimpleSearchQuery getCurrentFilter() { >+ return ((MemoryAnalysisViewer)_viewer).getCurrentFilter(); >+ } >+ >+ public int getViewTab() { >+ return _tabFolder.getSelectionIndex(); >+ } >+ >+ public int getViewTabViewMode() { >+ int viewMode = -1; >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ if (view instanceof BaseMemoryStatisticView) { >+ BaseMemoryStatisticView view0 = (BaseMemoryStatisticView) view; >+ viewMode = view0.getViewMode(); >+ } >+ return viewMode; >+ } >+ >+ public void setViewMode(int tab, int viewMode) { >+ if (TAB_MEMORY_STATS != tab && TAB_ALLOC_DETAILS != tab) >+ return; >+ _tabFolder.setSelection(tab); >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ if (view instanceof BaseMemoryStatisticView) { >+ BaseMemoryStatisticView view0 = (BaseMemoryStatisticView) view; >+ view0.setViewMode(viewMode); >+ } >+ updateButtons(); >+ } >+ >+ public void updateButtons() { >+ if (_viewer instanceof MemoryAnalysisViewer) { >+ ((MemoryAnalysisViewer)_viewer).updateButtons(); >+ } >+ } >+ >+ public void updateFilterAppliedDescription() { >+ ((MemoryAnalysisViewer) _viewer).updateFilterAppliedDescription(); >+ } >+ >+ public StatisticView getCurrentView() { >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ return view; >+ } >+ >+ public boolean isShowDelta() { >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ return view.showingDeltaColumns(); >+ } >+ >+ public boolean isShowPercent() { >+ StatisticView view = _views[_tabFolder.getSelectionIndex()]; >+ return view.isShowPercent(); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalInstancesLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalInstancesLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalInstancesLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalInstancesLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,57 @@ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCMethod; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.trace.ui.internal.util.TString; >+import org.eclipse.hyades.trace.views.internal.TracePluginImages; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.TotalInstancesColumnLabel; >+import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class TotalInstancesLabelAdapter extends TotalInstancesColumnLabel { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return ""; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ if (!info.isDeltaColumn) { >+ if (info.showPercentage) >+ return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max); >+ else >+ return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ } else { >+ if (element instanceof TRCPackage >+ || element instanceof TRCClass >+ || element instanceof TRCMethod >+ || element instanceof MethodCallDetails) >+ return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ else >+ return ""; >+ } >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ if (!info.isDeltaColumn) { >+ Number delta = getDelta(element, info); >+ double d = delta != null ? delta.doubleValue() : 0; >+ if (d < 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN); >+ if (d > 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP); >+ else { >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return null; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ } >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadSleepingTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadSleepingTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadSleepingTimeColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadSleepingTimeColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,24 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadSleepingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadSleepingTimeColumnLabel extends ThreadDetailsColumnLabel { >+ >+ protected String getContextAttribute() { >+ return IContextAttributes.THREAD_SLEEPING_TIME; >+ } >+ >+ protected Number getValue(ThreadDetails thread) { >+ return new Double(thread.getSleepingTime()); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/GenerationsLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/GenerationsLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/GenerationsLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/GenerationsLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,71 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.models.trace.TracePackage; >+import org.eclipse.hyades.models.trace.impl.TRCClassImpl.TRCClassSnapshot; >+import org.eclipse.hyades.models.trace.impl.TRCPackageImpl.TRCPackageSnapshot; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes; >+ >+public class GenerationsLabelAdapter extends NumberLabelAdapter { >+ >+ protected Number getValue(Object element, ColumnDisplayInfo info) { >+ if (element instanceof TRCPackage) { >+ // TODO stub >+ //TRCPackageImpl.TRCPackageSnapshot ps = (TRCPackageImpl.TRCPackageSnapshot)((TRCPackage) element).retrieveSnapshot(); >+ //return new Integer(getAverageAge()); >+ return new Integer(0); >+ } >+ if (element instanceof TRCClass) { >+ // TODO stub >+ //TRCClassImpl.TRCClassSnapshot cs = (TRCClassImpl.TRCClassSnapshot)((TRCClass) element).retrieveSnapshot(); >+ //return new Integer(getAverageAge()); >+ return new Integer(0); >+ } >+ return null; >+ } >+ >+ protected Number getDelta(Object element, ColumnDisplayInfo info) { >+ if (element instanceof TRCPackage) { >+ // TODO stub >+ TRCPackageSnapshot delta = packageSnapshot(); >+ ((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__TOTAL_INSTANCES); >+ ((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__COLLECTED_INSTANCES); >+ //return new Integer(delta.getTotalInstances() - delta.getCollectedInstances()); >+ return new Integer(0); >+ } >+ if (element instanceof TRCClass) { >+ // TODO stub >+ TRCClassSnapshot delta = classSnapshot(); >+ ((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__TOTAL_INSTANCES); >+ ((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__COLLECTED_INSTANCES); >+ //return new Integer(delta.getTotalInstances() - delta.getCollectedInstances()); >+ return new Integer(0); >+ } >+ return null; >+ } >+ >+ protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >+ EObject eObj = ContextUpdaterHelper.getEObject(element); >+ if (eObj instanceof TRCPackage) >+ return TIContextAttributes.PACKAGE_GENERATIONS; >+ else if (eObj instanceof TRCClass) >+ return TIContextAttributes.CLASS_GENERATIONS; >+ else >+ return null; >+ // TODO call sites >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/TIColumnData.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/TIColumnData.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/TIColumnData.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/TIColumnData.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,51 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views; >+ >+import java.util.ArrayList; >+import java.util.Iterator; >+ >+import org.eclipse.hyades.trace.views.util.internal.ColumnData; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class TIColumnData extends ColumnData { >+ >+ public TIColumnData(String key, int initialPos, int style, int alignment, int width) { >+ super(key, initialPos, style, alignment, width); >+ } >+ >+ public TIColumnData(ColumnData columnData) { >+ super(columnData.key(), columnData.getInitalPos(), columnData.getStyle(), columnData.getAlignment(), columnData.width()); >+ } >+ >+ public String name() { >+ IContextLabelFormatProvider clfp = TIContextProvider.instance().getContextLabelFormatProvider(key()); >+ if (clfp != null) >+ return clfp.getDisplayStringFromElement(null, null, IContextLabelFormatProvider.MODE_COLUMN_HEADER); >+ else >+ return key(); >+ } >+ >+ static public ArrayList convertColumnData(ArrayList in) { >+ ArrayList out = new ArrayList(); >+ Iterator it = in.iterator(); >+ while (it.hasNext()) { >+ ColumnData cd = (ColumnData) it.next(); >+ out.add(new TIColumnData(cd)); >+ } >+ return out; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStopTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStopTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStopTimeColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStopTimeColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadStopTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.models.trace.TRCThread; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadStopTimeColumnLabel extends AbstractNumberColumnLabel { >+ >+ protected Number getValue(Object element, ColumnDisplayInfo info) { >+ EObject eObj = ContextUpdaterHelper.getEObject(element); >+ >+ if (eObj instanceof TRCThread) >+ return new Double(((TRCThread) eObj).getStopTime()); >+ else >+ return null; >+ } >+ >+ protected Number getDelta(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+ >+ protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >+ EObject eObj = ContextUpdaterHelper.getEObject(element); >+ >+ if (eObj instanceof TRCThread) >+ return IContextAttributes.THREAD_STOP_TIME; >+ else >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadRunningTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadRunningTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadRunningTimeColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadRunningTimeColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,24 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadRunningTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadRunningTimeColumnLabel extends ThreadDetailsColumnLabel { >+ >+ protected String getContextAttribute() { >+ return IContextAttributes.THREAD_RUNNING_TIME; >+ } >+ >+ protected Number getValue(ThreadDetails thread) { >+ return new Double(thread.getRunningTime()); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockCountColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockCountColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockCountColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockCountColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,31 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadBlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadBlockCountColumnLabel extends ThreadDetailsColumnLabel { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ Number value = getValue(element, info); >+ int number = value != null ? value.intValue() : 0; >+ return number > 0 ? Integer.toString(number) : ""; >+ } >+ >+ protected String getContextAttribute() { >+ return IContextAttributes.THREAD_BLOCK_COUNT; >+ } >+ >+ protected Number getValue(ThreadDetails thread) { >+ return new Double(thread.getBlockCount()); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDetailsColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDetailsColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDetailsColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDetailsColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,52 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadDetailsColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public abstract class ThreadDetailsColumnLabel extends NumberLabelAdapter { >+ >+ protected abstract Number getValue(ThreadDetails thread); >+ >+ protected abstract String getContextAttribute(); >+ >+ protected Number getValue(Object element, ColumnDisplayInfo info) { >+ if (element instanceof ThreadDetails) { >+ return getValue((ThreadDetails) element); >+ } >+ return null; >+ } >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ Number value = getValue(element, info); >+ if (value == null || value.doubleValue() == 0) { >+ return ""; >+ } >+ return Utils.formatTime(value.doubleValue()); >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+ >+ protected Number getDelta(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+ >+ protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >+ if (element instanceof ThreadDetails) >+ return getContextAttribute(); >+ else >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseStatisticView.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseStatisticView.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseStatisticView.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseStatisticView.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,233 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views; >+ >+import java.util.ArrayList; >+ >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.models.hierarchy.extensions.SimpleSearchQuery; >+import org.eclipse.hyades.trace.ui.ITraceSelection; >+import org.eclipse.hyades.trace.ui.TraceViewerPage; >+import org.eclipse.hyades.trace.ui.UIPlugin; >+import org.eclipse.hyades.trace.ui.ViewSelectionChangedEvent; >+import org.eclipse.hyades.trace.views.adapter.internal.IContextViewer; >+import org.eclipse.hyades.trace.views.internal.ContextInfoContainer; >+import org.eclipse.hyades.trace.views.internal.IContextInfoContainerListener; >+import org.eclipse.hyades.trace.views.internal.StatisticView; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.hyades.trace.views.util.internal.ColumnData; >+import org.eclipse.hyades.ui.provisional.context.ContextManager; >+import org.eclipse.hyades.ui.provisional.context.IContextLanguage; >+import org.eclipse.jface.viewers.IContentProvider; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.jface.viewers.IStructuredSelection; >+import org.eclipse.jface.viewers.ITableLabelProvider; >+import org.eclipse.jface.viewers.ITreeContentProvider; >+import org.eclipse.jface.viewers.LabelProvider; >+import org.eclipse.jface.viewers.TreeViewer; >+import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Tree; >+import org.eclipse.swt.widgets.TreeItem; >+ >+public abstract class BaseStatisticView extends StatisticView { >+ >+ static public String PREFERENCE_KEY_PREFIX = "org.eclipse.tptp.trace.jvmti.internal.client.views.basememstats."; >+ static public Object _empty[] = new Object[0]; >+ >+ protected ContextInfoContainer _contextInfo; >+ >+ BaseStatisticView(Composite parent, TraceViewerPage page) { >+ super(parent, page); >+ } >+ >+ protected Composite createTree(Composite parent, int options) { >+ final Tree tree = _toolkit.createTree(parent, options); >+ return tree; >+ } >+ >+ protected Composite createControl(Composite parent, ArrayList cols) { >+ final Composite vc = super.createControl(parent, cols); >+ _contextInfo = new ContextInfoContainer(); >+ _contextInfo.setViewer((IContextViewer) _page.getTraceViewer()); >+ _contextInfo.createControl(vc); >+ _contextInfo.addContextInfoContainerListener(new IContextInfoContainerListener() { >+ public void visibilityChanged(boolean isVisible) { >+ vc.layout(true, true); >+ } >+ }); >+ return vc; >+ } >+ >+ protected abstract String getColumnsPreferencesKey(); >+ protected abstract String getViewTypeStr(); >+ protected abstract String getDefaultColumnsTemplate(); >+ protected abstract String getColumnText(Object element, int columnIndex); >+ protected abstract Image getColumnImage(Object element, int columnIndex); >+ protected abstract Object[] getElements(Object inputElement); >+ protected abstract boolean hasChildren(Object element); >+ protected abstract Object[] getChildren(Object parentElement); >+ protected abstract StatisticSorter getViewerSorterInstance(); >+ >+ protected IContentProvider getContentProvider() { >+ return new BaseStatisticContentProvider(); >+ } >+ >+ public LabelProvider getTableLabelProvider() { >+ class StatisticLabelProvider extends LabelProvider implements ITableLabelProvider { >+ public Image getColumnImage(Object element, int columnIndex) { >+ return BaseStatisticView.this.getColumnImage(element, columnIndex); >+ } >+ public String getColumnText(Object element, int columnIndex) { >+ return BaseStatisticView.this.getColumnText(element, columnIndex); >+ } >+ } >+ return new StatisticLabelProvider(); >+ } >+ >+ protected void updateButtons() { >+ if (_page instanceof MemoryAnalysisPage) { >+ ((MemoryAnalysisPage)_page).updateButtons(); >+ } >+ } >+ >+ public void update() { >+ if (_page instanceof MemoryAnalysisPage && _contextInfo != null) >+ _contextInfo.setMOFObject(_page.getMOFObject()); >+ super.update(); >+ if (_page instanceof MemoryAnalysisPage) >+ ((MemoryAnalysisPage) _page).updateFilterAppliedDescription(); >+ } >+ >+ protected void updateStatusContext(IContextLanguage language) { >+ if (_contextInfo != null) >+ _contextInfo.updateStatusContext(language); >+ } >+ >+ public Tree getTree() { >+ return (Tree) getTreeViewer().getControl(); >+ } >+ >+ protected TreeViewer getTreeViewer(Tree tree) { >+ return new StatisticTreeViewer(tree); >+ } >+ >+ protected void handleSelectionEvent() { >+ ITraceSelection model = UIPlugin.getDefault().getSelectionModel(_page.getMOFObject()); >+ if (model.size() > 0) { >+ Object sel = model.getFirstElement(); >+ if (sel != null) { >+ //select(sel); >+ if (sel instanceof EObject) >+ updateStatusContext(ContextManager.getContextLanguage(ContextUpdaterHelper.getContext((EObject)sel))); >+ } >+ } >+ } >+ >+ public void updateModelSelection() { >+ ISelection selection = getTreeViewer().getSelection(); >+ if (selection != null && !selection.isEmpty()) { >+ Object sel = ((IStructuredSelection) selection).getFirstElement(); >+ notifyViewSelectionChanged(this, sel); >+ } >+ } >+ >+ public void handleViewSelectionChangedEvent(ViewSelectionChangedEvent event) { >+ Object source = event.getSource(); >+ if (source != this) { >+ handleSelectionEvent(); >+ } else { >+ ITraceSelection model = UIPlugin.getDefault().getSelectionModel(_page.getMOFObject()); >+ if (model.size() > 0) { >+ Object sel = model.getFirstElement(); >+ if (sel != null && sel instanceof EObject) >+ updateStatusContext(ContextManager.getContextLanguage(ContextUpdaterHelper.getContext((EObject)sel))); >+ } >+ updateButtons(); >+ } >+ } >+ >+ protected void firstTimeUpdate() { >+ super.firstTimeUpdate(); >+ redrawTable(); >+ } >+ >+ public void redrawTable() { >+ getTree().setRedraw(false); >+ _currentColumns = ColumnData.createColumnData(getColumnsPreferencesKey(), getDefaultColumnsTemplate()); >+ _currentColumns = TIColumnData.convertColumnData(_currentColumns); >+ resetColumns(_currentColumns); >+ getTree().setRedraw(true); >+ refresh(); >+ } >+ >+ public class BaseStatisticContentProvider implements ITreeContentProvider { >+ >+ public Object[] getChildren(Object parentElement) { >+ return BaseStatisticView.this.getChildren(parentElement); >+ } >+ >+ public Object getParent(Object element) { >+ return null; >+ } >+ >+ public boolean hasChildren(Object element) { >+ return BaseStatisticView.this.hasChildren(element); >+ } >+ >+ public Object[] getElements(Object inputElement) { >+ return BaseStatisticView.this.getElements(inputElement); >+ } >+ >+ public void dispose() { >+ } >+ >+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >+ } >+ } >+ >+ class StatisticTreeViewer extends TreeViewer { >+ >+ public StatisticTreeViewer(Tree tree) { >+ super(tree); >+ } >+ >+ public void expandItem(TreeItem item) { >+ item.setExpanded(true); >+ createChildren(item); >+ } >+ >+ public ISelection getSelection() { >+ ISelection sel = super.getSelection(); >+ if (sel != null && !sel.isEmpty()) { >+ } >+ return sel; >+ } >+ } >+ >+ public class BaseStatisticFilter extends StatisticFilter { >+ >+ public boolean select(Viewer viewer, Object parent, Object element) { >+ return false; >+ } >+ } >+ >+ protected SimpleSearchQuery getCurrentFilter() { >+ if (_page instanceof MemoryAnalysisPage) >+ return ((MemoryAnalysisPage) _page).getCurrentFilter(); >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ClassPackageNameLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ClassPackageNameLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ClassPackageNameLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ClassPackageNameLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,64 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class ClassPackageNameLabelAdapter extends ColumnLabelAdapter { >+ >+ public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ if (element == null) >+ return null; >+ if (element instanceof TRCPackage) { >+ TRCPackage pack = (TRCPackage) element; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME); >+ return createImage(formatter.getDisplayImageByElement(pack.getName(), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } else if (element instanceof TRCClass) { >+ TRCClass cls = (TRCClass) element; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.CLASS_NAME); >+ return createImage(formatter.getDisplayImageByElement(cls.getName(), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ return null; >+ } >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ String displayString = ""; >+ if (element instanceof TRCPackage) { >+ TRCPackage pack = (TRCPackage) element; >+ displayString = getDisplyStringFromMap(pack); >+ if (displayString == null) { >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME); >+ displayString = formatter.getDisplayStringFromElement(pack.getName(), pack, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ displayStringMap.put(pack, displayString); >+ } >+ } else if (element instanceof TRCClass) { >+ TRCClass cls = (TRCClass) element; >+ displayString = getDisplyStringFromMap(cls); >+ if (displayString == null) { >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.CLASS_NAME); >+ displayString = formatter.getDisplayStringFromElement(cls.getName(), cls, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ displayStringMap.put(cls, displayString); >+ } >+ } >+ return displayString; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadClassNameColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadClassNameColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadClassNameColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadClassNameColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,38 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadClassNameColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCThread; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class ThreadClassNameColumnLabel extends ColumnLabelAdapter { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element); >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.THREAD_CLASS_NAME); >+ return formatter.getDisplayStringFromElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element); >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.CLASS_NAME); >+ return createImage(formatter.getDisplayImageByElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ >+ public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalSizeLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalSizeLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalSizeLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalSizeLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,57 @@ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCMethod; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.trace.ui.internal.util.TString; >+import org.eclipse.hyades.trace.views.internal.TracePluginImages; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.TotalSizeColumnLabel; >+import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class TotalSizeLabelAdapter extends TotalSizeColumnLabel { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return ""; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ if (!info.isDeltaColumn) { >+ if (info.showPercentage) >+ return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max); >+ else >+ return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ } else { >+ if (element instanceof TRCPackage >+ || element instanceof TRCClass >+ || element instanceof TRCMethod >+ || element instanceof MethodCallDetails) >+ return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ else >+ return ""; >+ } >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ if (!info.isDeltaColumn) { >+ Number delta = getDelta(element, info); >+ double d = delta != null ? delta.doubleValue() : 0; >+ if (d < 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN); >+ if (d > 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP); >+ else { >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return null; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ } >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/AvgAgeLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/AvgAgeLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/AvgAgeLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/AvgAgeLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,87 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import java.util.Map; >+ >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.models.trace.TracePackage; >+import org.eclipse.hyades.models.trace.impl.TRCClassImpl.TRCClassSnapshot; >+import org.eclipse.hyades.models.trace.impl.TRCPackageImpl.TRCPackageSnapshot; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.BaseMemoryStatisticView.AgeInfo; >+ >+public class AvgAgeLabelAdapter extends NumberLabelAdapter { >+ >+ Map _ageMap; >+ >+ public AvgAgeLabelAdapter(Map ageMap) { >+ _ageMap = ageMap; >+ } >+ >+ protected Number getValue(Object element, ColumnDisplayInfo info) { >+ if (element instanceof TRCPackage) { >+ // TODO stub >+ //TRCPackageImpl.TRCPackageSnapshot ps = (TRCPackageImpl.TRCPackageSnapshot)((TRCPackage) element).retrieveSnapshot(); >+ //return new Integer(getAverageAge()); >+ return new Integer(0); >+ } >+ if (element instanceof TRCClass) { >+ // TODO stub >+ //TRCClassImpl.TRCClassSnapshot cs = (TRCClassImpl.TRCClassSnapshot)((TRCClass) element).retrieveSnapshot(); >+ //return new Integer(getAverageAge()); >+ AgeInfo age = (AgeInfo) _ageMap.get(element); >+ double sum = age != null ? age.sumAges : 0; >+ int count = age != null ? age.objCount : 0; >+ if (count > 0) >+ sum /= count; >+ else >+ sum = 0; >+ return new Double(sum); >+ } >+ return null; >+ } >+ >+ protected Number getDelta(Object element, ColumnDisplayInfo info) { >+ if (element instanceof TRCPackage) { >+ // TODO stub >+ TRCPackageSnapshot delta = packageSnapshot(); >+ ((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__TOTAL_INSTANCES); >+ ((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__COLLECTED_INSTANCES); >+ //return new Integer(delta.getTotalInstances() - delta.getCollectedInstances()); >+ return new Integer(0); >+ } >+ if (element instanceof TRCClass) { >+ // TODO stub >+ TRCClassSnapshot delta = classSnapshot(); >+ ((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__TOTAL_INSTANCES); >+ ((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__COLLECTED_INSTANCES); >+ //return new Integer(delta.getTotalInstances() - delta.getCollectedInstances()); >+ return new Integer(0); >+ } >+ return null; >+ } >+ >+ protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >+ EObject eObj = ContextUpdaterHelper.getEObject(element); >+ if (eObj instanceof TRCPackage) >+ return TIContextAttributes.PACKAGE_AVG_AGE; >+ else if (eObj instanceof TRCClass) >+ return TIContextAttributes.CLASS_AVG_AGE; >+ else >+ return null; >+ // TODO call sites >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadNameLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadNameLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadNameLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadNameLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,39 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCThread; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class ThreadNameLabelAdapter extends ColumnLabelAdapter { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element); >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.THREAD_NAME); >+ return formatter.getDisplayStringFromElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element); >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.THREAD_NAME); >+ return createImage(formatter.getDisplayImageByElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ >+ public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveInstancesLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveInstancesLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveInstancesLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveInstancesLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,67 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.models.trace.TRCMethod; >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.trace.ui.internal.util.TString; >+import org.eclipse.hyades.trace.views.internal.TracePluginImages; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.LiveInstancesColumnLabel; >+import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+ >+public class LiveInstancesLabelAdapter extends LiveInstancesColumnLabel { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return ""; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ if (!info.isDeltaColumn) { >+ if (info.showPercentage) >+ return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max); >+ else >+ return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ } else { >+ if (element instanceof TRCPackage >+ || element instanceof TRCClass >+ || element instanceof TRCMethod >+ || element instanceof MethodCallDetails) >+ return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ else >+ return ""; >+ } >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ if (!info.isDeltaColumn) { >+ Number delta = getDelta(element, info); >+ double d = delta != null ? delta.doubleValue() : 0; >+ if (d < 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN); >+ if (d > 0) >+ return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP); >+ else { >+ String attributeId = getContextAttribute(element, info); >+ if (attributeId == null) >+ return null; >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId); >+ return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ } >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/AllocationDetailsView.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/AllocationDetailsView.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/AllocationDetailsView.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/AllocationDetailsView.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,102 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views; >+ >+import org.eclipse.hyades.models.trace.TRCClass; >+import org.eclipse.hyades.trace.ui.TraceViewerPage; >+import org.eclipse.hyades.trace.views.util.internal.ColumnData; >+import org.eclipse.hyades.trace.views.util.internal.StatisticTableColumnInfo; >+import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes; >+ >+public class AllocationDetailsView extends BaseStatisticView { >+ >+ protected AllocationDetailsView(Composite parent, TraceViewerPage page) { >+ super(parent, page); >+ } >+ >+ protected String getColumnsPreferencesKey() { >+ return "org.eclipse.hyades.trace.views.statistic.allocdetails02"; >+ } >+ >+ protected String getViewTypeStr() { >+ return "viewoption.allocdetails"; >+ } >+ >+ protected String getDefaultColumnsTemplate() { >+ return "" >+ + TIContextAttributes.METHOD_NAME + ":" + 0 + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:150," >+ + TIContextAttributes.METHOD_LINE_NUMBER + ":" + 1 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":left:120," >+ + TIContextAttributes.THREAD_CLASS_NAME + ":" + 2 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":left:150," >+ + TIContextAttributes.PACKAGE_NAME + ":" + 3 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":left:120," >+ + TIContextAttributes.CLASS_LIVE_INST + ":" + 4 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80," >+ + TIContextAttributes.CLASS_ACTIVE_SIZE + ":" + 5 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80," >+ + TIContextAttributes.CLASS_TOTAL_INST + ":" + 6 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80," >+ + TIContextAttributes.CLASS_TOTAL_SIZE + ":" + 7 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80," >+ + TIContextAttributes.CLASS_AVG_AGE + ":" + 8 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80" >+ //+ TIContextAttributes.CLASS_GENERATIONS + ":" + 9 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80" >+ ; >+ } >+ >+ public String getColumnText(Object element, int columnIndex) { >+ StatisticTableColumnInfo info = StatisticTableColumnInfo.getStatisticTableColumnInfo(getTree().getColumn(columnIndex)); >+ int pos = info.getColumnData().getInitalPos(); >+ String label = "placeholder-" + pos; >+ TRCClass cls = null; >+ if (true) >+ return label; >+ switch (pos) { >+ case 0: label = "method name"; break; >+ case 1: label = "line number"; break; >+ case 2: label = cls.getName(); break; >+ case 3: label = cls.getPackage().getName(); break; >+ case 4: label = "" + (cls.getTotalInstances() - cls.getCollectedInstances()); break; >+ case 5: label = "" + (cls.getTotalSize() - cls.getCollectedSize()); break; >+ case 6: label = "" + cls.getTotalInstances(); break; >+ case 7: label = "" + cls.getTotalSize(); break; >+ //case 8: label = "" + cls.getAvarageAge(); break; >+ //case 9: label = "" + cls.getGenerations(); break; >+ } >+ return label; >+ } >+ >+ public Image getColumnImage(Object element, int columnIndex) { >+ return null; >+ } >+ >+ public Object[] getElements(Object inputElement) { >+ return new Object[] {""}; >+ } >+ >+ public int compare(Viewer viewer, Object e1, Object e2, int pos) { >+ return 0; >+ } >+ >+ public Object[] getChildren(Object parentElement) { >+ return null; >+ } >+ >+ public boolean hasChildren(Object element) { >+ return false; >+ } >+ >+ protected StatisticSorter getViewerSorterInstance() { >+ return new StatisticSorter() { >+ >+ }; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadRunningTimeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadRunningTimeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadRunningTimeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadRunningTimeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class ThreadRunningTimeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_RUNNING_TIME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Double) >+ return Utils.formatTime(((Double)value).doubleValue()); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/PackageNameLabelAdapter.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/PackageNameLabelAdapter.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/PackageNameLabelAdapter.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/PackageNameLabelAdapter.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,50 @@ >+/********************************************************************** >+ * Copyright (c) 2007 Intel Corporation. >+ * 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 >+ * $Id: >+ * >+ **********************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.models.trace.TRCPackage; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class PackageNameLabelAdapter extends ColumnLabelAdapter { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ TRCPackage pack = Utils.getPackage(element); >+ if (pack != null) { >+ String displayString = getDisplyStringFromMap(pack); >+ if (displayString == null) { >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME); >+ displayString = formatter.getDisplayStringFromElement(pack.getName(), pack, IContextLabelFormatProvider.MODE_COLUMN_CONTENT); >+ displayStringMap.put(pack, displayString); >+ } >+ return displayString;// + " [" + pack.getProcess().getPid() + "]"; >+ } >+ return ""; >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ TRCPackage pack = Utils.getPackage(element); >+ if (pack != null) { >+ IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME); >+ return createImage(formatter.getDisplayImageByElement(pack.getName(), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ } >+ return null; >+ } >+ >+ public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/MethodDetails.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/MethodDetails.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/MethodDetails.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/MethodDetails.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,40 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client; >+ >+public class MethodDetails { >+ >+ public String name; >+ public String signature; >+ public int line; >+ public boolean running; >+ >+ public MethodDetails() { >+ } >+ >+ public MethodDetails(String name) { >+ this(name, null); >+ } >+ >+ public MethodDetails(String name, String signature) { >+ this(name, signature, -1); >+ } >+ >+ public MethodDetails(String name, String signature, int line) { >+ this.name = name; >+ this.signature = signature; >+ this.line = line; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/GenerationsLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/GenerationsLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/GenerationsLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/GenerationsLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,39 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class GenerationsLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._GENERATIONS; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) >+ return "placeholder (Generations)"; >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextAttributes.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextAttributes.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextAttributes.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextAttributes.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,32 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public interface TIContextAttributes extends IContextAttributes { >+ >+ public final static String METHOD_LINE_NUMBER = "method.line.number"; >+ >+ public final static String PACKAGE_AVG_AGE = "package.avg.age"; >+ public final static String PACKAGE_GENERATIONS = "package.generations"; >+ >+ public final static String CLASS_AVG_AGE = "class.avg.age"; >+ public final static String CLASS_GENERATIONS = "class.generations"; >+ >+ public final static String CALL_SITE_LINE_NUMBER = "callsite.line.number"; >+ public final static String CALL_SITE_AVG_AGE = "callsite.avg.age"; >+ public final static String CALL_SITE_GENERATIONS = "callsite.generations"; >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockCountColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockCountColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockCountColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockCountColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,31 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadDeadlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadDeadlockCountColumnLabel extends ThreadDetailsColumnLabel { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ Number value = getValue(element, info); >+ int number = value != null ? value.intValue() : 0; >+ return number > 0 ? Integer.toString(number) : ""; >+ } >+ >+ protected String getContextAttribute() { >+ return IContextAttributes.THREAD_DEADLOCK_COUNT; >+ } >+ >+ protected Number getValue(ThreadDetails thread) { >+ return new Double(thread.getDeadlockCount()); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStateColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStateColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStateColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStateColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,51 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadStateColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter; >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class ThreadStateColumnLabel extends ColumnLabelAdapter { >+ >+ public String getDisplayString(Object element, ColumnDisplayInfo info) { >+ if (element instanceof ThreadDetails) { >+ switch (((ThreadDetails)element).getState()) { >+ case ThreadDetails.RUNNING: >+ return UIMessages._Running; >+ case ThreadDetails.SLEEPING: >+ return UIMessages._Sleeping; >+ case ThreadDetails.WAITING: >+ return UIMessages._Waiting; >+ case ThreadDetails.BLOCKED: >+ return UIMessages._Blocked; >+ case ThreadDetails.DEADLOCK: >+ return UIMessages._Deadlocked; >+ case ThreadDetails.STOPPED: >+ return UIMessages._Stopped; >+ } >+ } >+ return UIMessages._Unknown; >+ } >+ >+ public Image getDisplayImage(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+ >+ protected Number getDelta(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+ >+ public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockedTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockedTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockedTimeColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockedTimeColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,24 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadDeadlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadDeadlockedTimeColumnLabel extends ThreadDetailsColumnLabel { >+ >+ protected String getContextAttribute() { >+ return IContextAttributes.THREAD_DEADLOCKED_TIME; >+ } >+ >+ protected Number getValue(ThreadDetails thread) { >+ return new Double(thread.getDeadlockedTime()); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadWaitingTimeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadWaitingTimeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadWaitingTimeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadWaitingTimeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class ThreadWaitingTimeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_WAITING_TIME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Double) >+ return Utils.formatTime(((Double)value).doubleValue()); >+ } >+ return null; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadWaitingTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadWaitingTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadWaitingTimeColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadWaitingTimeColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,24 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadWaitingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.hyades.trace.views.util.internal.ThreadDetails; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadWaitingTimeColumnLabel extends ThreadDetailsColumnLabel { >+ >+ protected String getContextAttribute() { >+ return IContextAttributes.THREAD_WAITING_TIME; >+ } >+ >+ protected Number getValue(ThreadDetails thread) { >+ return new Double(thread.getWaitingTime()); >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/AverageAgeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/AverageAgeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/AverageAgeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/AverageAgeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,43 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+ >+public class AverageAgeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._AVG_AGE; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Integer) >+ return value.toString(); >+ if (value != null && value instanceof Double) >+ return value.toString(); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStartTimeColumnLabel.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStartTimeColumnLabel.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStartTimeColumnLabel.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStartTimeColumnLabel.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,41 @@ >+/********************************************************************** >+ * Copyright (c) 2006 Intel Corporation. >+ * 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 >+ * $Id: ThreadStartTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $ >+ * >+ **********************************************************************/ >+package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels; >+ >+import org.eclipse.emf.ecore.EObject; >+import org.eclipse.hyades.models.trace.TRCThread; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo; >+import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper; >+import org.eclipse.hyades.ui.provisional.context.IContextAttributes; >+ >+public class ThreadStartTimeColumnLabel extends NumberLabelAdapter { >+ >+ protected Number getValue(Object element, ColumnDisplayInfo info) { >+ EObject eObj = ContextUpdaterHelper.getEObject(element); >+ >+ if (eObj instanceof TRCThread) >+ return new Double(((TRCThread) eObj).getStartTime()); >+ else >+ return null; >+ } >+ >+ protected Number getDelta(Object element, ColumnDisplayInfo info) { >+ return null; >+ } >+ >+ protected String getContextAttribute(Object element, ColumnDisplayInfo info) { >+ EObject eObj = ContextUpdaterHelper.getEObject(element); >+ >+ if (eObj instanceof TRCThread) >+ return IContextAttributes.THREAD_START_TIME; >+ else >+ return null; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadSleepingTimeLP.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadSleepingTimeLP.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadSleepingTimeLP.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadSleepingTimeLP.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,42 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.context; >+ >+import java.util.List; >+ >+import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter; >+import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider; >+import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages; >+import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils; >+ >+public class ThreadSleepingTimeLP extends AttrLPAdapter { >+ >+ public String getDisplayStringFromElement(Object value, Object element, int mode) { >+ if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER) >+ return UIMessages._THREAD_SLEEPING_TIME; >+ else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) { >+ if (value != null && value instanceof Double) >+ return Utils.formatTime(((Double)value).doubleValue()); >+ } >+ return ""; >+ } >+ >+ protected List internalSupportModes() { >+ List modes = super.internalSupportModes(); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER)); >+ modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT)); >+ return modes; >+ } >+} >Index: src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenMemoryAnalysisViewAction.java >=================================================================== >RCS file: src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenMemoryAnalysisViewAction.java >diff -N src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenMemoryAnalysisViewAction.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenMemoryAnalysisViewAction.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,38 @@ >+/***************************************************************************** >+ * Copyright (c) 2007, Intel Corporation. >+ * 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: >+ * Intel Corporation - Initial API and implementation >+ * Ruslan A. Scherbakov, Intel - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+package org.eclipse.tptp.trace.jvmti.internal.client.views; >+ >+import org.eclipse.jface.resource.ImageDescriptor; >+ >+public class OpenMemoryAnalysisViewAction extends OpenTraceViewActionBase { >+ >+ private final String VIEW_ID = "org.eclipse.tptp.trace.jvmti.internal.client.views.MemoryAnalysisViewer"; >+ >+ public OpenMemoryAnalysisViewAction() { >+ super(""); >+ } >+ >+ public OpenMemoryAnalysisViewAction(String label) { >+ super(label); >+ } >+ >+ public OpenMemoryAnalysisViewAction(String label, ImageDescriptor image) { >+ super(label, image); >+ } >+ >+ public String getViewID() { >+ return VIEW_ID; >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 167609
:
57785
|
57787
|
58675
|
58754
|
58831
|
58964
|
58965
|
58966
|
59900
|
59901
|
60096