Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 167609 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockedTimeColumnLabel.java (-24 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadDeadlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadDeadlockedTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_DEADLOCKED_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getDeadlockedTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockCountColumnLabel.java (-31 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadBlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
13
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
14
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
15
16
public class ThreadBlockCountColumnLabel extends ThreadDetailsColumnLabel {
17
	
18
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
19
		Number value = getValue(element, info);
20
		int number = value != null ? value.intValue() : 0;
21
		return number > 0 ? Integer.toString(number) : "";
22
	}
23
24
	protected String getContextAttribute() {
25
		return IContextAttributes.THREAD_BLOCK_COUNT;
26
	}
27
28
	protected Number getValue(ThreadDetails thread) {
29
		return new Double(thread.getBlockCount());
30
	}	
31
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticView.java (-19 / +29 lines)
Lines 26-32 Link Here
26
import org.eclipse.hyades.trace.views.internal.TraceUIPlugin;
26
import org.eclipse.hyades.trace.views.internal.TraceUIPlugin;
27
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
27
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
28
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
28
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
29
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ThreadNameColumnLabel;
30
import org.eclipse.hyades.trace.views.util.internal.ColumnData;
29
import org.eclipse.hyades.trace.views.util.internal.ColumnData;
31
import org.eclipse.hyades.trace.views.util.internal.StatisticTableColumnInfo;
30
import org.eclipse.hyades.trace.views.util.internal.StatisticTableColumnInfo;
32
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
31
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
Lines 57-62 Link Here
57
import org.eclipse.swt.widgets.TableColumn;
56
import org.eclipse.swt.widgets.TableColumn;
58
import org.eclipse.swt.widgets.Tree;
57
import org.eclipse.swt.widgets.Tree;
59
import org.eclipse.swt.widgets.TreeItem;
58
import org.eclipse.swt.widgets.TreeItem;
59
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadBlockCountColumnLabel;
60
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadBlockedTimeColumnLabel;
61
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadClassNameColumnLabel;
62
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadDeadlockCountColumnLabel;
63
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadDeadlockedTimeColumnLabel;
64
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadNameLabelAdapter;
65
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadRunningTimeColumnLabel;
66
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadStateColumnLabel;
67
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ThreadWaitingTimeColumnLabel;
68
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TraceColorScheme;
60
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
69
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
61
70
62
/**
71
/**
Lines 64-71 Link Here
64
 */
73
 */
65
public class ThreadStatisticView extends StatisticView {
74
public class ThreadStatisticView extends StatisticView {
66
75
67
	static final int COL_CLASS_NAME = 0;
76
	static final int COL_THREAD_NAME = 0;
68
	static final int COL_THREAD_NAME = 1;
77
	static final int COL_CLASS_NAME = 1;
69
	static final int COL_STATE = 2;
78
	static final int COL_STATE = 2;
70
	static final int COL_RUN_TIME = 3;
79
	static final int COL_RUN_TIME = 3;
71
	static final int COL_WAIT_TIME = 4;
80
	static final int COL_WAIT_TIME = 4;
Lines 77-99 Link Here
77
	public static String PREFERENCE_KEY_PREFIX = "org.eclipse.hyades.trace.views.statistic.";
86
	public static String PREFERENCE_KEY_PREFIX = "org.eclipse.hyades.trace.views.statistic.";
78
	private boolean _isEmpty;
87
	private boolean _isEmpty;
79
	protected ContextInfoContainer _contextInfo;
88
	protected ContextInfoContainer _contextInfo;
80
81
	protected ColumnLabelAdapter[] _columns;
89
	protected ColumnLabelAdapter[] _columns;
90
	protected TraceColorScheme _colors = new TraceColorScheme();
82
91
83
	public ThreadStatisticView(Composite parent, TraceViewerPage page) {
92
	public ThreadStatisticView(Composite parent, TraceViewerPage page) {
84
		super(parent, page);
93
		super(parent, page);
85
86
		createColumnsLabelProviders();
94
		createColumnsLabelProviders();
87
	}
95
	}
88
96
97
	public void dispose() {
98
		_colors.dispose();
99
		super.dispose();
100
	}
101
	
89
	protected String getContextHelpId() {
102
	protected String getContextHelpId() {
90
		return TraceUIPlugin.getPluginId() + ".stvw0001";
103
		return TraceUIPlugin.getPluginId() + ".stvw0001";
91
	}
104
	}
92
105
93
	public void createColumnsLabelProviders() {
106
	public void createColumnsLabelProviders() {
94
		_columns = new ColumnLabelAdapter[] {
107
		_columns = new ColumnLabelAdapter[] {
108
				new ThreadNameLabelAdapter(),
95
				new ThreadClassNameColumnLabel(),
109
				new ThreadClassNameColumnLabel(),
96
				new ThreadNameColumnLabel(),
97
				//new ThreadStartTimeColumnLabel(),
110
				//new ThreadStartTimeColumnLabel(),
98
				//new ThreadStopTimeColumnLabel(),
111
				//new ThreadStopTimeColumnLabel(),
99
				new ThreadStateColumnLabel(),
112
				new ThreadStateColumnLabel(),
Lines 266-273 Link Here
266
	}
279
	}
267
280
268
	public String getDefaultColumnsTemplate() {
281
	public String getDefaultColumnsTemplate() {
269
		return IContextAttributes.THREAD_CLASS_NAME + ":" + COL_CLASS_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:150,"
282
		return ""
270
				+ IContextAttributes.THREAD_NAME + ":" + COL_THREAD_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:120,"
283
				+ IContextAttributes.THREAD_NAME + ":" + COL_THREAD_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:120,"
284
				+ IContextAttributes.THREAD_CLASS_NAME + ":" + COL_CLASS_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:150,"
271
				//+ IContextAttributes.THREAD_START_TIME + ":2:" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
285
				//+ IContextAttributes.THREAD_START_TIME + ":2:" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
272
				//+ IContextAttributes.THREAD_STOP_TIME + ":3:" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
286
				//+ IContextAttributes.THREAD_STOP_TIME + ":3:" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
273
				+ IContextAttributes.THREAD_STATE + ":" + COL_STATE + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
287
				+ IContextAttributes.THREAD_STATE + ":" + COL_STATE + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
Lines 316-322 Link Here
316
	}
330
	}
317
331
318
	public String getColumnsPreferencesKey() {
332
	public String getColumnsPreferencesKey() {
319
		return PREFERENCE_KEY_PREFIX + "ThreadStats2";
333
		return PREFERENCE_KEY_PREFIX + "ThreadStats4";
320
	}
334
	}
321
335
322
	protected String getViewTypeStr() {
336
	protected String getViewTypeStr() {
Lines 399-410 Link Here
399
					Color foreground = gc.getForeground();
413
					Color foreground = gc.getForeground();
400
					Color background = gc.getBackground();
414
					Color background = gc.getBackground();
401
415
402
					int c1 = ThreadDetails.getStateColor(state);
416
					//int c1 = ThreadDetails.getStateColor(state);
403
					int c2 = selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE;
417
					int c2 = selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE;
404
					Color sysBack = display.getSystemColor(c1);
418
					//Color sysBack = display.getSystemColor(c1);
419
					Color sysBack = _colors.getColor(state);
405
					Color sysFore = display.getSystemColor(c2);
420
					Color sysFore = display.getSystemColor(c2);
406
					Color fore = Utils.mixColors(display, sysBack, sysFore, 1, 4);
421
					Color fore = Utils.mixColors(display, sysBack, sysFore, 1, 4);
407
					Color back = Utils.mixColors(display, sysBack, sysFore, 1, 1);
422
					Color back = Utils.mixColors(display, sysBack, sysFore, 4, 1);
408
423
409
					gc.setAdvanced(true);
424
					gc.setAdvanced(true);
410
					if (gc.getAdvanced()) {
425
					if (gc.getAdvanced()) {
Lines 570-587 Link Here
570
585
571
	public void redrawTable() {
586
	public void redrawTable() {
572
		getTree().setRedraw(false);
587
		getTree().setRedraw(false);
573
		ArrayList list = ColumnData.createColumnData(getColumnsPreferencesKey()
588
		_currentColumns = ColumnData.createColumnData(getColumnsPreferencesKey(), getDefaultColumnsTemplate());
574
				, getDefaultColumnsTemplate());
589
		_currentColumns = TIColumnData.convertColumnData(_currentColumns);
575
		resetColumns(list);
590
		resetColumns(_currentColumns);
576
		_currentColumns = list;
577
		getTree().setRedraw(true);
591
		getTree().setRedraw(true);
578
		refresh();
592
		refresh();
579
	}
593
	}
580
594
581
	public void dispose() {
582
		super.dispose();
583
	}
584
585
	public void widgetDefaultSelected(SelectionEvent arg0) {
595
	public void widgetDefaultSelected(SelectionEvent arg0) {
586
		new OpenCallStackViewAction().openView(false);
596
		new OpenCallStackViewAction().openView(false);
587
	}
597
	}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStateColumnLabel.java (-50 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadStateColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
13
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
14
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
15
import org.eclipse.swt.graphics.Image;
16
17
public class ThreadStateColumnLabel extends ColumnLabelAdapter {
18
	
19
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
20
		if (element instanceof ThreadDetails) {
21
			switch (((ThreadDetails)element).getState()) {
22
			case ThreadDetails.RUNNING:
23
				return UIMessages._261;
24
			case ThreadDetails.SLEEPING:
25
				return UIMessages._262;
26
			case ThreadDetails.WAITING:
27
				return UIMessages._263;
28
			case ThreadDetails.BLOCKED:
29
				return UIMessages._264;
30
			case ThreadDetails.DEADLOCK:
31
				return UIMessages._265;
32
			case ThreadDetails.STOPPED:
33
				return UIMessages._266;
34
			}
35
		}
36
		return "";
37
	}
38
	
39
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
40
		return null;
41
	}
42
43
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
44
		return null;
45
	}
46
47
	public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) {
48
		return null;
49
	}	
50
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDeadlockCountColumnLabel.java (-31 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadDeadlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
13
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
14
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
15
16
public class ThreadDeadlockCountColumnLabel extends ThreadDetailsColumnLabel {
17
	
18
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
19
		Number value = getValue(element, info);
20
		int number = value != null ? value.intValue() : 0;
21
		return number > 0 ? Integer.toString(number) : "";
22
	}
23
24
	protected String getContextAttribute() {
25
		return IContextAttributes.THREAD_DEADLOCK_COUNT;
26
	}
27
28
	protected Number getValue(ThreadDetails thread) {
29
		return new Double(thread.getDeadlockCount());
30
	}	
31
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadBlockedTimeColumnLabel.java (-24 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadBlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadBlockedTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_BLOCKED_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getBlockedTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadClassNameColumnLabel.java (-40 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadClassNameColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.models.trace.TRCThread;
13
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
16
import org.eclipse.hyades.ui.provisional.context.ContextManager;
17
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
18
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
19
import org.eclipse.swt.graphics.Image;
20
21
public class ThreadClassNameColumnLabel extends ColumnLabelAdapter {
22
23
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
24
		TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element);
25
		IContextLabelFormatProvider formatter = ContextManager.getContextLabelFormatProvider(getContext(thread), IContextAttributes.THREAD_CLASS_NAME, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
26
27
		return formatter.getDisplayStringFromElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
28
	}
29
30
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
31
		TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element);
32
		IContextLabelFormatProvider formatter = ContextManager.getContextLabelFormatProvider(getContext(thread), IContextAttributes.THREAD_CLASS_NAME, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
33
34
		return createImage(formatter.getDisplayImageByElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
35
	}
36
	
37
	public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) {
38
		return null;
39
	}
40
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatisticViewer.java (-4 / +9 lines)
Lines 60-66 Link Here
60
	 */
60
	 */
61
	public String getDefaultPageMessage() {
61
	public String getDefaultPageMessage() {
62
62
63
		return UIMessages._269;
63
		return UIMessages.NO_THREAD_STATS;
64
	}
64
	}
65
65
66
	public boolean contextChanged() {
66
	public boolean contextChanged() {
Lines 95-102 Link Here
95
	}
95
	}
96
96
97
	public void updateContext() {
97
	public void updateContext() {
98
		ContextUpdaterHelper
98
		ContextUpdaterHelper.setCurrentFocusContextLanguage(getSelectedContext());
99
				.setCurrentFocusContextLanguage(getSelectedContext());
100
		_contextChanged = false;
99
		_contextChanged = false;
101
	}
100
	}
102
101
Lines 175-185 Link Here
175
		_sortByColumn.setEnabled(true);
174
		_sortByColumn.setEnabled(true);
176
175
177
		_openCallStackView = new OpenCallStackViewAction();
176
		_openCallStackView = new OpenCallStackViewAction();
177
		TracePluginImages.setImageDescriptors(_openCallStackView,
178
				TracePluginImages.T_VIEW, "call_stack_view.gif");
179
		_openCallStackView.setText("Show Call Stack");
180
		_openCallStackView.setDescription("Open Call Stack view");
181
		_openCallStackView.setToolTipText("Open Call Stack view");
182
		_openCallStackView.setEnabled(true);
178
183
179
		IMenuManager menum = getViewSite().getActionBars().getMenuManager();
184
		IMenuManager menum = getViewSite().getActionBars().getMenuManager();
180
		menum.add(_chooseColumns);
185
		menum.add(_chooseColumns);
181
		menum.add(_sortByColumn);
186
		menum.add(_sortByColumn);
182
		menum.add(_openCallStackView);
187
		//menum.add(_openCallStackView);
183
188
184
		MenuManager submenu = new MenuManager(TraceUIMessages._222);
189
		MenuManager submenu = new MenuManager(TraceUIMessages._222);
185
		submenu.addMenuListener(getContextSelectionMenuListener());
190
		submenu.addMenuListener(getContextSelectionMenuListener());
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadRunningTimeColumnLabel.java (-24 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadRunningTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadRunningTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_RUNNING_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getRunningTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/CallStackViewer.java (-129 / +51 lines)
Lines 17-32 Link Here
17
import java.util.ArrayList;
17
import java.util.ArrayList;
18
18
19
import org.eclipse.emf.common.util.EList;
19
import org.eclipse.emf.common.util.EList;
20
import org.eclipse.hyades.models.trace.TRCMethod;
21
import org.eclipse.hyades.models.trace.TRCMethodInvocation;
20
import org.eclipse.hyades.models.trace.TRCMethodInvocation;
22
import org.eclipse.hyades.models.trace.TRCThread;
21
import org.eclipse.hyades.models.trace.TRCThread;
23
import org.eclipse.hyades.models.trace.TRCThreadDeadEvent;
24
import org.eclipse.hyades.models.trace.TRCThreadDeadLockEvent;
25
import org.eclipse.hyades.models.trace.TRCThreadEvent;
22
import org.eclipse.hyades.models.trace.TRCThreadEvent;
26
import org.eclipse.hyades.models.trace.TRCThreadRunningEvent;
27
import org.eclipse.hyades.models.trace.TRCThreadSleepingEvent;
28
import org.eclipse.hyades.models.trace.TRCThreadWaitingForLockEvent;
29
import org.eclipse.hyades.models.trace.TRCThreadWaitingForObjectEvent;
30
import org.eclipse.hyades.trace.ui.IViewSelectionChangedListener;
23
import org.eclipse.hyades.trace.ui.IViewSelectionChangedListener;
31
import org.eclipse.hyades.trace.ui.UIPlugin;
24
import org.eclipse.hyades.trace.ui.UIPlugin;
32
import org.eclipse.hyades.trace.ui.ViewSelectionChangedEvent;
25
import org.eclipse.hyades.trace.ui.ViewSelectionChangedEvent;
Lines 42-49 Link Here
42
import org.eclipse.swt.SWT;
35
import org.eclipse.swt.SWT;
43
import org.eclipse.swt.graphics.Image;
36
import org.eclipse.swt.graphics.Image;
44
import org.eclipse.swt.widgets.Composite;
37
import org.eclipse.swt.widgets.Composite;
45
import org.eclipse.ui.ISharedImages;
38
import org.eclipse.tptp.trace.jvmti.internal.client.MethodDetails;
46
import org.eclipse.ui.PlatformUI;
39
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
47
import org.eclipse.ui.part.ViewPart;
40
import org.eclipse.ui.part.ViewPart;
48
41
49
public class CallStackViewer extends ViewPart implements
42
public class CallStackViewer extends ViewPart implements
Lines 56-78 Link Here
56
	}
49
	}
57
50
58
	public void createPartControl(Composite parent) {
51
	public void createPartControl(Composite parent) {
59
		_calStackCtrl = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL
52
		_calStackCtrl = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.SINGLE);
60
				| SWT.FULL_SELECTION | SWT.SINGLE);
61
		_calStackCtrl.setContentProvider(new CallStackContentProvider());
53
		_calStackCtrl.setContentProvider(new CallStackContentProvider());
62
		_calStackCtrl.setLabelProvider(new CallStackLabelProvider());
54
		_calStackCtrl.setLabelProvider(new CallStackLabelProvider());
63
		_calStackCtrl.setInput(this);
55
		_calStackCtrl.setInput(this);
64
		_calStackCtrl.addDoubleClickListener(new IDoubleClickListener() {
56
		_calStackCtrl.addDoubleClickListener(new IDoubleClickListener() {
65
			public void doubleClick(DoubleClickEvent event) {
57
			public void doubleClick(DoubleClickEvent event) {
66
				OpenSource.openSource(getFirstSelectedElement());
58
				TreeSelection trsel = (TreeSelection) _calStackCtrl.getSelection();
59
				if (null == trsel)
60
					return;
61
				Object element = trsel.getFirstElement();
62
				if (null == element)
63
					return;
64
				if (element instanceof TRCMethodInvocation ||
65
						element instanceof TRCMethodInvocation) {
66
					OpenSource.openSource(element);
67
				} else if (_calStackCtrl.isExpandable(element)) {
68
					_calStackCtrl.expandToLevel(element, 1);
69
				}
67
			}
70
			}
68
		});
71
		});
69
		UIPlugin.getDefault().addViewSelectionChangedListener(this);
72
		UIPlugin.getDefault().addViewSelectionChangedListener(this);
70
		UIPlugin.getDefault().getViewSelectionChangedEvent();
73
		handleViewSelectionChangedEvent(UIPlugin.getDefault().getViewSelectionChangedEvent());
71
	}
72
73
	public void setFocus() {
74
		if (null != _calStackCtrl)
75
			_calStackCtrl.getControl().setFocus();
76
	}
74
	}
77
75
78
	public void dispose() {
76
	public void dispose() {
Lines 80-91 Link Here
80
		super.dispose();
78
		super.dispose();
81
	}
79
	}
82
80
83
	public Object getFirstSelectedElement() {
81
	public void setFocus() {
84
		Object obj = null;
85
		if (null != _calStackCtrl)
82
		if (null != _calStackCtrl)
86
			obj = ((TreeSelection) _calStackCtrl.getSelection())
83
			_calStackCtrl.getControl().setFocus();
87
					.getFirstElement();
88
		return obj;
89
	}
84
	}
90
85
91
	/** update view content */
86
	/** update view content */
Lines 94-168 Link Here
94
			return;
89
			return;
95
		_selection = selection;
90
		_selection = selection;
96
		_calStackCtrl.refresh();
91
		_calStackCtrl.refresh();
97
	}
92
		_calStackCtrl.expandAll();
98
99
	public void handleObjectChanged(Object sel) {
100
		update(sel);
101
	}
102
103
	/**
104
	 * Compose String name for TRCMethodInvocation
105
	 * 
106
	 * @param method
107
	 * @return
108
	 */
109
	static String methodName(TRCMethodInvocation method) {
110
		TRCMethod m = method.getMethod();
111
		String name = "";
112
		name += m.getDefiningClass().getName();
113
		name += ".";
114
		name += m.getName();
115
		name += m.getSignature();
116
		name += " [" + m.getCalls() + "]";
117
		return name;
118
	}
119
120
	/**
121
	 * Compose String name for TRCThread
122
	 * 
123
	 * @param thread
124
	 * @return
125
	 */
126
	static String threadName(TRCThread thread) {
127
		String name = thread.getName();
128
		name += " [" + thread.getGroupName() + "]";
129
		return name;
130
	}
131
132
	static String getEventName(TRCThreadEvent event) {
133
		if (event instanceof TRCThreadRunningEvent) {
134
			return "RUNNING";
135
		} else if (event instanceof TRCThreadSleepingEvent) {
136
			return "SLEEPING";
137
		} else if (event instanceof TRCThreadDeadLockEvent) {
138
			return "DEADLOCK";
139
		} else if (event instanceof TRCThreadWaitingForLockEvent) {
140
			return "BLOCKED";
141
		} else if (event instanceof TRCThreadWaitingForObjectEvent) {
142
			return "WAITING";
143
		} else if (event instanceof TRCThreadDeadEvent) {
144
			return "STOPPED";
145
		}
146
		return "UNKNOWN";
147
	}
148
149
	/**
150
	 * Compose String name for TRCThreadEvent
151
	 * 
152
	 * @param event
153
	 * @return
154
	 */
155
	static String eventName(TRCThreadEvent event) {
156
		String name = event.getThread().getName();
157
		name += " [" + event.getThread().getGroupName() + "] State: " + getEventName(event);
158
		if (event instanceof TRCThreadWaitingForObjectEvent) {
159
			name += " Timeout=" + ((TRCThreadWaitingForObjectEvent)event).getTimeout();
160
		} else if (event instanceof TRCThreadWaitingForLockEvent) {
161
			TRCThread thread = ((TRCThreadWaitingForLockEvent)event).getLockingThread();
162
			if (null != thread)
163
				name += " by Thread=" + thread.getName();
164
		}
165
		return name;
166
	}
93
	}
167
94
168
	/**
95
	/**
Lines 173-209 Link Here
173
	 */
100
	 */
174
	public String getItemText(Object obj) {
101
	public String getItemText(Object obj) {
175
		if (obj instanceof TRCMethodInvocation) {
102
		if (obj instanceof TRCMethodInvocation) {
176
			return methodName((TRCMethodInvocation) obj);
103
			return Utils.composeMethodName((TRCMethodInvocation) obj);
177
		}
104
		}
178
		if (obj instanceof TRCThread) {
105
		if (obj instanceof TRCThread) {
179
			return threadName((TRCThread) obj);
106
			return Utils.composeThreadName((TRCThread) obj, true);
180
		}
107
		}
181
		if (obj instanceof TRCThreadEvent) {
108
		if (obj instanceof TRCThreadEvent) {
182
			return eventName((TRCThreadEvent) obj);
109
			return Utils.composeEventName((TRCThreadEvent) obj);
183
		}
110
		}
184
		return obj.toString();
111
		if (obj instanceof MethodDetails) {
185
	}
112
			return Utils.composeMethodName((MethodDetails) obj);
186
187
	/**
188
	 * Icon image for object.
189
	 * 
190
	 * @param obj
191
	 * @return
192
	 */
193
	public Image getItemImage(Object obj) {
194
		Image img = null;
195
		String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
196
		if (obj instanceof TRCMethodInvocation) {
197
			imageKey = ISharedImages.IMG_OBJ_FILE;
198
		}
113
		}
199
		if (null == img) {
114
		return obj.toString();
200
			img = PlatformUI.getWorkbench().getSharedImages()
201
					.getImage(imageKey);
202
		}
203
		return img;
204
	}
115
	}
205
116
206
	static final Object[] empty = new Object[0];
117
	static final Object[] _empty = new Object[0];
207
118
208
	class CallStackContentProvider implements ITreeContentProvider {
119
	class CallStackContentProvider implements ITreeContentProvider {
209
120
Lines 214-241 Link Here
214
		}
125
		}
215
126
216
		public Object[] getElements(Object parent) {
127
		public Object[] getElements(Object parent) {
217
			Object[] ret = empty;
128
			Object[] ret = _empty;
218
			if (null != _selection)
129
			if (null != _selection)
219
				ret = new Object[] { _selection };
130
				ret = new Object[] { _selection };
220
			return ret;
131
			return ret;
221
		}
132
		}
222
133
223
		public Object[] getChildren(Object parentElement) {
134
		public Object[] getChildren(Object parentElement) {
224
			Object[] ret = empty;
135
			Object[] ret = _empty;
225
			if (parentElement instanceof TRCThread) {
136
			if (parentElement instanceof TRCThread) {
226
				TRCThread thread = (TRCThread) parentElement;
137
				TRCThread thread = (TRCThread) parentElement;
227
				TRCMethodInvocation mi;
138
				EList list = thread.getThreadEvents();
228
				ArrayList arrlist = new ArrayList();
139
				if (null != list && list.size() > 0) {
229
				EList list = thread.getInitialInvocations();
140
					TRCThreadEvent event = (TRCThreadEvent) list.get(list.size() - 1);
230
				while (list != null && !list.isEmpty()) {
141
					ret = Utils.getCallStack(event);
231
					mi = (TRCMethodInvocation) list.get(list.size() - 1);
142
				} else {
232
					arrlist.add(mi);
143
					TRCMethodInvocation mi;
233
					list = mi.getInvokes();
144
					ArrayList arrlist = new ArrayList();
145
					list = thread.getInitialInvocations();
146
					while (list != null && !list.isEmpty()) {
147
						mi = (TRCMethodInvocation) list.get(list.size() - 1);
148
						arrlist.add(mi);
149
						list = mi.getInvokes();
150
					}
151
					ret = arrlist.toArray();
234
				}
152
				}
235
				ret = arrlist.toArray();
236
			} else if (parentElement instanceof TRCThreadEvent) {
153
			} else if (parentElement instanceof TRCThreadEvent) {
237
				// TODO: CS from event
154
				ret = Utils.getCallStack((TRCThreadEvent) parentElement);
238
				ret = new String[] { "Placeholder for EVENT's call stack...", };
239
			}
155
			}
240
			return ret;
156
			return ret;
241
		}
157
		}
Lines 249-255 Link Here
249
			if (element instanceof TRCThread) {
165
			if (element instanceof TRCThread) {
250
				ret = true;
166
				ret = true;
251
			} else if (element instanceof TRCThreadEvent) {
167
			} else if (element instanceof TRCThreadEvent) {
252
				ret = true;
168
				TRCThreadEvent event = (TRCThreadEvent) element;
169
				EList list = event.getAnnotations();
170
				ret = list != null && list.size() > 0;
253
			}
171
			}
254
			return ret;
172
			return ret;
255
		}
173
		}
Lines 261-272 Link Here
261
		}
179
		}
262
180
263
		public Image getImage(Object obj) {
181
		public Image getImage(Object obj) {
264
			return getItemImage(obj);
182
			return Utils.getItemImage(obj);
265
		}
183
		}
266
	}
184
	}
267
185
268
	public void handleViewSelectionChangedEvent(ViewSelectionChangedEvent event) {
186
	public void handleViewSelectionChangedEvent(ViewSelectionChangedEvent event) {
269
		Object source = event.getSource();
187
		Object source = event.getSource();
188
		updateView(source);
189
	}
190
191
	public void updateView(Object source) {
270
		if (source instanceof ThreadStatisticView) {
192
		if (source instanceof ThreadStatisticView) {
271
			ThreadStatisticView view = (ThreadStatisticView) source;
193
			ThreadStatisticView view = (ThreadStatisticView) source;
272
			TRCThread thread = view.getSelectedThread();
194
			TRCThread thread = view.getSelectedThread();
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesPage.java (-22 / +56 lines)
Lines 37-68 Link Here
37
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ITimeDataProvider;
37
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ITimeDataProvider;
38
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.LegendCtrl;
38
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.LegendCtrl;
39
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ThreadStatesCtrl;
39
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ThreadStatesCtrl;
40
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.ThreadsTipHandler;
40
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TimeScaleCtrl;
41
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TimeScaleCtrl;
41
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TraceColorScheme;
42
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.TraceColorScheme;
43
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
42
44
43
public class ThreadStatesPage extends TraceViewerPage implements
45
public class ThreadStatesPage extends TraceViewerPage implements
44
		ITimeDataProvider, SelectionListener {
46
		ITimeDataProvider, SelectionListener {
45
47
46
	/* vars */
48
	/* vars */
47
	double _minTimeInterval = .000001;
49
	private double _minTimeInterval = .000001;
48
	double _selectedTime = -1;
50
	private double _selectedTime = -1;
49
	double _beginTime = 0;
51
	private double _beginTime = 0;
50
	double _endTime = 0;
52
	private double _endTime = 0;
51
	double _time0 = 0;
53
	private double _time0 = 0;
52
	double _time1 = 0;
54
	private double _time1 = 0;
53
	double _time0_ = 0;
55
	private double _time0_ = 0;
54
	double _time1_ = 0;
56
	private double _time1_ = 0;
55
	double _time1bak = 0;
57
	private boolean _timeRangeFixed = false;
56
	double _timeStep = 0.01;
57
	boolean _timeRangeFixed = false;
58
	private int _nameWidth = 96;
58
	private int _nameWidth = 96;
59
	private int _legendHeight = 22;
60
	private int _timeScaleHeight = 22;
61
	private Composite _viewContainer;
59
	private Composite _viewContainer;
62
	private ThreadStatesCtrl _stateCtrl;
60
	private ThreadStatesCtrl _stateCtrl;
63
	private LegendCtrl _legendCtrl;
61
	private LegendCtrl _legendCtrl;
64
	private TimeScaleCtrl _timeScaleCtrl;
62
	private TimeScaleCtrl _timeScaleCtrl;
65
	static TraceColorScheme _colors = new TraceColorScheme();
63
	private ThreadsTipHandler _threadTip;
64
	private TraceColorScheme _colors = new TraceColorScheme();
66
65
67
	/** ctor */
66
	/** ctor */
68
	public ThreadStatesPage(EObject mofObject, TraceViewer viewer) {
67
	public ThreadStatesPage(EObject mofObject, TraceViewer viewer) {
Lines 86-91 Link Here
86
	}
85
	}
87
86
88
	public void createControl(Composite parent) {
87
	public void createControl(Composite parent) {
88
		_nameWidth = Utils.loadIntOption("viewoption.threads.namewidth", 96, 6, 1000);
89
		_viewContainer = new Composite(parent, SWT.NULL);
89
		_viewContainer = new Composite(parent, SWT.NULL);
90
		_legendCtrl = new LegendCtrl(_viewContainer, _colors);
90
		_legendCtrl = new LegendCtrl(_viewContainer, _colors);
91
		_timeScaleCtrl = new TimeScaleCtrl(_viewContainer, _colors);
91
		_timeScaleCtrl = new TimeScaleCtrl(_viewContainer, _colors);
Lines 95-112 Link Here
95
		_stateCtrl.addSelectionListener(this);
95
		_stateCtrl.addSelectionListener(this);
96
		_viewContainer.addControlListener(new ControlAdapter() {
96
		_viewContainer.addControlListener(new ControlAdapter() {
97
			public void controlResized(ControlEvent event) {
97
			public void controlResized(ControlEvent event) {
98
				Rectangle r = _viewContainer.getClientArea();
98
				resizeControls();
99
				_legendCtrl.setBounds(r.x, r.y, r.width, _legendHeight);
100
				_timeScaleCtrl.setBounds(r.x, r.y + _legendHeight, r.width,
101
						_timeScaleHeight);
102
				_stateCtrl.setBounds(r.x, r.y + _legendHeight
103
						+ _timeScaleHeight, r.width, r.height - _legendHeight
104
						- _timeScaleHeight);
105
			}
99
			}
106
		});
100
		});
101
		resizeControls();
102
		_threadTip = new ThreadsTipHandler(parent.getShell());
103
		_threadTip.activateHoverHelp(_stateCtrl);
107
	}
104
	}
108
105
109
	public void dispose() {
106
	public void dispose() {
107
		Utils.saveIntOption("viewoption.threads.namewidth", _nameWidth);
110
		_stateCtrl.dispose();
108
		_stateCtrl.dispose();
111
		_legendCtrl.dispose();
109
		_legendCtrl.dispose();
112
		_viewContainer.dispose();
110
		_viewContainer.dispose();
Lines 114-119 Link Here
114
		super.dispose();
112
		super.dispose();
115
	}
113
	}
116
114
115
	public void resizeControls() {
116
		Rectangle r = _viewContainer.getClientArea();
117
		int legendHeight = _legendCtrl.getFontHeight();
118
		if (legendHeight < 1) {
119
			_legendCtrl.setBounds(r.x, r.y, 1, 1);
120
			_legendCtrl.update();
121
			legendHeight = _legendCtrl.getFontHeight();
122
			if (legendHeight < 1)
123
				return;
124
		}
125
		legendHeight += 10;
126
		int timeScaleHeight = 22;
127
		_legendCtrl.setBounds(r.x, r.y, r.width, legendHeight);
128
		_timeScaleCtrl.setBounds(r.x, r.y + legendHeight, r.width, timeScaleHeight);
129
		_stateCtrl.setBounds(r.x, r.y + legendHeight + timeScaleHeight,
130
				r.width, r.height - legendHeight - timeScaleHeight);
131
		int width = _stateCtrl.getClientArea().width;
132
		if (_nameWidth > width - 6)
133
			_nameWidth = width - 6;
134
		if (_nameWidth < 6)
135
			_nameWidth = 6;
136
	}
137
	
117
	/** Tries to set most convinient time range for display. */
138
	/** Tries to set most convinient time range for display. */
118
	void setTimeRange(Object threads[]) {
139
	void setTimeRange(Object threads[]) {
119
		_endTime = 0;
140
		_endTime = 0;
Lines 147-153 Link Here
147
		_time0_ = _beginTime - (_endTime - _beginTime) * 0.05;
168
		_time0_ = _beginTime - (_endTime - _beginTime) * 0.05;
148
		if (_time0_ < 0)
169
		if (_time0_ < 0)
149
			_time0_ = 0;
170
			_time0_ = 0;
150
		_time1_ = _time0_ + (_endTime - _time0_) * 1.05;
171
		//_time1_ = _time0_ + (_endTime - _time0_) * 1.05;
172
		_time1_ = _endTime;
151
		_time0_ = Math.floor(_time0_);
173
		_time0_ = Math.floor(_time0_);
152
		_time1_ = Math.ceil(_time1_);
174
		_time1_ = Math.ceil(_time1_);
153
		if (!_timeRangeFixed) {
175
		if (!_timeRangeFixed) {
Lines 200-205 Link Here
200
		return _nameWidth;
222
		return _nameWidth;
201
	}
223
	}
202
224
225
	public void setNameSpace(int width) {
226
		_nameWidth = width;
227
		width = _stateCtrl.getClientArea().width;
228
		if (_nameWidth > width - 6)
229
			_nameWidth = width - 6;
230
		if (_nameWidth < 6)
231
			_nameWidth = 6;
232
		_stateCtrl.adjustScrolls();
233
		_stateCtrl.redraw();
234
		_timeScaleCtrl.redraw();
235
	}
236
	
203
	public int getTimeSpace() {
237
	public int getTimeSpace() {
204
		int w = _stateCtrl.getClientArea().width;
238
		int w = _stateCtrl.getClientArea().width;
205
		return w - _nameWidth;
239
		return w - _nameWidth;
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/UIMessages.java (-8 / +47 lines)
Lines 24-38 Link Here
24
	public static String SELECTED_TIME;
24
	public static String SELECTED_TIME;
25
	public static String TIME_SCALE;
25
	public static String TIME_SCALE;
26
	public static String MEM_ANALYSIS_TITLE;
26
	public static String MEM_ANALYSIS_TITLE;
27
	public static String NO_THREAD_STATS;
27
28
28
	public static String _261;
29
	// state strings
29
	public static String _262;
30
	public static String _Not_Started;
30
	public static String _263;
31
	public static String _Running;
31
	public static String _264;
32
	public static String _Sleeping;
32
	public static String _265;
33
	public static String _Waiting;
33
	public static String _266;
34
	public static String _Blocked;
34
	public static String _267;
35
	public static String _Deadlocked;
35
	public static String _269;
36
	public static String _Stopped;
37
	public static String _Unknown;
38
39
	public static String _not_started;
40
	public static String _running;
41
	public static String _sleeping;
42
	public static String _waiting;
43
	public static String _blocked;
44
	public static String _deadlocked;
45
	public static String _stopped;
46
	public static String _unknown;
47
48
	public static String _LINE_NUMBER;
49
	public static String _AVG_AGE;
50
	public static String _GENERATIONS;
51
	public static String _RESET_TIMESCALE;
52
	public static String _NEXT_THREAD;
53
	public static String _PREV_THREAD;
54
	public static String _NEXT_EVENT;
55
	public static String _PREV_EVENT;
56
57
	public static String _RESET_TIMESCALE_TTIP;
58
	public static String _NEXT_THREAD_TTIP;
59
	public static String _PREV_THREAD_TTIP;
60
	public static String _NEXT_EVENT_TTIP;
61
	public static String _PREV_EVENT_TTIP;
62
63
	public static String _THREAD_NAME;
64
	public static String _THREAD_CLASS_NAME;
65
	public static String _THREAD_START_TIME;
66
	public static String _THREAD_STOP_TIME;
67
	public static String _THREAD_STATE;
68
	public static String _THREAD_RUNNING_TIME;
69
	public static String _THREAD_SLEEPING_TIME;
70
	public static String _THREAD_WAITING_TIME;
71
	public static String _THREAD_BLOCKED_TIME;
72
	public static String _THREAD_DEADLOCKED_TIME;
73
	public static String _THREAD_BLOCK_COUNT;
74
	public static String _THREAD_DEADLOCK_COUNT;
36
75
37
	private UIMessages() {
76
	private UIMessages() {
38
		// Do not instantiate
77
		// Do not instantiate
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadWaitingTimeColumnLabel.java (-24 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadWaitingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadWaitingTimeColumnLabel extends ThreadDetailsColumnLabel {
16
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_WAITING_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getWaitingTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadSleepingTimeColumnLabel.java (-24 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadSleepingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadSleepingTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_SLEEPING_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getSleepingTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStartTimeColumnLabel.java (-42 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadStartTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.emf.ecore.EObject;
13
import org.eclipse.hyades.models.trace.TRCThread;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
16
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
17
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
18
19
public class ThreadStartTimeColumnLabel extends AbstractNumberColumnLabel {
20
	
21
	protected Number getValue(Object element, ColumnDisplayInfo info) {
22
		EObject eObj = ContextUpdaterHelper.getEObject(element);
23
24
		if (eObj instanceof TRCThread)
25
			return new Double(((TRCThread) eObj).getStartTime());
26
		else
27
			return null;
28
	}
29
30
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
31
		return null;
32
	}
33
34
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
35
		EObject eObj = ContextUpdaterHelper.getEObject(element);		
36
		
37
		if (eObj instanceof TRCThread)
38
			return IContextAttributes.THREAD_START_TIME;
39
		else
40
			return null;
41
	}	
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadDetailsColumnLabel.java (-53 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadDetailsColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.hyades.trace.ui.internal.util.TString;
13
import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
15
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
16
import org.eclipse.swt.graphics.Image;
17
18
public abstract class ThreadDetailsColumnLabel extends AbstractNumberColumnLabel {
19
	
20
	protected abstract Number getValue(ThreadDetails thread);
21
	
22
	protected abstract String getContextAttribute();
23
	
24
	protected Number getValue(Object element, ColumnDisplayInfo info) {
25
		if (element instanceof ThreadDetails) {
26
			return getValue((ThreadDetails) element);
27
		}
28
		return null;
29
	}
30
31
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
32
		Number value = getValue(element, info);
33
		if (value == null || value.doubleValue() == 0) {
34
			return "";
35
		}
36
		return TString.formatTimeValue(value.doubleValue());
37
	}
38
	
39
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
40
		return null;
41
	}
42
43
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
44
		return null;
45
	}
46
47
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
48
		if (element instanceof ThreadDetails)
49
			return getContextAttribute();
50
		else
51
			return null;
52
	}
53
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStatesViewer.java (-10 / +28 lines)
Lines 43-49 Link Here
43
	}
43
	}
44
44
45
	public void makeActions() {
45
	public void makeActions() {
46
		if (isInitializedMenu())
47
			return; //create the toolbar only once
46
		super.makeActions();
48
		super.makeActions();
49
		initializedMenu(true);
47
		createActions();
50
		createActions();
48
		IActionBars bars = getViewSite().getActionBars();
51
		IActionBars bars = getViewSite().getActionBars();
49
		fillLocalPullDown(bars.getMenuManager());
52
		fillLocalPullDown(bars.getMenuManager());
Lines 55-62 Link Here
55
	Action _selectPrevEvent;
58
	Action _selectPrevEvent;
56
	Action _selectNextThread;
59
	Action _selectNextThread;
57
	Action _selectPrevThread;
60
	Action _selectPrevThread;
61
	Action _resetTimescale;
58
62
59
	private void createActions() {
63
	private void createActions() {
64
		_resetTimescale = new Action() {
65
			public void run() {
66
				if (getCurrentPage() instanceof ThreadStatesPage) {
67
					((ThreadStatesPage) getCurrentPage()).resetStartFinishTime();
68
				}
69
			}
70
		};
71
		_resetTimescale.setText(UIMessages._RESET_TIMESCALE);
72
		_resetTimescale.setToolTipText(UIMessages._RESET_TIMESCALE_TTIP);
73
		_resetTimescale.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.hyades.trace.views"
74
				, "icons/full/ctool16/home_nav.gif"));
75
60
		_selectNextEvent = new Action() {
76
		_selectNextEvent = new Action() {
61
			public void run() {
77
			public void run() {
62
				if (getCurrentPage() instanceof ThreadStatesPage) {
78
				if (getCurrentPage() instanceof ThreadStatesPage) {
Lines 64-72 Link Here
64
				}
80
				}
65
			}
81
			}
66
		};
82
		};
67
		_selectNextEvent.setText("Next Event");
83
		_selectNextEvent.setText(UIMessages._NEXT_EVENT);
68
		_selectNextEvent.setToolTipText("Select Next Event");
84
		_selectNextEvent.setToolTipText(UIMessages._NEXT_EVENT_TTIP);
69
		//_selectNextEvent.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD));
70
		_selectNextEvent.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
85
		_selectNextEvent.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
71
				, "icons/full/obj16/next_event.gif"));
86
				, "icons/full/obj16/next_event.gif"));
72
87
Lines 77-85 Link Here
77
				}
92
				}
78
			}
93
			}
79
		};
94
		};
80
		_selectPrevEvent.setText("Prev Event");
95
		_selectPrevEvent.setText(UIMessages._PREV_EVENT);
81
		_selectPrevEvent.setToolTipText("Select Previous Event");
96
		_selectPrevEvent.setToolTipText(UIMessages._PREV_EVENT_TTIP);
82
		//_selectPrevEvent.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_BACK));
83
		_selectPrevEvent.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
97
		_selectPrevEvent.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
84
				, "icons/full/obj16/prev_event.gif"));
98
				, "icons/full/obj16/prev_event.gif"));
85
99
Lines 90-97 Link Here
90
				}
104
				}
91
			}
105
			}
92
		};
106
		};
93
		_selectNextThread.setText("Next Thread");
107
		_selectNextThread.setText(UIMessages._NEXT_THREAD);
94
		_selectNextThread.setToolTipText("Select Next Thread");
108
		_selectNextThread.setToolTipText(UIMessages._NEXT_THREAD_TTIP);
95
		_selectNextThread.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
109
		_selectNextThread.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
96
				, "icons/full/obj16/next_thread.gif"));
110
				, "icons/full/obj16/next_thread.gif"));
97
111
Lines 102-114 Link Here
102
				}
116
				}
103
			}
117
			}
104
		};
118
		};
105
		_selectPrevThread.setText("Prev Thread");
119
		_selectPrevThread.setText(UIMessages._PREV_THREAD);
106
		_selectPrevThread.setToolTipText("Select Previous Thread");
120
		_selectPrevThread.setToolTipText(UIMessages._PREV_THREAD_TTIP);
107
		_selectPrevThread.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
121
		_selectPrevThread.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TITracePlugin.PLUGIN_ID
108
				, "icons/full/obj16/prev_thread.gif"));
122
				, "icons/full/obj16/prev_thread.gif"));
109
	}
123
	}
110
124
111
	private void fillLocalPullDown(IMenuManager manager) {
125
	private void fillLocalPullDown(IMenuManager manager) {
126
		manager.removeAll();
127
		manager.add(_resetTimescale);
112
		manager.add(_selectPrevEvent);
128
		manager.add(_selectPrevEvent);
113
		manager.add(_selectNextEvent);
129
		manager.add(_selectNextEvent);
114
		manager.add(_selectPrevThread);
130
		manager.add(_selectPrevThread);
Lines 116-121 Link Here
116
	}
132
	}
117
133
118
	private void fillLocalToolBar(IToolBarManager manager) {
134
	private void fillLocalToolBar(IToolBarManager manager) {
135
		manager.removeAll();
136
		manager.add(_resetTimescale);
119
		manager.add(_selectPrevEvent);
137
		manager.add(_selectPrevEvent);
120
		manager.add(_selectNextEvent);
138
		manager.add(_selectNextEvent);
121
		manager.add(_selectPrevThread);
139
		manager.add(_selectPrevThread);
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/messages.properties (-9 / +47 lines)
Lines 14-30 Link Here
14
# NLS_ENCODING=UTF-8
14
# NLS_ENCODING=UTF-8
15
15
16
THREAD_STATISTIC_TITLE = Thread Statistics
16
THREAD_STATISTIC_TITLE = Thread Statistics
17
THREAD_STATES_TITLE = Thread States
17
THREAD_STATES_TITLE = Threads Visualizer
18
LEGEND_LABEL = Legend
18
LEGEND_LABEL = Legend
19
CURRENT_TIME = Current Time
19
CURRENT_TIME = Current Time
20
SELECTED_TIME = Selected Time
20
SELECTED_TIME = Selected Time
21
TIME_SCALE = Time Scale
21
TIME_SCALE = Time Scale
22
MEM_ANALYSIS_TITLE = Memory Analysis
22
MEM_ANALYSIS_TITLE = Memory Analysis
23
_261 = Running
23
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.
24
_262 = Sleeping
24
_Not_Started = Not Started
25
_263 = Waiting
25
_Running = Running
26
_264 = Blocked
26
_Sleeping = Sleeping
27
_265 = Deadlock
27
_Waiting = Waiting
28
_266 = Stopped
28
_Blocked = Blocked
29
_267 = Unknown
29
_Deadlocked = Deadlocked
30
_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.
30
_Stopped = Stopped
31
_Unknown = Unknown
32
_not_started = not started
33
_running = running
34
_sleeping = sleeping
35
_waiting = waiting
36
_blocked = blocked
37
_deadlocked = deadlocked
38
_stopped = stopped
39
_unknown = unknown
40
41
#tooltips
42
_RESET_TIMESCALE_TTIP = Reset Timescale
43
_NEXT_THREAD_TTIP = Select Next Thread
44
_PREV_THREAD_TTIP = Select Previous Thread
45
_NEXT_EVENT_TTIP = Select Next Event
46
_PREV_EVENT_TTIP = Select Previous Event
47
48
# labels
49
_RESET_TIMESCALE = Reset Timescale
50
_NEXT_THREAD = Next Thread
51
_PREV_THREAD = Prev Thread
52
_NEXT_EVENT = Next Event
53
_PREV_EVENT = Prev Event
54
_AVG_AGE = Avg. Age
55
_GENERATIONS = Generations
56
_LINE_NUMBER = Line No.
57
_THREAD_NAME = Thread Name
58
_THREAD_CLASS_NAME = Class
59
_THREAD_START_TIME = Start Time
60
_THREAD_STOP_TIME = Stop Time
61
_THREAD_STATE = State
62
_THREAD_RUNNING_TIME = Running Time
63
_THREAD_SLEEPING_TIME = Sleeping Time
64
_THREAD_WAITING_TIME = Waiting Time
65
_THREAD_BLOCKED_TIME = Blocked Time
66
_THREAD_DEADLOCKED_TIME = Deadlocked Time
67
_THREAD_BLOCK_COUNT = Block Count
68
_THREAD_DEADLOCK_COUNT = Deadlock Count
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/ThreadStopTimeColumnLabel.java (-42 lines)
Removed Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadStopTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views;
11
12
import org.eclipse.emf.ecore.EObject;
13
import org.eclipse.hyades.models.trace.TRCThread;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
16
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
17
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
18
19
public class ThreadStopTimeColumnLabel extends AbstractNumberColumnLabel {
20
	
21
	protected Number getValue(Object element, ColumnDisplayInfo info) {
22
		EObject eObj = ContextUpdaterHelper.getEObject(element);
23
24
		if (eObj instanceof TRCThread)
25
			return new Double(((TRCThread) eObj).getStopTime());
26
		else
27
			return null;
28
	}
29
30
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
31
		return null;
32
	}
33
34
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
35
		EObject eObj = ContextUpdaterHelper.getEObject(element);		
36
		
37
		if (eObj instanceof TRCThread)
38
			return IContextAttributes.THREAD_STOP_TIME;
39
		else
40
			return null;
41
	}	
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenCallStackViewAction.java (-1 / +1 lines)
Lines 18-24 Link Here
18
18
19
public class OpenCallStackViewAction extends OpenTraceViewActionBase {
19
public class OpenCallStackViewAction extends OpenTraceViewActionBase {
20
20
21
	static final String VIEW_ID = "org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackView";
21
	static final String VIEW_ID = "org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackViewer";
22
22
23
	public OpenCallStackViewAction() {
23
	public OpenCallStackViewAction() {
24
		super("");
24
		super("");
(-)plugin.properties (-3 / +5 lines)
Lines 15-21 Link Here
15
pluginName = TPTP Trace JVMTI Client
15
pluginName = TPTP Trace JVMTI Client
16
providerName = Eclipse.org
16
providerName = Eclipse.org
17
17
18
JVMTI_ANALYSIS_TYPE_DESCRIPTION_EXEC    = Execution Time Analysis (JVMTI)
18
JVMTI_ANALYSIS_TYPE_DESCRIPTION_EXEC    = Execution Time Analysis (Java 5.0 +)
19
JVMTI_ANALYSIS_TYPE_DESCRIPTION_THRD    = Thread Statistics
19
JVMTI_ANALYSIS_TYPE_DESCRIPTION_THRD    = Thread Statistics
20
JVMTI_ANALYSIS_TYPE_DESCRIPTION_HEAP    = Memory Statistics
20
JVMTI_ANALYSIS_TYPE_DESCRIPTION_HEAP    = Memory Statistics
21
JVMTI_ANALYSIS_TYPE_VIEW_FLOW			= Execution Flow
21
JVMTI_ANALYSIS_TYPE_VIEW_FLOW			= Execution Flow
Lines 24-32 Link Here
24
JVMTI_ANALYSIS_TYPE_VIEW_UML_OBJECT		= UML2 Object Interactions
24
JVMTI_ANALYSIS_TYPE_VIEW_UML_OBJECT		= UML2 Object Interactions
25
JVMTI_ANALYSIS_TYPE_VIEW_UML_CLASS		= UML2 Class Interactions
25
JVMTI_ANALYSIS_TYPE_VIEW_UML_CLASS		= UML2 Class Interactions
26
JVMTI_ANALYSIS_TYPE_VIEW_THRD           = Thread Statistics
26
JVMTI_ANALYSIS_TYPE_VIEW_THRD           = Thread Statistics
27
JVMTI_ANALYSIS_TYPE_VIEW_THRD_STATES    = Thread States
27
JVMTI_ANALYSIS_TYPE_VIEW_THRD_STATES    = Threads Visualizer
28
JVMTI_ANALYSIS_TYPE_VIEW_CALL_STACK     = Call Stack
28
JVMTI_ANALYSIS_TYPE_VIEW_CALL_STACK     = Call Stack
29
JVMTI_ANALYSIS_TYPE_VIEW_HEAP           = Memory Statistics
29
JVMTI_ANALYSIS_TYPE_VIEW_HEAP           = Memory Statistics
30
JVMTI_ANALYSIS_TYPE_VIEW_HEAP_ANALYSIS  = Memory Analysis
30
JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD        = Open Thread Statistics
31
JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD        = Open Thread Statistics
31
JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD_STATES = Open Thread States
32
JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD_STATES = Open Threads Visualizer
32
JVMTI_ANALYSIS_TYPE_TOOLTIP_CALL_STACK  = Open Call Stack
33
JVMTI_ANALYSIS_TYPE_TOOLTIP_CALL_STACK  = Open Call Stack
34
JVMTI_ANALYSIS_TYPE_TOOLTIP_HEAP_ANALYSIS = Open Memory Analysis
(-)plugin.xml (-4 / +38 lines)
Lines 119-127 Link Here
119
            category="org.eclipse.hyades.trace.internal.ui.trace"
119
            category="org.eclipse.hyades.trace.internal.ui.trace"
120
            class="org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackViewer"
120
            class="org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackViewer"
121
            icon="icons/full/cview16/call_stack_view.gif"
121
            icon="icons/full/cview16/call_stack_view.gif"
122
            id="org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackView"
122
            id="org.eclipse.tptp.trace.jvmti.internal.client.views.CallStackViewer"
123
            name="%JVMTI_ANALYSIS_TYPE_VIEW_CALL_STACK">
123
            name="%JVMTI_ANALYSIS_TYPE_VIEW_CALL_STACK">
124
      </view>
124
      </view>
125
      <view
126
            category="org.eclipse.hyades.trace.internal.ui.trace"
127
            class="org.eclipse.tptp.trace.jvmti.internal.client.views.MemoryAnalysisViewer"
128
            icon="icons/full/obj16/memleakantype_obj.gif"
129
            id="org.eclipse.tptp.trace.jvmti.internal.client.views.MemoryAnalysisViewer"
130
            name="%JVMTI_ANALYSIS_TYPE_VIEW_HEAP_ANALYSIS">
131
      </view>
125
   	</extension>
132
   	</extension>
126
133
127
   	<extension
134
   	<extension
Lines 146-164 Link Here
146
               relative="org.eclipse.tptp.trace.jvmti.internal.client.views.ThreadStatesViewer"
153
               relative="org.eclipse.tptp.trace.jvmti.internal.client.views.ThreadStatesViewer"
147
               visible="false">
154
               visible="false">
148
         </view>
155
         </view>
156
         <actionSet
157
               id="org.eclipse.tptp.trace.jvmti.threadActionSet">
158
         </actionSet>
159
         <actionSet
160
               id="org.eclipse.tptp.trace.jvmti.heapActionSet">
161
         </actionSet>
149
      </perspectiveExtension>
162
      </perspectiveExtension>
150
   	</extension>
163
   	</extension>
151
164
152
   	<extension
165
   	<extension
153
         point="org.eclipse.ui.actionSets">
166
         point="org.eclipse.ui.actionSets">
154
      <actionSet
167
      <actionSet
155
            label="%JVMTI_ANALYSIS_TYPE_DESCRIPTION_THRD"
168
            label="JVMTI"
156
            visible="true"
169
            visible="false"
157
            id="org.eclipse.tptp.trace.jvmti.threadActionSet">
170
            id="org.eclipse.tptp.trace.jvmti.threadActionSet">
158
         <action
171
         <action
159
               label="%JVMTI_ANALYSIS_TYPE_VIEW_THRD"
172
               label="%JVMTI_ANALYSIS_TYPE_VIEW_THRD"
160
               icon="icons/full/obj16/thread.gif"
173
               icon="icons/full/obj16/thread.gif"
161
               tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD_STATES"
174
               tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_THRD"
162
               class="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenThreadStatisticViewAction"
175
               class="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenThreadStatisticViewAction"
163
               toolbarPath="trace/group.statistic"
176
               toolbarPath="trace/group.statistic"
164
               id="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenThreadStatisticViewAction">
177
               id="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenThreadStatisticViewAction">
Lines 180-186 Link Here
180
               toolbarPath="trace/group.statistic"
193
               toolbarPath="trace/group.statistic"
181
               tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_CALL_STACK">
194
               tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_CALL_STACK">
182
         </action>
195
         </action>
196
         <action
197
               class="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenMemoryAnalysisViewAction"
198
               icon="icons/full/obj16/memleakantype_obj.gif"
199
               id="org.eclipse.tptp.trace.jvmti.internal.client.views.OpenMemoryAnalysisViewAction"
200
               label="%JVMTI_ANALYSIS_TYPE_VIEW_HEAP_ANALYSIS"
201
               style="push"
202
               toolbarPath="trace/group.statistic"
203
               tooltip="%JVMTI_ANALYSIS_TYPE_TOOLTIP_HEAP_ANALYSIS">
204
         </action>
183
      </actionSet>
205
      </actionSet>
184
   </extension>
206
   </extension>
207
    <extension
208
          point="org.eclipse.hyades.ui.contextProviders">
209
       <contextProvider
210
             class="org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider"
211
             id="org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider">
212
          <contexts>
213
             <context
214
                   refID="Java">
215
             </context>
216
          </contexts>
217
       </contextProvider>
218
    </extension>
185
219
186
</plugin>
220
</plugin>
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TraceCtrl.java (-11 / +12 lines)
Lines 18-34 Link Here
18
import org.eclipse.swt.events.PaintEvent;
18
import org.eclipse.swt.events.PaintEvent;
19
import org.eclipse.swt.events.PaintListener;
19
import org.eclipse.swt.events.PaintListener;
20
import org.eclipse.swt.graphics.Color;
20
import org.eclipse.swt.graphics.Color;
21
import org.eclipse.swt.graphics.GC;
22
import org.eclipse.swt.graphics.Point;
23
import org.eclipse.swt.graphics.Rectangle;
21
import org.eclipse.swt.graphics.Rectangle;
24
import org.eclipse.swt.widgets.Canvas;
22
import org.eclipse.swt.widgets.Canvas;
25
import org.eclipse.swt.widgets.Composite;
23
import org.eclipse.swt.widgets.Composite;
26
24
27
public abstract class TraceCtrl extends Canvas implements PaintListener {
25
public abstract class TraceCtrl extends Canvas implements PaintListener {
28
26
27
	static public final int MARGIN = 4;
28
	static public final int SMALL_ICON_SIZE = 16;
29
29
	protected TraceColorScheme _colors;
30
	protected TraceColorScheme _colors;
30
	protected Rectangle _rect0 = new Rectangle(0, 0, 0, 0);
31
	protected int _fontHeight = 0;
31
	protected Rectangle _rect1 = new Rectangle(0, 0, 0, 0);
32
32
33
	public TraceCtrl(Composite parent, TraceColorScheme colors) {
33
	public TraceCtrl(Composite parent, TraceColorScheme colors) {
34
		this(parent, colors, SWT.NO_BACKGROUND | SWT.NO_FOCUS);
34
		this(parent, colors, SWT.NO_BACKGROUND | SWT.NO_FOCUS);
Lines 47-63 Link Here
47
	public void paintControl(PaintEvent e) {
47
	public void paintControl(PaintEvent e) {
48
		if (e.widget != this)
48
		if (e.widget != this)
49
			return;
49
			return;
50
		Point size = getSize();
50
		_fontHeight = e.gc.getFontMetrics().getHeight();
51
		if (size.x > 0 && size.y > 0) {
51
		Rectangle bound = getClientArea();
52
		if (!bound.isEmpty()) {
52
			Color colBackup = e.gc.getBackground();
53
			Color colBackup = e.gc.getBackground();
53
			Utils.init(_rect0, 0, 0, size.x, size.y);
54
			paint(bound, e);
54
			paint(_rect0, e.gc);
55
			e.gc.setBackground(colBackup);
55
			e.gc.setBackground(colBackup);
56
		}
56
		}
57
	}
57
	}
58
58
59
	void paint(Rectangle rect, GC gc) {
59
	public int getFontHeight() {
60
		gc.setBackground(_colors.getColor(TraceColorScheme.BACKGROUND));
60
		return _fontHeight;
61
		gc.fillRectangle(rect);
62
	}
61
	}
62
63
	abstract void paint(Rectangle bound, PaintEvent e);
63
}
64
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadStatesCtrl.java (-115 / +214 lines)
Lines 35-74 Link Here
35
import org.eclipse.swt.events.MouseEvent;
35
import org.eclipse.swt.events.MouseEvent;
36
import org.eclipse.swt.events.MouseListener;
36
import org.eclipse.swt.events.MouseListener;
37
import org.eclipse.swt.events.MouseMoveListener;
37
import org.eclipse.swt.events.MouseMoveListener;
38
import org.eclipse.swt.events.MouseTrackListener;
39
import org.eclipse.swt.events.PaintEvent;
38
import org.eclipse.swt.events.SelectionEvent;
40
import org.eclipse.swt.events.SelectionEvent;
39
import org.eclipse.swt.events.SelectionListener;
41
import org.eclipse.swt.events.SelectionListener;
42
import org.eclipse.swt.graphics.Cursor;
40
import org.eclipse.swt.graphics.GC;
43
import org.eclipse.swt.graphics.GC;
44
import org.eclipse.swt.graphics.Image;
41
import org.eclipse.swt.graphics.Point;
45
import org.eclipse.swt.graphics.Point;
42
import org.eclipse.swt.graphics.Rectangle;
46
import org.eclipse.swt.graphics.Rectangle;
43
import org.eclipse.swt.widgets.Composite;
47
import org.eclipse.swt.widgets.Composite;
44
48
45
public class ThreadStatesCtrl extends TraceCtrl implements FocusListener,
49
public class ThreadStatesCtrl extends TraceCtrl implements FocusListener,
46
		KeyListener, MouseMoveListener, MouseListener, ControlListener,
50
		KeyListener, MouseMoveListener, MouseListener, ControlListener,
47
		SelectionListener {
51
		SelectionListener, MouseTrackListener {
48
52
49
	private ITimeDataProvider _timeProvider;
53
	private ITimeDataProvider _timeProvider;
50
	boolean _isInFocus = false;
54
	private boolean _isInFocus = false;
55
	private boolean _isDragCursor3 = false;
56
	private boolean _mouseHover = false;
51
	private int _topItem = 0;
57
	private int _topItem = 0;
52
	private int _itemHeight = 18;
58
	private int _itemHeight = 18;
53
	private int _dragState = 0;
59
	private int _dragState = 0;
54
	private int _hitIdx = 0;
60
	private int _hitIdx = 0;
55
	private int _dragX0 = 0;
61
	private int _dragX0 = 0;
56
	private int _dragX = 0;
62
	private int _dragX = 0;
63
	private int _idealNameWidth = 0;
57
	private double _timeStep = 0.01;
64
	private double _timeStep = 0.01;
58
	private double _time0bak;
65
	private double _time0bak;
59
	private double _time1bak;
66
	private double _time1bak;
60
	private ItemData _data = new ItemData();
67
	private ItemData _data = new ItemData();
61
	private ArrayList _selectionListeners;
68
	private ArrayList _selectionListeners;
62
69
	private Rectangle _rect0 = new Rectangle(0, 0, 0, 0);
70
	private Rectangle _rect1 = new Rectangle(0, 0, 0, 0);
71
	private Cursor _dragCursor3;
72
	
63
	public ThreadStatesCtrl(Composite parent, TraceColorScheme colors) {
73
	public ThreadStatesCtrl(Composite parent, TraceColorScheme colors) {
64
		super(parent, colors, SWT.NO_BACKGROUND | SWT.H_SCROLL | SWT.V_SCROLL);
74
		super(parent, colors, SWT.NO_BACKGROUND | SWT.H_SCROLL | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED);
65
		addFocusListener(this);
75
		addFocusListener(this);
66
		addMouseListener(this);
76
		addMouseListener(this);
67
		addMouseMoveListener(this);
77
		addMouseMoveListener(this);
78
		addMouseTrackListener(this);
68
		addKeyListener(this);
79
		addKeyListener(this);
69
		addControlListener(this);
80
		addControlListener(this);
70
		getVerticalBar().addSelectionListener(this);
81
		getVerticalBar().addSelectionListener(this);
71
		getHorizontalBar().addSelectionListener(this);
82
		getHorizontalBar().addSelectionListener(this);
83
		_dragCursor3 = new Cursor(parent.getDisplay(), SWT.CURSOR_SIZEWE);
84
	}
85
86
	public void dispose() {
87
		super.dispose();
88
		_dragCursor3.dispose();
72
	}
89
	}
73
90
74
	public void setTimeProvider(ITimeDataProvider timeProvider) {
91
	public void setTimeProvider(ITimeDataProvider timeProvider) {
Lines 141-147 Link Here
141
158
142
	boolean ensureVisibleItem(int idx, boolean redraw) {
159
	boolean ensureVisibleItem(int idx, boolean redraw) {
143
		boolean changed = false;
160
		boolean changed = false;
144
		if (idx < 0 || idx >= _data._items.length)
161
		if (idx < 0) {
162
			for (idx = 0; idx < _data._items.length; idx++) {
163
				if (((Item)_data._items[idx])._selected)
164
					break;
165
			}
166
		}
167
		if (idx >= _data._items.length)
145
			return changed;
168
			return changed;
146
		if (idx < _topItem) {
169
		if (idx < _topItem) {
147
			_topItem = idx;
170
			_topItem = idx;
Lines 162-210 Link Here
162
		return changed;
185
		return changed;
163
	}
186
	}
164
187
165
	static TRCThreadEvent getFirstEvent(TRCThread thread) {
166
		EList list = thread.getThreadEvents();
167
		TRCThreadEvent event = null;
168
		if (!list.isEmpty())
169
			event = (TRCThreadEvent) list.get(0);
170
		return event;
171
	}
172
173
	static TRCThreadEvent findEvent(TRCThread thread, double time, int n) {
174
		EList list = thread.getThreadEvents();
175
		Iterator it = list.iterator();
176
		TRCThreadEvent event = null;
177
		TRCThreadEvent prevEvent = null;
178
		TRCThreadEvent nextEvent = null;
179
		if (it.hasNext()) {
180
			event = (TRCThreadEvent) it.next();
181
			double currTime = event.getTime();
182
			if (time < currTime) {
183
				if (1 != n)
184
					event = null;
185
				return event;
186
			}
187
			while (it.hasNext()) {
188
				nextEvent = (TRCThreadEvent) it.next();
189
				double nextTime = nextEvent.getTime();
190
				if (currTime <= time && time < nextTime) {
191
					if (1 == n)
192
						event = nextEvent;
193
					else if (-1 == n)
194
						event = prevEvent;
195
					return event;
196
				}
197
				prevEvent = event;
198
				event = nextEvent;
199
			}
200
		}
201
		if (1 == n)
202
			event = null;
203
		else if (-1 == n)
204
			event = prevEvent;
205
		return event;
206
	}
207
208
	static class Selection implements IStructuredSelection {
188
	static class Selection implements IStructuredSelection {
209
189
210
		List list = new ArrayList();
190
		List list = new ArrayList();
Lines 241-247 Link Here
241
		TRCThread thread = getSelectedThread();
221
		TRCThread thread = getSelectedThread();
242
		if (null != thread && null != _timeProvider) {
222
		if (null != thread && null != _timeProvider) {
243
			double selectedTime = _timeProvider.getSelectedTime();
223
			double selectedTime = _timeProvider.getSelectedTime();
244
			TRCThreadEvent event = findEvent(thread, selectedTime, 0);
224
			TRCThreadEvent event = Utils.findEvent(thread, selectedTime, 0);
245
			if (null != event)
225
			if (null != event)
246
				sel.list.add(event);
226
				sel.list.add(event);
247
		}
227
		}
Lines 307-312 Link Here
307
			}
287
			}
308
		}
288
		}
309
		if (changed) {
289
		if (changed) {
290
			ensureVisibleItem(-1, false);
310
			redraw();
291
			redraw();
311
			fireSelectionChanged();
292
			fireSelectionChanged();
312
		}
293
		}
Lines 322-332 Link Here
322
		double endTime = _timeProvider.getEndTime();
303
		double endTime = _timeProvider.getEndTime();
323
		TRCThreadEvent nextEvent;
304
		TRCThreadEvent nextEvent;
324
		if (-1 == n && selectedTime >= endTime)
305
		if (-1 == n && selectedTime >= endTime)
325
			nextEvent = findEvent(thread, selectedTime, 0);
306
			nextEvent = Utils.findEvent(thread, selectedTime, 0);
326
		else
307
		else
327
			nextEvent = findEvent(thread, selectedTime, n);
308
			nextEvent = Utils.findEvent(thread, selectedTime, n);
328
		if (null == nextEvent && -1 == n)
309
		if (null == nextEvent && -1 == n)
329
			nextEvent = getFirstEvent(thread);
310
			nextEvent = Utils.getFirstEvent(thread);
330
		if (null != nextEvent) {
311
		if (null != nextEvent) {
331
			_timeProvider.setSelectedTime(nextEvent.getTime(), true);
312
			_timeProvider.setSelectedTime(nextEvent.getTime(), true);
332
			fireSelectionChanged();
313
			fireSelectionChanged();
Lines 389-397 Link Here
389
	}
370
	}
390
371
391
	int hitTest(int x, int y) {
372
	int hitTest(int x, int y) {
392
		if (x < 0)
373
		if (x < 0 || y < 0)
393
			return -1;
394
		if (y < 0)
395
			return -1;
374
			return -1;
396
		int hit = -1;
375
		int hit = -1;
397
		int idx = y / _itemHeight;
376
		int idx = y / _itemHeight;
Lines 401-406 Link Here
401
		return hit;
380
		return hit;
402
	}
381
	}
403
382
383
	int hitSplitTest(int x, int y) {
384
		if (x < 0 || y < 0 || null == _timeProvider)
385
			return -1;
386
		int w = 4;
387
		int hit = -1;
388
		int nameWidth = _timeProvider.getNameSpace();
389
		if (x > nameWidth - w && x < nameWidth + w)
390
			hit = 1;
391
		return hit;
392
	}
393
394
	public Item getItem(Point pt) {
395
	    int idx = hitTest(pt.x, pt.y);
396
	    return idx >= 0 ? (Item)_data._items[idx] : null;
397
	}
398
404
	double hitTimeTest(int x, int y) {
399
	double hitTimeTest(int x, int y) {
405
		if (null == _timeProvider)
400
		if (null == _timeProvider)
406
			return -1;
401
			return -1;
Lines 408-417 Link Here
408
		Point size = getCtrlSize();
403
		Point size = getCtrlSize();
409
		double time0 = _timeProvider.getTime0();
404
		double time0 = _timeProvider.getTime0();
410
		double time1 = _timeProvider.getTime1();
405
		double time1 = _timeProvider.getTime1();
411
		int left = _timeProvider.getNameSpace();
406
		int nameWidth = _timeProvider.getNameSpace();
412
		x -= left;
407
		x -= nameWidth;
413
		if (x >= 0 && size.x >= left) {
408
		if (x >= 0 && size.x >= nameWidth) {
414
			hitTime = time0 + (time1 - time0) * x / (size.x - left);
409
			hitTime = time0 + (time1 - time0) * x / (size.x - nameWidth);
415
		}
410
		}
416
		return hitTime;
411
		return hitTime;
417
	}
412
	}
Lines 460-537 Link Here
460
		return size;
455
		return size;
461
	}
456
	}
462
457
463
	void getNameRect(Rectangle rect, Point size, int idx, int nameWidth) {
458
	void getNameRect(Rectangle rect, Rectangle bound, int idx, int nameWidth) {
464
		idx -= _topItem;
459
		idx -= _topItem;
465
		rect.x = 0;
460
		rect.x = bound.x;
466
		rect.y = idx * _itemHeight;
461
		rect.y = bound.y + idx * _itemHeight;
467
		rect.width = nameWidth;
462
		rect.width = nameWidth;
468
		rect.height = _itemHeight;
463
		rect.height = _itemHeight;
469
	}
464
	}
470
465
471
	void getStatesRect(Rectangle rect, Point size, int idx, int nameWidth) {
466
	void getStatesRect(Rectangle rect, Rectangle bound, int idx, int nameWidth) {
472
		idx -= _topItem;
467
		idx -= _topItem;
473
		rect.x = nameWidth;
468
		rect.x = bound.x + nameWidth;
474
		rect.y = idx * _itemHeight;
469
		rect.y = bound.y + idx * _itemHeight;
475
		rect.width = size.x - rect.x;
470
		rect.width = bound.width - rect.x;
476
		rect.height = _itemHeight;
471
		rect.height = _itemHeight;
477
	}
472
	}
478
473
479
	void paint(Rectangle rect, GC gc) {
474
	void paint(Rectangle bound, PaintEvent e) {
480
		Point size = getCtrlSize();
475
		_itemHeight = getFontHeight() + 6;
481
		if (size.x < 2 || size.y < 2 || null == _timeProvider)
476
		if (bound.width < 2 || bound.height < 2 || null == _timeProvider)
482
			return;
477
			return;
478
		_idealNameWidth = 0;
479
		GC gc = e.gc;
480
		int nameWidth = _timeProvider.getNameSpace();
483
		double time0 = _timeProvider.getTime0();
481
		double time0 = _timeProvider.getTime0();
484
		double time1 = _timeProvider.getTime1();
482
		double time1 = _timeProvider.getTime1();
485
		double endTime = _timeProvider.getEndTime();
483
		double endTime = _timeProvider.getEndTime();
486
		double selectedTime = _timeProvider.getSelectedTime();
484
		double selectedTime = _timeProvider.getSelectedTime();
487
		int left = _timeProvider.getNameSpace();
488
		// draw thread states
485
		// draw thread states
489
		Object[] items = _data._items;
486
		Object[] items = _data._items;
490
		for (int i = _topItem; i < items.length; i++) {
487
		for (int i = _topItem; i < items.length; i++) {
491
			Item item = (Item) items[i];
488
			Item item = (Item) items[i];
492
			getNameRect(_rect0, size, i, left);
489
			getNameRect(_rect0, bound, i, nameWidth);
493
			if (_rect0.y >= size.y)
490
			if (_rect0.y >= bound.y + bound.height)
494
				break;
491
				break;
495
			if (item instanceof GroupItem) {
492
			if (item instanceof GroupItem) {
496
				getStatesRect(_rect1, size, i, left);
493
				getStatesRect(_rect1, bound, i, nameWidth);
497
				_rect0.width += _rect1.width;
494
				_rect0.width += _rect1.width;
498
				drawName(item, _rect0, gc);
495
				drawName(item, _rect0, gc);
499
			} else {
496
			} else {
500
				drawName(item, _rect0, gc);
497
				drawName(item, _rect0, gc);
501
				getStatesRect(_rect0, size, i, left);
502
				drawItemData(item, _rect0, time0, time1, endTime, selectedTime,
503
						gc);
504
			}
498
			}
499
			getStatesRect(_rect0, bound, i, nameWidth);
500
			drawItemData(item, _rect0, time0, time1, endTime, selectedTime, gc);
505
		}
501
		}
506
		// fill free canvas area
502
		// fill free canvas area
507
		_rect0.x = 0;
503
		_rect0.x = bound.x;
508
		_rect0.y += _rect0.height;
504
		_rect0.y += _rect0.height;
509
		_rect0.width = size.x;
505
		_rect0.width = bound.width;
510
		_rect0.height = size.y - _rect0.y;
506
		_rect0.height = bound.y + bound.height - _rect0.y;
511
		if (_rect0.y < size.y) {
507
		if (_rect0.y < bound.y + bound.height) {
512
			gc.setBackground(_colors.getColor(TraceColorScheme.BACKGROUND));
508
			gc.setBackground(_colors.getColor(TraceColorScheme.BACKGROUND));
513
			gc.fillRectangle(_rect0);
509
			gc.fillRectangle(_rect0);
514
		}
510
		}
511
		// draw drag line
512
		if (3 == _dragState) {
513
			gc.setForeground(_colors.getColor(TraceColorScheme.BLACK));
514
			gc.drawLine(bound.x + nameWidth, bound.y, bound.x + nameWidth, bound.y + bound.height - 1);
515
		} else if (0 == _dragState && _mouseHover) {
516
			gc.setForeground(_colors.getColor(TraceColorScheme.RED));
517
			gc.drawLine(bound.x + nameWidth, bound.y, bound.x + nameWidth, bound.y + bound.height - 1);
518
		}
515
	}
519
	}
516
520
517
	void drawName(Item item, Rectangle rect, GC gc) {
521
	void drawName(Item item, Rectangle rect, GC gc) {
518
		boolean group = item instanceof GroupItem;
522
		boolean group = item instanceof GroupItem;
519
		int elemHeight = rect.height / 2;
523
		int elemHeight = rect.height / 2;
520
		int elemWidth = elemHeight;
524
		int elemWidth = elemHeight;
525
		String name = item._name;
521
		if (group) {
526
		if (group) {
522
			gc.setBackground(_colors.getBkColorGroup(item._selected, _isInFocus));
527
			gc.setBackground(_colors.getBkColorGroup(item._selected, _isInFocus));
523
			gc.fillRectangle(rect);
528
			gc.fillRectangle(rect);
524
			if (item._selected && _isInFocus) {
529
			if (item._selected && _isInFocus) {
525
				gc.setForeground(_colors.getBkColor(item._selected, _isInFocus, false));
530
				gc.setForeground(_colors.getBkColor(item._selected, _isInFocus, false));
526
				//gc.drawRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2);
531
				gc.drawRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2);
527
				gc.drawRoundRectangle(rect.x, rect.y, rect.width - 2, rect.height - 2, 2, 2);
528
			}
532
			}
529
			gc.setForeground(_colors.getBkColor(false, false, false));
533
			gc.setForeground(_colors.getBkColor(false, false, false));
530
			gc.drawLine(rect.x, rect.y + rect.height - 1, rect.width - 1, rect.y + rect.height - 1);
534
			gc.drawLine(rect.x, rect.y + rect.height - 1, rect.width - 1, rect.y + rect.height - 1);
531
			gc.setForeground(_colors.getFgColorGroup(false, false));
535
			gc.setForeground(_colors.getFgColorGroup(false, false));
532
			gc.setBackground(_colors.getBkColor(false, false, false));
536
			gc.setBackground(_colors.getBkColor(false, false, false));
533
			Utils.init(_rect1, rect);
537
			Utils.init(_rect1, rect);
534
			_rect1.x += 2;
538
			_rect1.x += MARGIN;
535
			_rect1.y += (rect.height - elemHeight) / 2;
539
			_rect1.y += (rect.height - elemHeight) / 2;
536
			_rect1.width = elemWidth;
540
			_rect1.width = elemWidth;
537
			_rect1.height = elemHeight;
541
			_rect1.height = elemHeight;
Lines 544-571 Link Here
544
				gc.drawLine(p, _rect1.y + 2, p, _rect1.y + _rect1.height - 3);
548
				gc.drawLine(p, _rect1.y + 2, p, _rect1.y + _rect1.height - 3);
545
			}
549
			}
546
			gc.setForeground(_colors.getFgColorGroup(item._selected, _isInFocus));
550
			gc.setForeground(_colors.getFgColorGroup(item._selected, _isInFocus));
547
			elemWidth+= 4;
551
			elemWidth+= MARGIN;
548
		} else {
552
		} else {
549
			gc.setBackground(_colors.getBkColor(item._selected, _isInFocus, true));
553
			gc.setBackground(_colors.getBkColor(item._selected, _isInFocus, true));
550
			gc.setForeground(_colors.getFgColor(item._selected, _isInFocus));
554
			gc.setForeground(_colors.getFgColor(item._selected, _isInFocus));
551
			gc.fillRectangle(rect);
555
			gc.fillRectangle(rect);
556
			Utils.init(_rect1, rect);
557
			_rect1.x += MARGIN;
558
			// draw icon
559
			TRCThread thread = ((ThreadItem)item)._thread;
560
			Image img = Utils.getItemImage(thread);
561
			if (null != img) {
562
				_rect1.y += (rect.height - img.getImageData().height) / 2;
563
				gc.drawImage(img, _rect1.x, _rect1.y);
564
			}
565
			elemWidth = SMALL_ICON_SIZE;
566
			// cut long string with "..."
567
			Point size = gc.stringExtent(name);
568
			if (_idealNameWidth < size.x)
569
				_idealNameWidth = size.x;
570
			int width = rect.width - MARGIN - MARGIN - elemWidth;
571
			int cuts = 0;
572
			while (size.x > width && name.length() > 1) {
573
				cuts++;
574
				name = name.substring(0, name.length() - 1);
575
				size = gc.stringExtent(name + "...");
576
			}
577
			if (cuts > 0)
578
				name += "...";
579
			elemWidth+= MARGIN;
552
		}
580
		}
553
		Utils.init(_rect1, rect);
581
		Utils.init(_rect1, rect);
554
		int leftMargin = 4 + (group ? elemWidth : 0);
582
		int leftMargin = MARGIN + elemWidth;
555
		_rect1.x += leftMargin;
583
		_rect1.x += leftMargin;
556
		_rect1.width -= leftMargin;
584
		_rect1.width -= leftMargin;
557
		int textWidth = 0;
585
		int textWidth = 0;
558
		// draw text
586
		// draw text
559
		if (_rect1.width > 0) {
587
		if (_rect1.width > 0) {
560
			String name = group ? item._name + " (group}" : item._name;
588
			_rect1.y += 2;
561
			textWidth = Utils.drawText(gc, name, _rect1, true) + 8;
589
			textWidth = Utils.drawText(gc, name, _rect1, true) + 8;
590
			_rect1.y -= 2;
562
		}
591
		}
563
		// draw middle line
592
		// draw middle line
564
		Utils.init(_rect1, rect);
593
		if (_rect1.width > 0 && !group) {
565
		_rect1.x += textWidth;
594
			Utils.init(_rect1, rect);
566
		_rect1.width -= textWidth;
595
			_rect1.x += leftMargin + textWidth;
567
		gc.setForeground(_colors.getColor(TraceColorScheme.LIGHT_LINE));
596
			_rect1.width -= textWidth;
568
		if (_rect1.width > 0 && item instanceof ThreadItem) {
597
			gc.setForeground(_colors.getColor(TraceColorScheme.MID_LINE));
569
			int midy = _rect1.y + _rect1.height / 2;
598
			int midy = _rect1.y + _rect1.height / 2;
570
			gc.drawLine(_rect1.x, midy, _rect1.x + _rect1.width, midy);
599
			gc.drawLine(_rect1.x, midy, _rect1.x + _rect1.width, midy);
571
		}
600
		}
Lines 586-595 Link Here
586
		Utils.init(_rect1, rect);
615
		Utils.init(_rect1, rect);
587
		boolean selected = item._selected;
616
		boolean selected = item._selected;
588
		double K = (double) rect.width / (time1 - time0);
617
		double K = (double) rect.width / (time1 - time0);
618
		boolean group = item instanceof GroupItem;
589
619
590
		if (item instanceof GroupItem) {
620
		if (group) {
591
			gc.setBackground(_colors.getBkColorGroup(selected, _isInFocus));
621
			//gc.setBackground(_colors.getBkColorGroup(selected, _isInFocus));
592
			gc.fillRectangle(rect);
622
			//gc.fillRectangle(rect);
593
		} else if (item instanceof ThreadItem) {
623
		} else if (item instanceof ThreadItem) {
594
			TRCThread thread = ((ThreadItem) item)._thread;
624
			TRCThread thread = ((ThreadItem) item)._thread;
595
			int x0 = rect.x;
625
			int x0 = rect.x;
Lines 612-623 Link Here
612
				// fill space before first event
642
				// fill space before first event
613
				if (x0 > rect.x) {
643
				if (x0 > rect.x) {
614
					_rect1.width = (x0 <= xEnd ? x0 : xEnd) - _rect1.x;
644
					_rect1.width = (x0 <= xEnd ? x0 : xEnd) - _rect1.x;
615
					gc.setBackground(_colors.getBkColor(selected, _isInFocus,
645
					gc.setBackground(_colors.getBkColor(selected, _isInFocus, false));
616
							false));
617
					gc.fillRectangle(_rect1);
646
					gc.fillRectangle(_rect1);
618
					// draw middle line
647
					// draw middle line
619
					gc.setForeground(_colors
648
					gc.setForeground(_colors.getColor(TraceColorScheme.MID_LINE));
620
							.getColor(TraceColorScheme.MID_LINE));
621
					int midy = _rect1.y + _rect1.height / 2;
649
					int midy = _rect1.y + _rect1.height / 2;
622
					gc.drawLine(_rect1.x, midy, _rect1.x + _rect1.width, midy);
650
					gc.drawLine(_rect1.x, midy, _rect1.x + _rect1.width, midy);
623
				}
651
				}
Lines 667-673 Link Here
667
695
668
			// draw focus ares
696
			// draw focus ares
669
			Utils.init(_rect1, rect);
697
			Utils.init(_rect1, rect);
670
			gc.setForeground(_colors.getBkColor(false, false, false));
698
			gc.setForeground(_colors.getBkColor(selected, _isInFocus, false));
671
			int y = _rect1.y;
699
			int y = _rect1.y;
672
			gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y);
700
			gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y);
673
			y++;
701
			y++;
Lines 680-694 Link Here
680
			gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y);
708
			gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y);
681
			y--;
709
			y--;
682
			gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y);
710
			gc.drawLine(_rect1.x, y, _rect1.x + _rect1.width, y);
683
			// gc.setForeground(_colors.getBkColor(selected, _isInFocus,
684
			// false));
685
		}
711
		}
686
712
687
		// draw selected time
713
		// draw selected time
688
		int x = rect.x + (int) ((selectedTime - time0) * K);
714
		int x = rect.x + (int) ((selectedTime - time0) * K);
689
		if (x >= rect.x && x < rect.x + rect.width) {
715
		if (x >= rect.x && x < rect.x + rect.width) {
690
			gc.setForeground(_colors.getColor(TraceColorScheme.SELECTED_TIME));
716
			gc.setForeground(_colors.getColor(TraceColorScheme.SELECTED_TIME));
691
			gc.drawLine(x, rect.y, x, rect.y + rect.height);
717
			if (group)
718
				gc.drawLine(x, rect.y + rect.height - 1, x, rect.y + rect.height);
719
			else
720
				gc.drawLine(x, rect.y, x, rect.y + rect.height);
692
		}
721
		}
693
	}
722
	}
694
723
Lines 756-762 Link Here
756
785
757
	public void focusLost(FocusEvent e) {
786
	public void focusLost(FocusEvent e) {
758
		_isInFocus = false;
787
		_isInFocus = false;
759
		if (1 == _dragState) {
788
		if (0 != _dragState) {
760
			setCapture(false);
789
			setCapture(false);
761
			_dragState = 0;
790
			_dragState = 0;
762
		}
791
		}
Lines 764-777 Link Here
764
	}
793
	}
765
794
766
	public void mouseMove(MouseEvent e) {
795
	public void mouseMove(MouseEvent e) {
796
		if (null == _timeProvider)
797
			return;
767
		Point size = getCtrlSize();
798
		Point size = getCtrlSize();
768
		if (1 == _dragState && null != _timeProvider) {
799
		if (1 == _dragState) {
769
			int leftSpace = _timeProvider.getNameSpace();
800
			int nameWidth = _timeProvider.getNameSpace();
770
			int x = e.x - leftSpace;
801
			int x = e.x - nameWidth;
771
			if (x > 0 && size.x > leftSpace && _dragX != x) {
802
			if (x > 0 && size.x > nameWidth && _dragX != x) {
772
				_dragX = x;
803
				_dragX = x;
773
				double K = (double) (size.x - leftSpace)
804
				double K = (double) (size.x - nameWidth) / (_time1bak - _time0bak);
774
						/ (_time1bak - _time0bak);
775
				double timeDelta = (_dragX - _dragX0) / K;
805
				double timeDelta = (_dragX - _dragX0) / K;
776
				double time1 = _time1bak - timeDelta;
806
				double time1 = _time1bak - timeDelta;
777
				double maxTime = _timeProvider.getMaxTime();
807
				double maxTime = _timeProvider.getMaxTime();
Lines 782-793 Link Here
782
					time0 = 0;
812
					time0 = 0;
783
				_timeProvider.setStartFinishTime(time0, time1);
813
				_timeProvider.setStartFinishTime(time0, time1);
784
			}
814
			}
815
		} else if (3 == _dragState) {
816
			_dragX = e.x;
817
			_timeProvider.setNameSpace(_hitIdx + _dragX - _dragX0);
818
		} else if (0 == _dragState) {
819
			boolean mouseHover = hitSplitTest(e.x, e.y) > 0;
820
			if (_mouseHover != mouseHover)
821
				redraw();
822
			_mouseHover = mouseHover;
785
		}
823
		}
824
		updateCursor(e.x, e.y);
786
	}
825
	}
787
826
788
	public void mouseDoubleClick(MouseEvent e) {
827
	public void mouseDoubleClick(MouseEvent e) {
828
		if (null == _timeProvider)
829
			return;
789
		if (1 == e.button) {
830
		if (1 == e.button) {
790
			int idx = hitTest(e.x, e.y);
831
			int idx = hitSplitTest(e.x, e.y);
832
			if (idx >= 0) {
833
				_timeProvider.setNameSpace(_idealNameWidth + 3 * MARGIN + SMALL_ICON_SIZE);
834
				return;
835
			}
836
			idx = hitTest(e.x, e.y);
791
			if (idx >= 0) {
837
			if (idx >= 0) {
792
				selectItem(idx, false);
838
				selectItem(idx, false);
793
				if (_data._items[idx] instanceof ThreadItem) {
839
				if (_data._items[idx] instanceof ThreadItem) {
Lines 797-807 Link Here
797
		}
843
		}
798
	}
844
	}
799
845
846
	void updateCursor(int x, int y) {
847
		int idx = hitSplitTest(x, y);
848
		if (idx > 0 && !_isDragCursor3) {
849
			setCursor(_dragCursor3);
850
			_isDragCursor3 = true;
851
		} else if (idx <= 0 && _isDragCursor3) {
852
			setCursor(null);
853
			_isDragCursor3 = false;
854
		}
855
	}
856
800
	public void mouseDown(MouseEvent e) {
857
	public void mouseDown(MouseEvent e) {
801
		if (null == _timeProvider)
858
		if (null == _timeProvider)
802
			return;
859
			return;
803
		if (1 == e.button) {
860
		if (1 == e.button) {
804
			int idx = hitTest(e.x, e.y);
861
			int idx = hitSplitTest(e.x, e.y);
862
			if (idx > 0) {
863
				_dragState = 3;
864
				_dragX = _dragX0 = e.x;
865
				_hitIdx = _timeProvider.getNameSpace();;
866
				_time0bak = _timeProvider.getTime0();
867
				_time1bak = _timeProvider.getTime1();
868
				redraw();
869
				return;
870
			}
871
			idx = hitTest(e.x, e.y);
805
			if (idx >= 0) {
872
			if (idx >= 0) {
806
				if (_data._items[idx] instanceof ThreadItem) {
873
				if (_data._items[idx] instanceof ThreadItem) {
807
					double hitTime = hitTimeTest(e.x, e.y);
874
					double hitTime = hitTimeTest(e.x, e.y);
Lines 829-834 Link Here
829
			if (2 == _dragState) {
896
			if (2 == _dragState) {
830
				if (hitTest(e.x, e.y) == _hitIdx)
897
				if (hitTest(e.x, e.y) == _hitIdx)
831
					toggle(_hitIdx);
898
					toggle(_hitIdx);
899
			} else if (3 == _dragState) {
900
				redraw();
832
			}
901
			}
833
			_dragState = 0;
902
			_dragState = 0;
834
		}
903
		}
Lines 861-866 Link Here
861
			_timeProvider.setStartFinishTime(time0, time1);
930
			_timeProvider.setStartFinishTime(time0, time1);
862
		}
931
		}
863
	}
932
	}
933
934
	public void mouseEnter(MouseEvent e) {
935
	}
936
937
	public void mouseExit(MouseEvent e) {
938
		if (_mouseHover) {
939
			_mouseHover = false;
940
			redraw();
941
		}
942
	}
943
944
	public void mouseHover(MouseEvent e) {
945
	}
864
}
946
}
865
947
866
class Item {
948
class Item {
Lines 882-888 Link Here
882
	public TRCThread _thread;
964
	public TRCThread _thread;
883
965
884
	ThreadItem(TRCThread thread) {
966
	ThreadItem(TRCThread thread) {
885
		super(thread.getName());
967
		super(Utils.composeThreadName(thread, false));
886
		_thread = thread;
968
		_thread = thread;
887
	}
969
	}
888
}
970
}
Lines 928-933 Link Here
928
		}
1010
		}
929
	}
1011
	}
930
1012
1013
	ThreadItem findThreadItem(TRCThread thread) {
1014
		ThreadItem threadItem = null;
1015
		for (int i = 0; i < _items.length; i++) {
1016
			if (_items[i] instanceof ThreadItem &&
1017
					((ThreadItem)_items[i])._thread == thread) {
1018
				threadItem = (ThreadItem) _items[i];
1019
				break;
1020
			}
1021
		}
1022
		return threadItem;
1023
	}
1024
931
	public void updateItems() {
1025
	public void updateItems() {
932
		ArrayList itemList = new ArrayList();
1026
		ArrayList itemList = new ArrayList();
933
		Set keys = _groupTable.keySet();
1027
		Set keys = _groupTable.keySet();
Lines 939-946 Link Here
939
				itemList.add(group);
1033
				itemList.add(group);
940
			if (_flatList || group._expanded) {
1034
			if (_flatList || group._expanded) {
941
				Iterator it2 = group._threads.iterator();
1035
				Iterator it2 = group._threads.iterator();
942
				while (it2.hasNext())
1036
				while (it2.hasNext()) {
943
					itemList.add(new ThreadItem((TRCThread) it2.next()));
1037
					TRCThread thread = (TRCThread) it2.next();
1038
					ThreadItem threadItem = findThreadItem(thread);
1039
					if (threadItem == null)
1040
						threadItem = new ThreadItem(thread);
1041
					itemList.add(threadItem);
1042
				}
944
			}
1043
			}
945
		}
1044
		}
946
		_items = itemList.toArray();
1045
		_items = itemList.toArray();
Lines 972-978 Link Here
972
				groupName = undef;
1071
				groupName = undef;
973
			GroupItem group = (GroupItem) _groupTable.get(groupName);
1072
			GroupItem group = (GroupItem) _groupTable.get(groupName);
974
			if (null == group) {
1073
			if (null == group) {
975
				group = new GroupItem(groupName);
1074
				group = new GroupItem("Thread Group [" + groupName + "]");
976
				group._expanded = !groupName.equalsIgnoreCase("system")
1075
				group._expanded = !groupName.equalsIgnoreCase("system")
977
						&& !groupName.equalsIgnoreCase(undef);
1076
						&& !groupName.equalsIgnoreCase(undef);
978
				_groupTable.put(groupName, group);
1077
				_groupTable.put(groupName, group);
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/LegendCtrl.java (-20 / +24 lines)
Lines 14-19 Link Here
14
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.widgets;
15
package org.eclipse.tptp.trace.jvmti.internal.client.widgets;
16
16
17
import org.eclipse.swt.events.PaintEvent;
17
import org.eclipse.swt.graphics.GC;
18
import org.eclipse.swt.graphics.GC;
18
import org.eclipse.swt.graphics.Point;
19
import org.eclipse.swt.graphics.Point;
19
import org.eclipse.swt.graphics.Rectangle;
20
import org.eclipse.swt.graphics.Rectangle;
Lines 23-28 Link Here
23
public class LegendCtrl extends TraceCtrl {
24
public class LegendCtrl extends TraceCtrl {
24
25
25
	static private String _names[];
26
	static private String _names[];
27
	private Rectangle _rect0 = new Rectangle(0, 0, 0, 0);
26
28
27
	public LegendCtrl(Composite parent, TraceColorScheme colors) {
29
	public LegendCtrl(Composite parent, TraceColorScheme colors) {
28
		super(parent, colors);
30
		super(parent, colors);
Lines 31-71 Link Here
31
	static private String [] getNames() {
33
	static private String [] getNames() {
32
		if (null == _names) {
34
		if (null == _names) {
33
			String names[] = {
35
			String names[] = {
34
					UIMessages._267, // "Unknown",
36
					UIMessages._Unknown, // "Unknown",
35
					UIMessages._261, // "Running",
37
					UIMessages._Running, // "Running",
36
					UIMessages._262, // "Sleeping",
38
					UIMessages._Sleeping, // "Sleeping",
37
					UIMessages._263, // "Waiting",
39
					UIMessages._Waiting, // "Waiting",
38
					UIMessages._264, // "Blocked",
40
					UIMessages._Blocked, // "Blocked",
39
					UIMessages._265, // "Deadlock",
41
					UIMessages._Deadlocked, // "Deadlock",
40
					UIMessages._266, // "Stopped",
42
					UIMessages._Stopped, // "Stopped",
41
			};
43
			};
42
			_names = names;
44
			_names = names;
43
		}
45
		}
44
		return _names;
46
		return _names;
45
	}
47
	}
46
48
47
	void paint(Rectangle rect, GC gc) {
49
	void paint(Rectangle rect, PaintEvent e) {
50
		GC gc = e.gc;
48
		gc.setBackground(_colors.getColor(TraceColorScheme.LEGEND_BACKGROUND));
51
		gc.setBackground(_colors.getColor(TraceColorScheme.LEGEND_BACKGROUND));
49
		gc.fillRectangle(rect);
52
		gc.fillRectangle(rect);
50
		// draw legend rect
53
		// draw legend rect
51
		Utils.init(_rect1, rect);
54
		Utils.init(_rect0, rect);
52
		//gc.setForeground(_colors.getColor(TraceColorScheme.LEGEND_FOREGROUND));
55
		//gc.setForeground(_colors.getColor(TraceColorScheme.LEGEND_FOREGROUND));
53
		//gc.drawRectangle(_rect1.x, _rect1.y, _rect1.width - 1, _rect1.height - 1);
56
		//gc.drawRectangle(_rect0.x, _rect0.y, _rect0.width - 1, _rect0.height - 1);
57
		//gc.drawRoundRectangle(_rect0.x, _rect0.y, _rect0.width - 1, _rect0.height - 1, 5, 5);
54
		// draw legend elements
58
		// draw legend elements
55
		int idx = 0;
59
		int idx = 0;
56
		String names[] = getNames();
60
		String names[] = getNames();
57
		_rect1.x += 4;
61
		_rect0.x += 4;
58
		_rect1.y += 2;
62
		_rect0.y += 4;
59
		while (idx < names.length && _rect1.x < rect.x + rect.width) {
63
		while (idx < names.length && _rect0.x < rect.x + rect.width) {
60
			Point size = gc.stringExtent(names[idx]);
64
			Point size = gc.stringExtent(names[idx]);
61
			_rect1.width = 16;
65
			_rect0.width = 16;
62
			_rect1.height = size.y;
66
			_rect0.height = size.y;
63
			Utils.drawState(_colors, idx, _rect1, gc, false, true, false);
67
			Utils.drawState(_colors, idx, _rect0, gc, false, true, false);
64
			_rect1.x += _rect1.width + 2;
68
			_rect0.x += _rect0.width + 2;
65
			_rect1.width = size.x;
69
			_rect0.width = size.x;
66
			gc.setForeground(_colors.getColor(TraceColorScheme.LEGEND_FOREGROUND));
70
			gc.setForeground(_colors.getColor(TraceColorScheme.LEGEND_FOREGROUND));
67
			Utils.drawText(gc, names[idx], _rect1, true);
71
			Utils.drawText(gc, names[idx], _rect0, true);
68
			_rect1.x += _rect1.width + 8;
72
			_rect0.x += _rect0.width + 8;
69
			idx++;
73
			idx++;
70
		}
74
		}
71
	}
75
	}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/TimeScaleCtrl.java (-31 / +35 lines)
Lines 14-32 Link Here
14
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.widgets;
15
package org.eclipse.tptp.trace.jvmti.internal.client.widgets;
16
16
17
import org.eclipse.swt.SWT;
17
import org.eclipse.swt.events.MouseEvent;
18
import org.eclipse.swt.events.MouseEvent;
18
import org.eclipse.swt.events.MouseListener;
19
import org.eclipse.swt.events.MouseListener;
19
import org.eclipse.swt.events.MouseMoveListener;
20
import org.eclipse.swt.events.MouseMoveListener;
21
import org.eclipse.swt.events.PaintEvent;
20
import org.eclipse.swt.graphics.GC;
22
import org.eclipse.swt.graphics.GC;
21
import org.eclipse.swt.graphics.Point;
23
import org.eclipse.swt.graphics.Point;
22
import org.eclipse.swt.graphics.Rectangle;
24
import org.eclipse.swt.graphics.Rectangle;
23
import org.eclipse.swt.widgets.Composite;
25
import org.eclipse.swt.widgets.Composite;
24
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
25
26
26
public class TimeScaleCtrl extends TraceCtrl implements MouseListener, MouseMoveListener {
27
public class TimeScaleCtrl extends TraceCtrl implements MouseListener, MouseMoveListener {
27
28
28
	public TimeScaleCtrl(Composite parent, TraceColorScheme colors) {
29
	public TimeScaleCtrl(Composite parent, TraceColorScheme colors) {
29
		super(parent, colors);
30
		super(parent, colors, SWT.NO_BACKGROUND | SWT.NO_FOCUS | SWT.DOUBLE_BUFFERED);
30
		addMouseListener(this);
31
		addMouseListener(this);
31
		addMouseMoveListener(this);
32
		addMouseMoveListener(this);
32
	}
33
	}
Lines 38-43 Link Here
38
	private double _time0bak;
39
	private double _time0bak;
39
	private double _time1bak;
40
	private double _time1bak;
40
	private boolean _isInUpdate;
41
	private boolean _isInUpdate;
42
	private Rectangle _rect0 = new Rectangle(0, 0, 0, 0);
41
43
42
	public void setTimeProvider(ITimeDataProvider timeProvider) {
44
	public void setTimeProvider(ITimeDataProvider timeProvider) {
43
		_timeProvider = timeProvider;
45
		_timeProvider = timeProvider;
Lines 88-98 Link Here
88
		return timeDraw;
90
		return timeDraw;
89
	}
91
	}
90
92
91
	void paint(Rectangle rect, GC gc) {
93
	void paint(Rectangle rect, PaintEvent e) {
92
94
93
		if (_isInUpdate || null == _timeProvider)
95
		if (_isInUpdate || null == _timeProvider)
94
			return;
96
			return;
95
97
98
		GC gc = e.gc;
96
		if (null == _timeProvider) {
99
		if (null == _timeProvider) {
97
			gc.fillRectangle(rect);
100
			gc.fillRectangle(rect);
98
			return;
101
			return;
Lines 106-115 Link Here
106
		int leftSpace = _timeProvider.getNameSpace();
109
		int leftSpace = _timeProvider.getNameSpace();
107
		int timeSpace = _timeProvider.getTimeSpace();
110
		int timeSpace = _timeProvider.getTimeSpace();
108
111
109
		if (time1 <= time0) {
112
		if (time1 <= time0 || timeSpace < 2) {
110
			gc.fillRectangle(rect);
113
			gc.fillRectangle(rect);
111
			return;
114
			return;
112
		}
115
		}
116
113
		double timeRange = time1 - time0;
117
		double timeRange = time1 - time0;
114
		int numDigits = 8; // 11:222
118
		int numDigits = 8; // 11:222
115
		if (timeRange < .00001)
119
		if (timeRange < .00001)
Lines 117-123 Link Here
117
		else if (timeRange < .01)
121
		else if (timeRange < .01)
118
			numDigits = 12; // 11:222:333__
122
			numDigits = 12; // 11:222:333__
119
123
120
		Utils.init(_rect1, rect);
124
		Utils.init(_rect0, rect);
121
		int labelWidth = gc.getCharWidth('0') * numDigits;
125
		int labelWidth = gc.getCharWidth('0') * numDigits;
122
		double K = 1;
126
		double K = 1;
123
		if (rect.width - leftSpace > 0) {
127
		if (rect.width - leftSpace > 0) {
Lines 127-183 Link Here
127
		TimeDraw timeDraw = getTimeDraw(_timeDelta);
131
		TimeDraw timeDraw = getTimeDraw(_timeDelta);
128
132
129
		// draw top left area
133
		// draw top left area
130
		_rect1.width = leftSpace;
134
		_rect0.width = leftSpace;
131
		gc.fillRectangle(_rect1);
135
		gc.fillRectangle(_rect0);
132
		_rect1.x += 4;
136
		_rect0.x += 4;
133
		_rect1.width -= 4;
137
		_rect0.width -= 4;
134
		if (_rect1.width > 0) {
138
		if (_rect0.width > 0) {
135
			if (rect.width - leftSpace > 0)
139
			if (false && rect.width - leftSpace > 0)
136
				Utils.drawText(gc, "Time: " + timeDraw.hint(), _rect1, true);
140
				Utils.drawText(gc, "Time scale: " + timeDraw.hint(), _rect0, true);
137
			else
141
			else
138
				Utils.drawText(gc, UIMessages.TIME_SCALE, _rect1, true);
142
				Utils.drawText(gc, "Time scale:", _rect0, true);
139
		}
143
		}
140
		_rect1.x -= 4;
144
		_rect0.x -= 4;
141
		_rect1.width += 4;
145
		_rect0.width += 4;
142
146
143
		// prepare and draw right rect of the timescale
147
		// prepare and draw right rect of the timescale
144
		_rect1.x += leftSpace;
148
		_rect0.x += leftSpace;
145
		_rect1.width = rect.width - leftSpace;
149
		_rect0.width = rect.width - leftSpace;
146
150
147
		// draw bottom border and erase all other area
151
		// draw bottom border and erase all other area
148
		gc.drawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1,
152
		gc.drawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1,
149
				rect.y + rect.height - 1);
153
				rect.y + rect.height - 1);
150
		_rect1.height--;
154
		_rect0.height--;
151
		gc.fillRectangle(_rect1);
155
		gc.fillRectangle(_rect0);
152
156
153
		if (_rect1.isEmpty())
157
		if (_rect0.isEmpty())
154
			return;
158
			return;
155
159
156
		// draw selected time
160
		// draw selected time
157
		int x = _rect1.x + (int) ((selectedTime - time0) * K);
161
		int x = _rect0.x + (int) ((selectedTime - time0) * K);
158
		if (x >= _rect1.x && x < _rect1.x + _rect1.width) {
162
		if (x >= _rect0.x && x < _rect0.x + _rect0.width) {
159
			gc.setForeground(_colors.getColor(TraceColorScheme.SELECTED_TIME));
163
			gc.setForeground(_colors.getColor(TraceColorScheme.SELECTED_TIME));
160
			gc.drawLine(x, _rect1.y + _rect1.height - 6, x, _rect1.y + _rect1.height);
164
			gc.drawLine(x, _rect0.y + _rect0.height - 6, x, _rect0.y + _rect0.height);
161
			gc.setForeground(_colors.getColor(TraceColorScheme.TOOL_FOREGROUND));
165
			gc.setForeground(_colors.getColor(TraceColorScheme.TOOL_FOREGROUND));
162
		}
166
		}
163
167
164
		// draw time scale ticks
168
		// draw time scale ticks
165
		_rect1.y = rect.y;
169
		_rect0.y = rect.y;
166
		_rect1.height = rect.height - 4;
170
		_rect0.height = rect.height - 4;
167
		_rect1.width = labelWidth;
171
		_rect0.width = labelWidth;
168
		double time = Math.floor(time0 / _timeDeltaD) * _timeDeltaD;
172
		double time = Math.floor(time0 / _timeDeltaD) * _timeDeltaD;
169
		long t = (long)(time * 1000000000);
173
		long t = (long)(time * 1000000000);
170
		int y = _rect1.y + _rect1.height;
174
		int y = _rect0.y + _rect0.height;
171
		while (true) {
175
		while (true) {
172
			x = rect.x + leftSpace + (int) ((time - time0) * K);
176
			x = rect.x + leftSpace + (int) ((time - time0) * K);
173
			if (x >= rect.x + leftSpace + rect.width - _rect1.width) {
177
			if (x >= rect.x + leftSpace + rect.width - _rect0.width) {
174
				break;
178
				break;
175
			}
179
			}
176
			if (x >= rect.x + leftSpace) {
180
			if (x >= rect.x + leftSpace) {
177
				gc.drawLine(x, y, x, y + 4);
181
				gc.drawLine(x, y, x, y + 4);
178
				_rect1.x = x;
182
				_rect0.x = x;
179
				if (x + _rect1.width <= rect.x + rect.width)
183
				if (x + _rect0.width <= rect.x + rect.width)
180
					timeDraw.draw(gc, t, _rect1);
184
					timeDraw.draw(gc, t, _rect0);
181
			}
185
			}
182
			time += _timeDeltaD;
186
			time += _timeDeltaD;
183
			t += _timeDelta;
187
			t += _timeDelta;
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/Utils.java (-6 / +366 lines)
Lines 14-19 Link Here
14
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.widgets;
15
package org.eclipse.tptp.trace.jvmti.internal.client.widgets;
16
16
17
import java.util.Iterator;
18
19
import org.eclipse.emf.common.util.EList;
20
import org.eclipse.emf.ecore.EObject;
21
import org.eclipse.hyades.models.hierarchy.TRCAnnotation;
22
import org.eclipse.hyades.models.trace.TRCClass;
23
import org.eclipse.hyades.models.trace.TRCMethod;
24
import org.eclipse.hyades.models.trace.TRCMethodInvocation;
25
import org.eclipse.hyades.models.trace.TRCPackage;
26
import org.eclipse.hyades.models.trace.TRCThread;
17
import org.eclipse.hyades.models.trace.TRCThreadDeadEvent;
27
import org.eclipse.hyades.models.trace.TRCThreadDeadEvent;
18
import org.eclipse.hyades.models.trace.TRCThreadDeadLockEvent;
28
import org.eclipse.hyades.models.trace.TRCThreadDeadLockEvent;
19
import org.eclipse.hyades.models.trace.TRCThreadEvent;
29
import org.eclipse.hyades.models.trace.TRCThreadEvent;
Lines 21-36 Link Here
21
import org.eclipse.hyades.models.trace.TRCThreadSleepingEvent;
31
import org.eclipse.hyades.models.trace.TRCThreadSleepingEvent;
22
import org.eclipse.hyades.models.trace.TRCThreadWaitingForLockEvent;
32
import org.eclipse.hyades.models.trace.TRCThreadWaitingForLockEvent;
23
import org.eclipse.hyades.models.trace.TRCThreadWaitingForObjectEvent;
33
import org.eclipse.hyades.models.trace.TRCThreadWaitingForObjectEvent;
34
import org.eclipse.hyades.trace.ui.ITraceSelection;
35
import org.eclipse.hyades.trace.ui.UIPlugin;
36
import org.eclipse.hyades.trace.views.internal.TraceUIPlugin;
37
import org.eclipse.hyades.ui.provisional.context.ContextManager;
38
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
39
import org.eclipse.jface.action.Action;
40
import org.eclipse.jface.resource.ImageDescriptor;
24
import org.eclipse.swt.SWT;
41
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.graphics.Color;
42
import org.eclipse.swt.graphics.Color;
26
import org.eclipse.swt.graphics.Device;
43
import org.eclipse.swt.graphics.Device;
27
import org.eclipse.swt.graphics.GC;
44
import org.eclipse.swt.graphics.GC;
45
import org.eclipse.swt.graphics.Image;
28
import org.eclipse.swt.graphics.Point;
46
import org.eclipse.swt.graphics.Point;
29
import org.eclipse.swt.graphics.Rectangle;
47
import org.eclipse.swt.graphics.Rectangle;
30
import org.eclipse.swt.widgets.Display;
48
import org.eclipse.swt.widgets.Display;
49
import org.eclipse.tptp.trace.jvmti.internal.client.MethodDetails;
50
import org.eclipse.tptp.trace.jvmti.internal.client.TITracePlugin;
51
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
52
import org.eclipse.ui.plugin.AbstractUIPlugin;
31
53
32
public class Utils {
54
public class Utils {
33
55
56
	static public final int IMG_THREAD_RUNNING = 0;
57
	static public final int IMG_THREAD_SUSPENDED = 1;
58
	static public final int IMG_THREAD_STOPPED = 2;
59
	static public final int IMG_METHOD_RUNNING = 3;
60
	static public final int IMG_METHOD = 4;
61
	static public final int IMG_NUM = 5;
62
63
	static public final Object[] _empty = new Object[0];
64
65
	static private String _externalPlugin[] = {
66
			"org.eclipse.debug.ui",
67
			"org.eclipse.debug.ui",
68
			"org.eclipse.debug.ui",
69
			"org.eclipse.debug.ui",
70
			"org.eclipse.debug.ui",
71
			};
72
73
	static private String _externalPath[] = {
74
			"icons/full/obj16/thread_obj.gif", // running thread
75
			"icons/full/obj16/threads_obj.gif", // suspended
76
			"icons/full/obj16/threadt_obj.gif", // stopped
77
			"icons/full/obj16/stckframe_running_obj.gif", // running stack frame
78
			"icons/full/obj16/stckframe_obj.gif", // stack frame
79
			};
80
81
	static public Image getImage(int idx) {
82
		if (idx < 0 || idx >= IMG_NUM)
83
			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
84
		String key = "trace.img." + idx;
85
		Image img = TITracePlugin.getDefault().getImageRegistry().get(key);
86
		if (null == img) {
87
			ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin(
88
					_externalPlugin[idx], _externalPath[idx]);
89
			TITracePlugin.getDefault().getImageRegistry().put(key, desc);
90
			img = TITracePlugin.getDefault().getImageRegistry().get(key);
91
		}
92
		return img;
93
	}
94
34
	static public void init(Rectangle rect) {
95
	static public void init(Rectangle rect) {
35
		rect.x = 0;
96
		rect.x = 0;
36
		rect.y = 0;
97
		rect.y = 0;
Lines 97-112 Link Here
97
			Rectangle rect, GC gc, boolean selected, boolean rectBound, boolean timeSelected) {
158
			Rectangle rect, GC gc, boolean selected, boolean rectBound, boolean timeSelected) {
98
		if (rect.isEmpty())
159
		if (rect.isEmpty())
99
			return;
160
			return;
100
		// FILL RECT
161
		// fill all rect area
101
		int colorIdx1 = colorIdx;
162
		int colorIdx1 = colorIdx;
102
		timeSelected = timeSelected && selected;
163
		timeSelected = timeSelected && selected;
103
		if (selected)
164
		if (timeSelected)
104
			colorIdx1 = colorIdx + TraceColorScheme.STATES_SEL0 - TraceColorScheme.STATES0;
165
			colorIdx1 = colorIdx + TraceColorScheme.STATES_SEL0 - TraceColorScheme.STATES0;
105
		gc.setBackground(colors.getColor(colorIdx1));
166
		gc.setBackground(colors.getColor(colorIdx1));
106
		gc.fillRectangle(rect);
167
		gc.fillRectangle(rect);
107
		colorIdx1 = colorIdx + TraceColorScheme.STATES_BORDER0 - TraceColorScheme.STATES0;
168
		colorIdx1 = colorIdx + TraceColorScheme.STATES_BORDER0 - TraceColorScheme.STATES0;
108
		gc.setForeground(colors.getColor(colorIdx1));
169
		gc.setForeground(colors.getColor(colorIdx1));
109
		// DRAW BOUNDS
170
		// draw bounds
110
		if (!timeSelected) {
171
		if (!timeSelected) {
111
			if (rectBound && rect.width >= 3) {
172
			if (rectBound && rect.width >= 3) {
112
				gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1);
173
				gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1);
Lines 115-121 Link Here
115
				gc.drawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1, rect.y + rect.height - 1);
176
				gc.drawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1, rect.y + rect.height - 1);
116
			}
177
			}
117
		}
178
		}
118
		// DRAW MID LINE
179
		// draw decoration middle line
119
		int mindy = rect.y + rect.height / 2;
180
		int mindy = rect.y + rect.height / 2;
120
		if (TraceColorScheme.BLOCKED == colorIdx || TraceColorScheme.WAITING == colorIdx) {
181
		if (TraceColorScheme.BLOCKED == colorIdx || TraceColorScheme.WAITING == colorIdx) {
121
			int s = gc.getLineStyle();
182
			int s = gc.getLineStyle();
Lines 131-140 Link Here
131
			gc.drawLine(rect.x, mindy, rect.x + rect.width, mindy);
192
			gc.drawLine(rect.x, mindy, rect.x + rect.width, mindy);
132
			gc.setLineWidth(w);
193
			gc.setLineWidth(w);
133
		}
194
		}
134
		// DRAW SELECTED BOUNDS
195
		// draw selection bounds
135
		if (timeSelected) {
196
		if (timeSelected) {
197
			gc.setForeground(colors.getColor(TraceColorScheme.SELECTED_TIME));
136
			if (rect.width >= 3) {
198
			if (rect.width >= 3) {
137
				gc.setForeground(colors.getColor(TraceColorScheme.SELECTED_TIME));
138
				gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1);
199
				gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1);
139
				//gc.drawRectangle(rect.x + 1, rect.y + 1, rect.width - 3, rect.height - 3);
200
				//gc.drawRectangle(rect.x + 1, rect.y + 1, rect.width - 3, rect.height - 3);
140
			} else {
201
			} else {
Lines 167-170 Link Here
167
		gc.drawText(text, rect.x, rect.y, transp);
228
		gc.drawText(text, rect.x, rect.y, transp);
168
		return size.x;
229
		return size.x;
169
	}
230
	}
231
232
	static public String composeThreadName(TRCThread thread, boolean inclState) {
233
		String name = thread.getName();
234
		String threadClass = getThreadClassName(thread);
235
		if (threadClass != null && threadClass.length() > 0) {
236
			name += " [" + threadClass + "]";
237
		}
238
		if (inclState) {
239
			EList list = thread.getThreadEvents();
240
			if (null != list && list.size() > 0)
241
				name+= " (" + getEventName2((TRCThreadEvent)list.get(list.size() - 1)) + ")";
242
		}
243
		return name;
244
	}
245
246
	static public String getThreadClassName(TRCThread thread) {
247
		String name = "";
248
		TRCClass cls = null;
249
		TRCPackage pkg = null;
250
		if (thread.getThreadObject() != null) {
251
			cls = thread.getThreadObject().getIsA();
252
		} else if (thread.getInitialInvocations().size() > 0) {
253
			cls = ((TRCMethodInvocation) thread.getInitialInvocations().get(0)).getMethod().getDefiningClass();
254
		}
255
		if (cls != null)
256
			pkg = cls.getPackage();
257
		if (cls != null && pkg != null) {
258
			name = "".equals(pkg.getName()) ? cls.getName() : (pkg.getName() + "." + cls.getName());
259
		}
260
		return name;
261
	}
262
263
	static public String composeMethodName(TRCMethodInvocation method) {
264
		TRCMethod m = method.getMethod();
265
		String name = "";
266
		name += m.getDefiningClass().getName();
267
		name += ".";
268
		name += m.getName();
269
		name += m.getSignature();
270
		name += " [" + m.getCalls() + "]";
271
		return name;
272
	}
273
274
	static public String getEventName(TRCThreadEvent event) {
275
		if (event instanceof TRCThreadRunningEvent) {
276
			return UIMessages._Running;
277
		} else if (event instanceof TRCThreadSleepingEvent) {
278
			return UIMessages._Sleeping;
279
		} else if (event instanceof TRCThreadDeadLockEvent) {
280
			return UIMessages._Deadlocked;
281
		} else if (event instanceof TRCThreadWaitingForLockEvent) {
282
			return UIMessages._Blocked;
283
		} else if (event instanceof TRCThreadWaitingForObjectEvent) {
284
			return UIMessages._Waiting;
285
		} else if (event instanceof TRCThreadDeadEvent) {
286
			return UIMessages._Stopped;
287
		}
288
		return UIMessages._Unknown;
289
	}
290
291
	static public String getEventName2(TRCThreadEvent event) {
292
		if (event instanceof TRCThreadRunningEvent) {
293
			return UIMessages._running;
294
		} else if (event instanceof TRCThreadSleepingEvent) {
295
			return UIMessages._sleeping;
296
		} else if (event instanceof TRCThreadDeadLockEvent) {
297
			return UIMessages._deadlocked;
298
		} else if (event instanceof TRCThreadWaitingForLockEvent) {
299
			return UIMessages._blocked;
300
		} else if (event instanceof TRCThreadWaitingForObjectEvent) {
301
			return UIMessages._waiting;
302
		} else if (event instanceof TRCThreadDeadEvent) {
303
			return UIMessages._stopped;
304
		}
305
		return UIMessages._unknown;
306
	}
307
308
	static public String composeEventName(TRCThreadEvent event) {
309
		String name = event.getThread().getName();
310
		name += " [" + event.getThread().getGroupName() + "] (" + getEventName2(event);
311
		if (event instanceof TRCThreadWaitingForObjectEvent) {
312
			name += " timeout=" + ((TRCThreadWaitingForObjectEvent)event).getTimeout();
313
		} else if (event instanceof TRCThreadWaitingForLockEvent) {
314
			TRCThread thread = ((TRCThreadWaitingForLockEvent)event).getLockingThread();
315
			if (null != thread)
316
				name += " by thread=" + thread.getName();
317
		}
318
		name += ")";
319
		return name;
320
	}
321
322
	static public String composeMethodName(MethodDetails method) {
323
		String name = "";
324
		if (method.name != null)
325
			name += method.name;
326
		if (method.signature != null)
327
			name += method.signature;
328
		if (method.line >= 0)
329
			name += " line: " + method.line;
330
		return name;
331
	}
332
333
	static public Image getItemImage(Object obj) {
334
		if (obj instanceof MethodDetails) {
335
			if (((MethodDetails)obj).running)
336
				return getImage(IMG_METHOD_RUNNING);
337
			else
338
				return getImage(IMG_METHOD);
339
		}
340
		if (obj instanceof TRCThread) {
341
			EList list = ((TRCThread)obj).getThreadEvents();
342
			if (null != list && list.size() > 0)
343
				obj = list.get(list.size() - 1);
344
			else if (((TRCThread)obj).getStopTime() > 0)
345
				return getImage(IMG_THREAD_STOPPED);
346
			else
347
				return getImage(IMG_THREAD_RUNNING);
348
		}
349
		if (obj instanceof TRCThreadEvent) {
350
			if (obj instanceof TRCThreadDeadEvent)
351
				return getImage(IMG_THREAD_STOPPED);
352
			else if (obj instanceof TRCThreadRunningEvent)
353
				return getImage(IMG_THREAD_RUNNING);
354
			else
355
				return getImage(IMG_THREAD_SUSPENDED);
356
		}
357
		return null;
358
	}
359
360
	static public void setActionProperties(Action action, String context,
361
			String attributeId) {
362
		String strLevel = null;
363
		Image icon = null;
364
		IContextLabelFormatProvider clfp = ContextManager.getContextLabelFormatProvider(context
365
				, attributeId, IContextLabelFormatProvider.MODE_VIEW_ACTION);
366
		if (clfp != null) {
367
			strLevel = clfp.getDisplayStringFromElement(attributeId, null, IContextLabelFormatProvider.MODE_VIEW_ACTION);
368
			icon = clfp.getDisplayImageByElement(attributeId, null, IContextLabelFormatProvider.MODE_VIEW_ACTION);
369
		} else {
370
			strLevel = attributeId;
371
		}
372
		action.setText(strLevel);
373
		action.setImageDescriptor(ImageDescriptor.createFromImage(icon));
374
		action.setDescription(strLevel);
375
		action.setToolTipText(strLevel);
376
	}
377
378
	static public Object[] getCallStack(TRCThreadEvent event) {
379
		Object[] ret = _empty;
380
		EList list = event.getAnnotations();
381
		TRCAnnotation callStackDumpMethods = null;
382
		TRCAnnotation callStackDumpLineNumbers = null;
383
		if (null != list) {
384
			for (int i = 0; i < list.size(); i++) {
385
				TRCAnnotation annotation = (TRCAnnotation) list.get(i);
386
				if (annotation.getName().equals("callStackDumpMethods"))
387
					callStackDumpMethods = annotation;
388
				else if (annotation.getName().equals("callStackDumpLineNumbers"))
389
					callStackDumpLineNumbers = annotation;
390
			}
391
		}
392
		if (null != callStackDumpMethods) {
393
			list = callStackDumpMethods.getValues();
394
			ret = new Object[list.size()];
395
			for (int i = 0; i < list.size(); i++) {
396
				String name = list.get(i).toString();
397
				String sig = null;
398
				int pos = name.indexOf('(');
399
				if (pos >= 0) {
400
					sig = name.substring(pos + 1);
401
					name = name.substring(0, pos);
402
				}
403
				MethodDetails method = new MethodDetails(name, sig);
404
				method.running = event instanceof TRCThreadRunningEvent;
405
				ret[i] = method;
406
			}
407
			if (null != callStackDumpLineNumbers) {
408
				list = callStackDumpLineNumbers.getValues();
409
				for (int i = 0; i < ret.length && i < list.size(); i++) {
410
					((MethodDetails)ret[i]).line = Integer.parseInt(list.get(i).toString());
411
				}
412
			}
413
		}
414
		return ret;
415
	}
416
417
	static public boolean canOpenSourceOnThisObject(EObject mofObj) {
418
		ITraceSelection _model = UIPlugin.getDefault().getSelectionModel(mofObj);
419
		if (_model.size() == 0 || _model.getFirstElement() == null) {
420
			return false;
421
		}
422
		Object firstElement = _model.getFirstElement();
423
		if (firstElement instanceof TRCClass &&
424
			((TRCClass)firstElement).getSourceInfo() != null &&
425
			((TRCClass)firstElement).getSourceInfo().getLocation().length() > 0) {
426
			return true;
427
		} else if (firstElement instanceof TRCMethod) {
428
			return true;
429
		}
430
		return false;
431
	}
432
433
	/**
434
	 * Formats time in format: MM:SS:NNN
435
	 * @param v
436
	 * @return
437
	 */
438
	static public String formatTime(double v) {
439
		StringBuffer str = new StringBuffer();
440
		boolean neg = v < 0;
441
		if (neg) {
442
			v = -v;
443
			str.append('-');
444
		}
445
		long sec = (long) v;
446
		if (sec / 60 < 10)
447
			str.append('0');
448
		str.append(sec / 60);
449
		str.append(':');
450
		sec %= 60;
451
		if (sec < 10)
452
			str.append('0');
453
		str.append(sec);
454
		str.append(':');
455
		long ms = (long) (v * 1000);
456
		ms %= 1000;
457
		if (ms < 10)
458
			str.append("00");
459
		else if (ms < 100)
460
			str.append('0');
461
		str.append(ms);
462
		return str.toString();
463
	}
464
465
	static public int loadIntOption(String opt, int def, int min, int max) {
466
		int val = TraceUIPlugin.getDefault().getPreferenceStore().getInt(opt);
467
		if (0 == val)
468
			val = def;
469
		if (val < min)
470
			val = min;
471
		if (val > max)
472
			val = max;
473
		return val;
474
	}
475
476
	static public void saveIntOption(String opt, int val) {
477
		TraceUIPlugin.getDefault().getPreferenceStore().setValue(opt, val);
478
	}
479
480
	static TRCThreadEvent getFirstEvent(TRCThread thread) {
481
		EList list = thread.getThreadEvents();
482
		TRCThreadEvent event = null;
483
		if (!list.isEmpty())
484
			event = (TRCThreadEvent) list.get(0);
485
		return event;
486
	}
487
488
	static TRCThreadEvent findEvent(TRCThread thread, double time, int n) {
489
		EList list = thread.getThreadEvents();
490
		Iterator it = list.iterator();
491
		TRCThreadEvent event = null;
492
		TRCThreadEvent prevEvent = null;
493
		TRCThreadEvent nextEvent = null;
494
		if (it.hasNext()) {
495
			event = (TRCThreadEvent) it.next();
496
			double currTime = event.getTime();
497
			if (time < currTime) {
498
				if (1 != n)
499
					event = null;
500
				return event;
501
			}
502
			while (it.hasNext()) {
503
				nextEvent = (TRCThreadEvent) it.next();
504
				double nextTime = nextEvent.getTime();
505
				if (currTime <= time && time < nextTime) {
506
					if (1 == n)
507
						event = nextEvent;
508
					else if (-1 == n)
509
						event = prevEvent;
510
					return event;
511
				}
512
				prevEvent = event;
513
				event = nextEvent;
514
			}
515
		}
516
		if (1 == n)
517
			event = null;
518
		else if (-1 == n)
519
			event = prevEvent;
520
		return event;
521
	}
522
523
	static public TRCPackage getPackage(Object element) {
524
		if (element instanceof TRCPackage)
525
			return (TRCPackage) element;
526
		if (element instanceof TRCClass)
527
			return ((TRCClass) element).getPackage();
528
		return null;
529
	}
170
}
530
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ITimeDataProvider.java (+2 lines)
Lines 40-44 Link Here
40
40
41
	int getNameSpace();
41
	int getNameSpace();
42
42
43
	void setNameSpace(int width);
44
43
	int getTimeSpace();
45
	int getTimeSpace();
44
}
46
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockedTimeLP.java (+42 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
23
24
public class ThreadDeadlockedTimeLP extends AttrLPAdapter {
25
26
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
27
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
28
			return UIMessages._THREAD_DEADLOCKED_TIME;
29
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
30
			if (value != null && value instanceof Double)
31
				return Utils.formatTime(((Double)value).doubleValue());
32
		}
33
		return "";
34
	}
35
36
	protected List internalSupportModes() {
37
		List modes = super.internalSupportModes();
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
40
		return modes;
41
	}
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/widgets/ThreadsTipHandler.java (+183 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Vitaly A. Provodin, Intel - Initial API and implementation
11
 *
12
 * $Id:
13
 *****************************************************************************/
14
package org.eclipse.tptp.trace.jvmti.internal.client.widgets;
15
16
import org.eclipse.hyades.models.trace.TRCObject;
17
import org.eclipse.hyades.models.trace.TRCThread;
18
import org.eclipse.hyades.models.trace.TRCThreadEvent;
19
import org.eclipse.hyades.models.trace.TRCThreadWaitingForLockEvent;
20
import org.eclipse.hyades.models.trace.TRCThreadWaitingForObjectEvent;
21
import org.eclipse.hyades.trace.views.internal.TraceUIMessages;
22
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.events.MouseAdapter;
24
import org.eclipse.swt.events.MouseEvent;
25
import org.eclipse.swt.events.MouseTrackAdapter;
26
import org.eclipse.swt.graphics.Point;
27
import org.eclipse.swt.graphics.Rectangle;
28
import org.eclipse.swt.layout.GridData;
29
import org.eclipse.swt.layout.GridLayout;
30
import org.eclipse.swt.widgets.Control;
31
import org.eclipse.swt.widgets.Display;
32
import org.eclipse.swt.widgets.Shell;
33
import org.eclipse.swt.widgets.Table;
34
import org.eclipse.swt.widgets.TableColumn;
35
import org.eclipse.swt.widgets.TableItem;
36
import org.eclipse.swt.widgets.Widget;
37
38
public class ThreadsTipHandler {
39
40
    private Shell tipShell;
41
    private Table tipTable;
42
    private Item tipItem;
43
    private Point tipPosition;
44
45
    public ThreadsTipHandler(Shell parent) {
46
	final Display display = parent.getDisplay();
47
48
	tipShell = new Shell(parent, SWT.ON_TOP | SWT.TOOL);
49
	GridLayout gridLayout = new GridLayout();
50
	gridLayout.numColumns = 2;
51
	gridLayout.marginWidth = 2;
52
	gridLayout.marginHeight = 2;
53
	tipShell.setLayout(gridLayout);
54
	tipShell.setBackground(display
55
		.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
56
57
	tipTable = new Table(tipShell, SWT.NONE);
58
	tipTable.setForeground(display
59
		.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
60
	tipTable.setBackground(display
61
		.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
62
	tipTable.setHeaderVisible(false);
63
	tipTable.setLinesVisible(false);
64
65
	tipTable.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
66
		| GridData.VERTICAL_ALIGN_CENTER));
67
    }
68
69
    public void activateHoverHelp(final Control control) {
70
	control.addMouseListener(new MouseAdapter() {
71
	    public void mouseDown(MouseEvent e) {
72
		if (tipShell.isVisible())
73
		    tipShell.setVisible(false);
74
	    }
75
	});
76
77
	control.addMouseTrackListener(new MouseTrackAdapter() {
78
	    public void mouseExit(MouseEvent e) {
79
		if (tipShell.isVisible())
80
		    tipShell.setVisible(false);
81
		tipItem = null;
82
83
	    }
84
85
	    private void addItem(String name, String value) {
86
		TableItem line = new TableItem(tipTable, SWT.NONE);
87
		line.setText(0, name);
88
		line.setText(1, value);
89
	    }
90
91
	    private void fillValues(Point pt,
92
		    ThreadStatesCtrl threadStates, Item item) {
93
		if (item instanceof ThreadItem) {
94
		    TRCThread thrd = ((ThreadItem) item)._thread;
95
		    TRCThreadEvent threadEvent = Utils.findEvent(
96
			    thrd, threadStates.hitTimeTest(pt.x, pt.y), 0);
97
		    TRCThreadEvent nextEvent = Utils.findEvent(thrd,
98
			    threadStates.hitTimeTest(pt.x, pt.y), 1);
99
		    // thread name
100
		    addItem(TraceUIMessages._203, thrd.getName());
101
		    // class name
102
		    addItem(TraceUIMessages._198, Utils.getThreadClassName(thrd));
103
		    // thread state
104
		    addItem(TraceUIMessages._255, Utils.getEventName(threadEvent));
105
106
		    TRCObject obj;
107
		    if (threadEvent instanceof TRCThreadWaitingForObjectEvent) {
108
			TRCThreadWaitingForObjectEvent event = (TRCThreadWaitingForObjectEvent) threadEvent;
109
			obj = event.getObjectWaitingFor();
110
			addItem("object for which the thread wait",
111
				obj != null ? obj.getIsA().getName() : "null");
112
			addItem("timeout", "" + event.getTimeout());
113
114
		    } else if (threadEvent instanceof TRCThreadWaitingForLockEvent) {
115
			TRCThreadWaitingForLockEvent event = (TRCThreadWaitingForLockEvent) threadEvent;
116
			TRCThread thread = event.getLockingThread();
117
			if (thread != null)
118
			    addItem("locking thread", thread.getName()
119
				    + "[" + Utils.getThreadClassName(thread) + "]");
120
			obj = event.getLockedObject();
121
			addItem("locked object", obj != null ? obj
122
				.toString() : "null");
123
124
		    }
125
126
		    // start time
127
		    double startTime = threadEvent == null ? thrd
128
			    .getStartTime() : threadEvent.getTime();
129
		    double stopTime = (nextEvent == null ? thrd.getStopTime()
130
			    : nextEvent.getTime());
131
		    double duration = stopTime - startTime;
132
		    addItem(TraceUIMessages._253, Utils.formatTime(startTime));
133
		    addItem("Duration", duration > 0 ? Utils.formatTime(duration) : "?");
134
135
		} else if (item instanceof GroupItem) {
136
		    addItem("Group name", item.toString());
137
		    addItem("Number of threads", ""
138
			    + ((GroupItem) item)._threads.size());
139
		}
140
	    }
141
142
	    public void mouseHover(MouseEvent event) {
143
		Point pt = new Point(event.x, event.y);
144
		Widget widget = event.widget;
145
		Item item = null;
146
		if (widget instanceof ThreadStatesCtrl) {
147
		    ThreadStatesCtrl threadStates = (ThreadStatesCtrl) widget;
148
		    item = (Item) threadStates.getItem(pt);
149
		    tipTable.remove(0, tipTable.getItemCount() - 1);
150
		    new TableColumn(tipTable, SWT.NONE);
151
		    new TableColumn(tipTable, SWT.NONE);
152
		    fillValues(pt, threadStates, item);
153
		    tipTable.getColumn(0).setWidth(100);
154
		    tipTable.getColumn(1).pack();
155
		    tipTable.setSize(tipTable.computeSize(SWT.DEFAULT, 200));
156
		    tipShell.pack();
157
		} else if (widget == null) {
158
		    tipShell.setVisible(false);
159
		    tipItem = null;
160
		    return;
161
		}
162
		if (item == tipItem)
163
		    return;
164
		tipItem = item;
165
		tipPosition = control.toDisplay(pt);
166
		tipShell.pack();
167
		setHoverLocation(tipShell, tipPosition);
168
		tipShell.setVisible(true);
169
	    }
170
	});
171
    }
172
173
    private void setHoverLocation(Shell shell, Point position) {
174
	Rectangle displayBounds = shell.getDisplay().getBounds();
175
	Rectangle shellBounds = shell.getBounds();
176
	shellBounds.x = Math.max(Math.min(position.x, displayBounds.width
177
		- shellBounds.width), 0);
178
	shellBounds.y = Math.max(Math.min(position.y + 16, displayBounds.height
179
		- shellBounds.height), 0);
180
	shell.setBounds(shellBounds);
181
    }
182
183
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStartTimeLP.java (+42 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
23
24
public class ThreadStartTimeLP extends AttrLPAdapter {
25
26
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
27
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
28
			return UIMessages._THREAD_START_TIME;
29
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
30
			if (value != null && value instanceof Double)
31
				return Utils.formatTime(((Double)value).doubleValue());
32
		}
33
		return "";
34
	}
35
36
	protected List internalSupportModes() {
37
		List modes = super.internalSupportModes();
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
40
		return modes;
41
	}
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadClassNameLP.java (+43 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.models.trace.TRCThread;
20
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
21
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
22
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
23
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
24
25
public class ThreadClassNameLP extends AttrLPAdapter {
26
27
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
28
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
29
			return UIMessages._THREAD_CLASS_NAME;
30
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
31
			if (element instanceof TRCThread)
32
				return Utils.getThreadClassName((TRCThread)element);
33
		}
34
		return "";
35
	}
36
37
	protected List internalSupportModes() {
38
		List modes = super.internalSupportModes();
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
40
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
41
		return modes;
42
	}
43
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/LineNumberLP.java (+39 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
23
public class LineNumberLP extends AttrLPAdapter {
24
25
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
26
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
27
			return UIMessages._LINE_NUMBER;
28
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT)
29
			return "placeholder (Line Number)";
30
		return "";
31
	}
32
33
	protected List internalSupportModes() {
34
		List modes = super.internalSupportModes();
35
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
36
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
37
		return modes;
38
	}
39
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveSizeLabelAdapter.java (+67 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import org.eclipse.hyades.models.trace.TRCClass;
14
import org.eclipse.hyades.models.trace.TRCMethod;
15
import org.eclipse.hyades.models.trace.TRCPackage;
16
import org.eclipse.hyades.trace.ui.internal.util.TString;
17
import org.eclipse.hyades.trace.views.internal.TracePluginImages;
18
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ActiveSizeColumnLabel;
19
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
20
import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails;
21
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
22
import org.eclipse.swt.graphics.Image;
23
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
24
25
public class LiveSizeLabelAdapter extends ActiveSizeColumnLabel {
26
27
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
28
29
		String attributeId = getContextAttribute(element, info);
30
		if (attributeId == null)
31
			return "";
32
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
33
		if (!info.isDeltaColumn) {
34
			if (info.showPercentage)
35
				return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max);
36
			else
37
				return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
38
		} else {
39
			if (element instanceof TRCPackage
40
					|| element instanceof TRCClass
41
					|| element instanceof TRCMethod
42
					|| element instanceof MethodCallDetails)
43
				return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
44
			else
45
				return "";
46
		}
47
	}
48
	
49
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
50
		if (!info.isDeltaColumn) {
51
			Number delta = getDelta(element, info);
52
			double d = delta != null ? delta.doubleValue() : 0;
53
			if (d < 0)
54
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN);
55
			if (d > 0)
56
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP);
57
			else {
58
				String attributeId = getContextAttribute(element, info);
59
				if (attributeId == null)
60
					return null;
61
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
62
				return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
63
			}
64
		}
65
		return null;
66
	}
67
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadDeadlockCountLP.java (+41 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
23
public class ThreadDeadlockCountLP extends AttrLPAdapter {
24
25
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
26
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
27
			return UIMessages._THREAD_DEADLOCK_COUNT;
28
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
29
			if (value != null && value instanceof Integer)
30
				return value.toString();
31
		}
32
		return "";
33
	}
34
35
	protected List internalSupportModes() {
36
		List modes = super.internalSupportModes();
37
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
39
		return modes;
40
	}
41
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockedTimeLP.java (+39 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
23
public class ThreadBlockedTimeLP extends AttrLPAdapter {
24
25
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
26
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
27
			return UIMessages._THREAD_BLOCKED_TIME;
28
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT)
29
			return "placeholder (Avg. Age)";
30
		return "";
31
	}
32
33
	protected List internalSupportModes() {
34
		List modes = super.internalSupportModes();
35
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
36
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
37
		return modes;
38
	}
39
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadNameLP.java (+42 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.models.trace.TRCThread;
20
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
21
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
22
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
23
24
public class ThreadNameLP extends AttrLPAdapter {
25
26
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
27
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
28
			return UIMessages._THREAD_NAME;
29
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
30
			if (element instanceof TRCThread)
31
				return ((TRCThread)element).getName();
32
		}
33
		return "";
34
	}
35
36
	protected List internalSupportModes() {
37
		List modes = super.internalSupportModes();
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
40
		return modes;
41
	}
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextProvider.java (+128 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.ArrayList;
18
import java.util.HashMap;
19
import java.util.Map;
20
21
import org.eclipse.hyades.trace.views.internal.context.java.BasicContextProvider;
22
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
23
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
24
25
public class TIContextProvider extends BasicContextProvider implements TIContextAttributes {
26
27
	private Map _contextLabelFormatProviders;
28
	private ArrayList _supportAttributes;
29
	static private TIContextProvider _instance;
30
31
	static public TIContextProvider instance() {
32
		if (null == _instance)
33
			_instance = new TIContextProvider();
34
		return _instance;
35
	}
36
37
	public TIContextProvider() {
38
		_instance = this;
39
		_contextLabelFormatProviders = new HashMap();
40
		_supportAttributes = new ArrayList();
41
		_supportAttributes.add(METHOD_LINE_NUMBER);
42
		_supportAttributes.add(PACKAGE_AVG_AGE);
43
		_supportAttributes.add(PACKAGE_GENERATIONS);
44
		_supportAttributes.add(CLASS_AVG_AGE);
45
		_supportAttributes.add(CLASS_GENERATIONS);
46
		_supportAttributes.add(CALL_SITE_AVG_AGE);
47
		_supportAttributes.add(CALL_SITE_GENERATIONS);
48
		_supportAttributes.add(THREAD_NAME);
49
		_supportAttributes.add(THREAD_CLASS_NAME);
50
		_supportAttributes.add(THREAD_START_TIME);
51
		_supportAttributes.add(THREAD_STOP_TIME);
52
		_supportAttributes.add(THREAD_STATE);
53
		_supportAttributes.add(THREAD_RUNNING_TIME);
54
		_supportAttributes.add(THREAD_SLEEPING_TIME);
55
		_supportAttributes.add(THREAD_WAITING_TIME);
56
		_supportAttributes.add(THREAD_BLOCKED_TIME);
57
		_supportAttributes.add(THREAD_DEADLOCKED_TIME);
58
		_supportAttributes.add(THREAD_BLOCK_COUNT);
59
		_supportAttributes.add(THREAD_DEADLOCK_COUNT);
60
	}
61
62
	public String getBaseProvider() {
63
		//return "org.eclipse.hyades.trace.views.internal.context.java.BasicContextProvider";
64
		return null;
65
	}
66
67
	public IContextLabelFormatProvider getContextLabelFormatProvider(String key) {
68
		IContextLabelFormatProvider result = (IContextLabelFormatProvider) _contextLabelFormatProviders.get(key);
69
		if (result != null) {
70
			return result;
71
		} else if (_supportAttributes.contains(key)) {
72
			if (key.equals(METHOD_LINE_NUMBER))
73
				result = new LineNumberLP();
74
			else if (key.equals(PACKAGE_AVG_AGE) || key.equals(CLASS_AVG_AGE) || key.equals(CALL_SITE_AVG_AGE))
75
				result = new AverageAgeLP();
76
			else if (key.equals(PACKAGE_GENERATIONS) || key.equals(CLASS_GENERATIONS) || key.equals(CALL_SITE_GENERATIONS))
77
				result = new GenerationsLP();
78
			else if (key.equals(IContextAttributes.THREAD_NAME))
79
				result = new ThreadNameLP();
80
			else if (key.equals(IContextAttributes.THREAD_CLASS_NAME))
81
				result = new ThreadClassNameLP();
82
			else if (key.equals(IContextAttributes.THREAD_START_TIME))
83
				result = new ThreadStartTimeLP();
84
			else if (key.equals(IContextAttributes.THREAD_STOP_TIME))
85
				result = new ThreadStopTimeLP();
86
			else if (key.equals(IContextAttributes.THREAD_STATE))
87
				result = new ThreadStateLP();
88
			else if (key.equals(IContextAttributes.THREAD_RUNNING_TIME))
89
				result = new ThreadRunningTimeLP();
90
			else if (key.equals(IContextAttributes.THREAD_SLEEPING_TIME))
91
				result = new ThreadSleepingTimeLP();
92
			else if (key.equals(IContextAttributes.THREAD_WAITING_TIME))
93
				result = new ThreadWaitingTimeLP();
94
			else if (key.equals(IContextAttributes.THREAD_BLOCKED_TIME))
95
				result = new ThreadBlockedTimeLP();
96
			else if (key.equals(IContextAttributes.THREAD_DEADLOCKED_TIME))
97
				result = new ThreadDeadlockedTimeLP();
98
			else if (key.equals(IContextAttributes.THREAD_BLOCK_COUNT))
99
				result = new ThreadBlockCountLP();
100
			else if (key.equals(IContextAttributes.THREAD_DEADLOCK_COUNT))
101
				result = new ThreadDeadlockCountLP();
102
		} else {
103
			result = super.getContextLabelFormatProvider(key);
104
		}
105
		if (result != null) {
106
			_contextLabelFormatProviders.put(key, result);
107
		}
108
		return result;
109
	}
110
111
	public String getDescription() {
112
		return null;
113
	}
114
115
	public String getName() {
116
		return "JVMTI profiler context provider";
117
	}
118
119
	public String[] getSupportAttributes() {
120
		String[] supportAttributes0 = super.getSupportAttributes();
121
		String[] supportAttributes = new String[supportAttributes0.length + _supportAttributes.size()];
122
		System.arraycopy(supportAttributes0, 0, supportAttributes, 0, supportAttributes0.length);
123
		for (int i = supportAttributes0.length; i < supportAttributes.length; i++) {
124
			supportAttributes[i] = (String) _supportAttributes.get(i - supportAttributes0.length);
125
		}
126
		return supportAttributes;
127
	}
128
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadBlockCountLP.java (+39 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
23
public class ThreadBlockCountLP extends AttrLPAdapter {
24
25
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
26
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
27
			return UIMessages._THREAD_BLOCK_COUNT;
28
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT)
29
			return "placeholder (Avg. Age)";
30
		return "";
31
	}
32
33
	protected List internalSupportModes() {
34
		List modes = super.internalSupportModes();
35
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
36
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
37
		return modes;
38
	}
39
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStateLP.java (+41 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
23
public class ThreadStateLP extends AttrLPAdapter {
24
25
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
26
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
27
			return UIMessages._THREAD_STATE;
28
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
29
			if (value != null && value instanceof String)
30
				return (String)value;
31
		}
32
		return "";
33
	}
34
35
	protected List internalSupportModes() {
36
		List modes = super.internalSupportModes();
37
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
39
		return modes;
40
	}
41
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseMemoryStatisticView.java (+336 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.views;
16
17
import java.util.Hashtable;
18
import java.util.Iterator;
19
import java.util.Map;
20
21
import org.eclipse.emf.common.util.EList;
22
import org.eclipse.hyades.models.hierarchy.extensions.SimpleSearchQuery;
23
import org.eclipse.hyades.models.trace.TRCClass;
24
import org.eclipse.hyades.models.trace.TRCFullTraceObject;
25
import org.eclipse.hyades.models.trace.TRCGCEvent;
26
import org.eclipse.hyades.models.trace.TRCPackage;
27
import org.eclipse.hyades.models.trace.impl.TRCClassImpl;
28
import org.eclipse.hyades.models.trace.impl.TRCPackageImpl;
29
import org.eclipse.hyades.models.trace.impl.TRCClassImpl.TRCClassSnapshot;
30
import org.eclipse.hyades.models.trace.impl.TRCPackageImpl.TRCPackageSnapshot;
31
import org.eclipse.hyades.trace.ui.TraceViewerPage;
32
import org.eclipse.hyades.trace.ui.internal.util.PerftraceUtil;
33
import org.eclipse.hyades.trace.views.adapter.internal.DynamicFilter;
34
import org.eclipse.hyades.trace.views.internal.FilteringUtil;
35
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
36
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
37
import org.eclipse.hyades.trace.views.util.internal.ColumnData;
38
import org.eclipse.hyades.trace.views.util.internal.StatisticTableColumnInfo;
39
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
40
import org.eclipse.jface.viewers.Viewer;
41
import org.eclipse.swt.graphics.Image;
42
import org.eclipse.swt.widgets.Composite;
43
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes;
44
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextUpdaterHelper;
45
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.LiveSizeLabelAdapter;
46
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.AvgAgeLabelAdapter;
47
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.ClassPackageNameLabelAdapter;
48
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.LiveInstancesLabelAdapter;
49
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.PackageNameLabelAdapter;
50
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.TotalInstancesLabelAdapter;
51
import org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels.TotalSizeLabelAdapter;
52
53
public class BaseMemoryStatisticView extends BaseStatisticView {
54
55
	static public final int CLASS_MODE = 0; // CM
56
	static public final int PACKAGE_MODE = 1;// PM
57
	// class mode
58
	static public final int CM_COL_NAME = 0;
59
	static public final int CM_COL_PACKAGE_NAME = 1;
60
	static public final int CM_COL_LIVE_INST = 2;
61
	static public final int CM_COL_LIVE_SIZE = 3;
62
	static public final int CM_COL_TOTAL_INST = 4;
63
	static public final int CM_COL_TOTAL_SIZE = 5;
64
	static public final int CM_COL_AVG_AGE = 6;
65
	//static public final int CM_COL_GENERATIONS = 7;
66
	static public final int CM_COL_NUM = 7;
67
	// package mode
68
	static public final int PM_COL_NAME = 0;
69
	static public final int PM_COL_LIVE_INST = 1;
70
	static public final int PM_COL_LIVE_SIZE = 2;
71
	static public final int PM_COL_TOTAL_INST = 3;
72
	static public final int PM_COL_TOTAL_SIZE = 4;
73
	static public final int PM_COL_AVG_AGE = 5;
74
	//static public final int PM_COL_GENERATIONS = 6;
75
	static public final int PM_COL_NUM = 6;
76
77
	protected int _totalAge;
78
	protected int _totalGenerations;
79
80
	static private int V = ColumnData.IS_VISIBLE;
81
	static private int D = ColumnData.SUPPORTS_DELTA;
82
83
	private int _viewMode = CLASS_MODE;
84
	private TRCPackageSnapshot packageSnapshot = new TRCPackageImpl.TRCPackageSnapshot();
85
	private TRCClassSnapshot classSnapshot = new TRCClassImpl.TRCClassSnapshot();
86
	private ColumnLabelAdapter _packageModeCols[] = new ColumnLabelAdapter[PM_COL_NUM];
87
	private ColumnLabelAdapter _classModeCols[] = new ColumnLabelAdapter[CM_COL_NUM];
88
	private Map _ageMap = new Hashtable();
89
90
	public BaseMemoryStatisticView(Composite parent, TraceViewerPage page) {
91
		super(parent, page);
92
		createColumnsLabelProviders();
93
	}
94
95
	public int getViewMode() {
96
		return _viewMode;
97
	}
98
99
	public void setViewMode(int viewMode) {
100
		if (PACKAGE_MODE == viewMode)
101
			viewMode = PACKAGE_MODE;
102
		else
103
			viewMode = CLASS_MODE;
104
		if (viewMode == _viewMode)
105
			return;
106
		_viewMode = viewMode;
107
		redrawTable();
108
	}
109
110
	ColumnLabelAdapter getColumnsLabelProvider(int col) {
111
		if (PACKAGE_MODE == _viewMode)
112
			return _packageModeCols[col];
113
		else
114
			return _classModeCols[col];
115
	}
116
117
	private void createColumnsLabelProviders() {
118
		_classModeCols[CM_COL_NAME] = new ClassPackageNameLabelAdapter();
119
		_classModeCols[CM_COL_PACKAGE_NAME] = new PackageNameLabelAdapter();
120
		_classModeCols[CM_COL_LIVE_INST] = new LiveInstancesLabelAdapter();
121
		_classModeCols[CM_COL_LIVE_SIZE] = new LiveSizeLabelAdapter();
122
		_classModeCols[CM_COL_TOTAL_INST] = new TotalInstancesLabelAdapter();
123
		_classModeCols[CM_COL_TOTAL_SIZE] = new TotalSizeLabelAdapter();
124
		_classModeCols[CM_COL_AVG_AGE] = new AvgAgeLabelAdapter(_ageMap);
125
		//_classModeCols[CM_COL_GENERATIONS] = new GenerationsColumnLabel();
126
127
		_packageModeCols[PM_COL_NAME] = _classModeCols[CM_COL_NAME];
128
		_packageModeCols[PM_COL_LIVE_INST] = _classModeCols[CM_COL_LIVE_INST];
129
		_packageModeCols[PM_COL_LIVE_SIZE] = _classModeCols[CM_COL_LIVE_SIZE];
130
		_packageModeCols[PM_COL_TOTAL_INST] = _classModeCols[CM_COL_TOTAL_INST];
131
		_packageModeCols[PM_COL_TOTAL_SIZE] = _classModeCols[CM_COL_TOTAL_SIZE];
132
		_packageModeCols[PM_COL_AVG_AGE] = _classModeCols[CM_COL_AVG_AGE];
133
		//_packageModeCols[PM_COL_GENERATIONS] = _classModeCols[CM_COL_GENERATIONS];
134
135
		for (int i = 0; i < CM_COL_NUM; i++) {
136
			if (i != CM_COL_NAME && i != CM_COL_PACKAGE_NAME && null != _classModeCols[i])
137
				_classModeCols[i].initialize(packageSnapshot, classSnapshot, null);
138
		}
139
	}
140
141
	protected ColumnDisplayInfo getColumnDisplayInfo(ColumnLabelAdapter col, boolean isDeltaColumn) {
142
		if (col == _classModeCols[CM_COL_PACKAGE_NAME])
143
			return TIContextUpdaterHelper.updatePackageName(col, _page.getMOFObject());
144
		else if (col == _classModeCols[CM_COL_TOTAL_INST])
145
			return TIContextUpdaterHelper.updateTotalInstances(col, isDeltaColumn, isShowPercent(), _totalInst);
146
		else if (col == _classModeCols[CM_COL_LIVE_INST])
147
			return TIContextUpdaterHelper.updateLiveInstances(col, isDeltaColumn, isShowPercent(), _activeInst);			
148
		else if (col == _classModeCols[CM_COL_TOTAL_SIZE])
149
			return TIContextUpdaterHelper.updateTotalSize(col, isDeltaColumn, isShowPercent(), _totalSize);			
150
		else if (col == _classModeCols[CM_COL_LIVE_SIZE])
151
			return TIContextUpdaterHelper.updateActiveSize(col, isDeltaColumn, isShowPercent(), _activeSize);
152
		else if (col == _classModeCols[CM_COL_AVG_AGE])
153
			return TIContextUpdaterHelper.updateAverageAge(col, isDeltaColumn, isShowPercent(), _totalAge);
154
		//else if (col == _classModeCols[CM_COL_GENERATIONS])
155
		//	return TIContextUpdaterHelper.updateAverageAge(col, isDeltaColumn, isShowPercent(), _totalGenerations);
156
		else
157
			return super.getColumnDisplayInfo(col, isDeltaColumn);
158
	}
159
160
	protected void showPercentUpdate() {
161
		if (isShowPercent()) {
162
			_totalInst = PerftraceUtil.getTotalInstances(_page.getMOFObject());
163
			if (_totalInst < 1)
164
				_totalInst = 1;
165
			_activeInst = PerftraceUtil.getActiveInstances(_page.getMOFObject());
166
			if (_activeInst < 1)
167
				_activeInst = 1;
168
			_totalSize = PerftraceUtil.getTotalSize(_page.getMOFObject());
169
			if (_totalSize < 1)
170
				_totalSize = 1;
171
			_activeSize = PerftraceUtil.getActiveSize(_page.getMOFObject());
172
			if (_activeSize < 1)
173
				_activeSize = 1;
174
			_collectedInst = PerftraceUtil.getTotalCollectedInstances(_page.getMOFObject());
175
			if (_collectedInst < 1)
176
				_collectedInst = 1;
177
			//TODO _totalAge = get total age
178
			if (_totalAge < 1)
179
				_totalAge = 1;
180
		}
181
	}
182
183
	protected String getColumnsPreferencesKey() {
184
		if (PACKAGE_MODE == _viewMode)
185
			return PREFERENCE_KEY_PREFIX + "MemStatsPack12";
186
		else
187
			return PREFERENCE_KEY_PREFIX + "MemStatsClass12";
188
	}
189
190
	protected String getViewTypeStr() {
191
		return org.eclipse.hyades.trace.views.adapter.internal.TraceConstants.MEMORY_STATS_VIEW;
192
	}
193
194
	protected String getDefaultColumnsTemplate() {
195
		if (PACKAGE_MODE == _viewMode)
196
			return getPackageModeColumnsTemplate();
197
		else
198
			return getClassModeColumnsTemplate();
199
	}
200
201
	public String getColumnText(Object element, int columnIndex) {
202
		StatisticTableColumnInfo info = StatisticTableColumnInfo.getStatisticTableColumnInfo(getTree().getColumn(columnIndex));
203
		int pos = info.getColumnData().getInitalPos();
204
		String label = "placeholder(view)";
205
		ColumnLabelAdapter columnAdapter = getColumnsLabelProvider(pos);
206
		if (null != columnAdapter)
207
			label = getElementColumnText(element, columnAdapter, info.isDeltaColumn());
208
		return label;
209
	}
210
211
	public Image getColumnImage(Object element, int columnIndex) {
212
		StatisticTableColumnInfo info = StatisticTableColumnInfo.getStatisticTableColumnInfo(getTree().getColumn(columnIndex));
213
		int pos = info.getColumnData().getInitalPos();
214
		Image image = null;
215
		ColumnLabelAdapter columnAdapter = getColumnsLabelProvider(pos);
216
		if (null != columnAdapter)
217
			image = getElementColumnImage(element, columnAdapter, info.isDeltaColumn());
218
		return image;
219
	}
220
221
	protected StatisticSorter getViewerSorterInstance() {
222
		return new StatisticSorter() {
223
			public int compare(Viewer viewer, Object e1, Object e2) {
224
				ColumnLabelAdapter columnAdapter = getColumnsLabelProvider(_pos);
225
				int ret = 0;
226
				if (null != columnAdapter)
227
					ret = _sortSequence * compareElements(e1, e2, columnAdapter, _info.isDeltaColumn());
228
				return ret;
229
			}
230
		};
231
	}
232
233
	protected String getClassModeColumnsTemplate() {
234
		return
235
			IContextAttributes.THREAD_CLASS_NAME + ":" + CM_COL_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | V | ColumnData.NONMOVABLE) + ":left:150,"
236
			+ IContextAttributes.PACKAGE_NAME + ":" + CM_COL_PACKAGE_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | V | ColumnData.NONMOVABLE) + ":left:120,"
237
			+ IContextAttributes.CLASS_LIVE_INST + ":" + CM_COL_LIVE_INST + ":" + String.valueOf(V | D) + ":right:80,"
238
			+ IContextAttributes.CLASS_ACTIVE_SIZE + ":" + CM_COL_LIVE_SIZE + ":" + String.valueOf(V | D) + ":right:80,"
239
			+ IContextAttributes.CLASS_TOTAL_INST + ":" + CM_COL_TOTAL_INST + ":" + String.valueOf(V | D) + ":right:80,"
240
			+ IContextAttributes.CLASS_TOTAL_SIZE + ":" + CM_COL_TOTAL_SIZE + ":" + String.valueOf(V | D) + ":right:80,"
241
			+ TIContextAttributes.CLASS_AVG_AGE + ":" + CM_COL_AVG_AGE + ":" + String.valueOf(V | D) + ":right:80"
242
			//+ TIContextAttributes.CLASS_GENERATIONS + ":" + CM_COL_GENERATIONS + ":" + String.valueOf(V | D) + ":right:80"
243
			;
244
	}
245
246
	protected String getPackageModeColumnsTemplate() {
247
		return
248
			IContextAttributes.PACKAGE_NAME + ":" + PM_COL_NAME + ":" + String.valueOf(ColumnData.NONDELETABLE | V | ColumnData.NONMOVABLE) + ":left:120,"
249
			+ IContextAttributes.PACKAGE_LIVE_INST + ":" + PM_COL_LIVE_INST + ":" + String.valueOf(V | D) + ":right:80,"
250
			+ IContextAttributes.PACKAGE_ACTIVE_SIZE + ":" + PM_COL_LIVE_SIZE + ":" + String.valueOf(V | D) + ":right:80,"
251
			+ IContextAttributes.PACKAGE_TOTAL_INST + ":" + PM_COL_TOTAL_INST + ":" + String.valueOf(V | D) + ":right:80,"
252
			+ IContextAttributes.PACKAGE_TOTAL_SIZE + ":" + PM_COL_TOTAL_SIZE + ":" + String.valueOf(V | D) + ":right:80,"
253
			+ TIContextAttributes.PACKAGE_AVG_AGE + ":" + PM_COL_AVG_AGE + ":" + String.valueOf(V | D) + ":right:80"
254
			//+ TIContextAttributes.PACKAGE_GENERATIONS + ":" + PM_COL_GENERATIONS + ":" + String.valueOf(V | D) + ":right:80"
255
			;
256
	}
257
258
	public Object[] getElements(Object inputElement) {
259
		Object ret[] = _empty;
260
		SimpleSearchQuery currentFilter = getCurrentFilter();
261
		if (DynamicFilter.containsDynamicFilters(currentFilter)) {
262
			currentFilter = DynamicFilter.updateDynamicFilters(currentFilter, _page.getMOFObject());
263
		}
264
		if (PACKAGE_MODE == _viewMode) {
265
			ret = FilteringUtil.getFilteredPackages(currentFilter, FilteringUtil.getProcessList(_page.getMOFObject())).toArray();					
266
		}
267
		else if (CLASS_MODE == _viewMode) {
268
			ret = FilteringUtil.getFilteredClasses(currentFilter, FilteringUtil.getProcessList(_page.getMOFObject())).toArray();
269
			updateAgeInfo(ret);
270
		}
271
		return ret;
272
	}
273
274
	public boolean hasChildren(Object element) {
275
		boolean ret = false;
276
		if (FilteringUtil.USE_ENGINE_FOR_HAS_CHILDREN)
277
			ret = getChildren(element).length > 0;
278
		else if (element instanceof TRCPackage)
279
			ret = true;
280
		return ret;
281
	}
282
283
	public Object[] getChildren(Object parentElement) {
284
		Object ret[] = _empty;
285
		if (parentElement instanceof TRCPackage) {
286
			ret = FilteringUtil.getFilteredClasses(getCurrentFilter(), (TRCPackage)parentElement).toArray();
287
		}
288
		return ret;
289
	}
290
291
	int getObjAge(TRCFullTraceObject obj, EList listGC) {
292
		int age = 0;
293
		double t0 = obj.getCreateTime();
294
		double t1 = obj.getCollectTime();
295
		Iterator it = listGC.iterator();
296
		while (it.hasNext()) {
297
			TRCGCEvent gcEvent = (TRCGCEvent) it.next();
298
			double time = gcEvent.getTime();
299
			if (time <= t0)
300
				continue;
301
			if (t1 > 0 && time >= t1)
302
				break;
303
			age++;
304
		}
305
		return age;
306
	}
307
308
	void updateAgeInfo(Object arr[]) {
309
		_ageMap.clear();
310
		for (int i = 0; i < arr.length; i++) {
311
			if (arr[i] instanceof TRCClass) {
312
				TRCClass cls = (TRCClass) arr[i];
313
				AgeInfo ageInfo = new AgeInfo();
314
				EList listGC = cls.getPackage().getProcess().getGcEvents();
315
				if (null == listGC || listGC.size() == 0)
316
					return;
317
				EList list = cls.getObjects();
318
				int len = list.size();
319
				for (int j = 0; j < len; j++) {
320
					Object obj = list.get(j);
321
					if (obj instanceof TRCFullTraceObject ) {
322
						int age = getObjAge((TRCFullTraceObject)obj, listGC);
323
						ageInfo.sumAges += age;
324
						ageInfo.objCount++;
325
					}
326
				}
327
				_ageMap.put(cls, ageInfo);
328
			}
329
		}
330
	}
331
332
	static public class AgeInfo {
333
		public int sumAges;
334
		public int objCount;
335
	}
336
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextUpdaterHelper.java (+40 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
18
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
19
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
20
21
public class TIContextUpdaterHelper extends ContextUpdaterHelper {
22
23
	public static ColumnDisplayInfo updateAverageAge(ColumnLabelAdapter col, boolean isDeltaColumn, boolean showPercent, double totalAge)
24
	{
25
		ColumnDisplayInfo info = col.getColumnDisplayInfo();		
26
		info.isDeltaColumn = isDeltaColumn;
27
		info.showPercentage = showPercent;
28
		info.max = totalAge;
29
		return info;
30
	}
31
32
	public static ColumnDisplayInfo updateGenerations(ColumnLabelAdapter col, boolean isDeltaColumn, boolean showPercent, double totalGenerations)
33
	{
34
		ColumnDisplayInfo info = col.getColumnDisplayInfo();		
35
		info.isDeltaColumn = isDeltaColumn;
36
		info.showPercentage = showPercent;
37
		info.max = totalGenerations;
38
		return info;
39
	}
40
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisViewer.java (+219 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.views;
16
17
import org.eclipse.emf.ecore.EObject;
18
import org.eclipse.hyades.trace.ui.FilterTraceViewer;
19
import org.eclipse.hyades.trace.ui.TraceViewerPage;
20
import org.eclipse.hyades.trace.ui.UIPlugin;
21
import org.eclipse.hyades.trace.views.actions.internal.ContextSelectionMenuListener;
22
import org.eclipse.hyades.trace.views.adapter.internal.IContextViewer;
23
import org.eclipse.hyades.trace.views.internal.TracePluginImages;
24
import org.eclipse.hyades.trace.views.internal.TraceUIMessages;
25
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
26
import org.eclipse.hyades.trace.views.util.internal.OpenSource;
27
import org.eclipse.hyades.ui.filters.IFilterScopes;
28
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
29
import org.eclipse.jface.action.Action;
30
import org.eclipse.jface.action.IMenuManager;
31
import org.eclipse.jface.action.IToolBarManager;
32
import org.eclipse.swt.widgets.Menu;
33
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
34
import org.eclipse.ui.IActionBars;
35
36
public class MemoryAnalysisViewer extends FilterTraceViewer implements IContextViewer {
37
38
	Action _viewPackage;
39
	Action _viewClass;
40
	Action _openSource;   
41
	Action _chooseColumns;   
42
	Action _sortByColumn;
43
	Action _percentMode;
44
	Action _deltaColumns;
45
	Menu _contextMenu;
46
	private String _context;
47
	private boolean _contextChanged;
48
	private ContextSelectionMenuListener _contextSelectionMenuListener;
49
50
	public TraceViewerPage createPage(EObject mofObject) {
51
		return new MemoryAnalysisPage(mofObject, this); 
52
	}
53
54
	public void dispose() {
55
		if (_contextMenu != null)
56
			_contextMenu.dispose();
57
		super.dispose();
58
	}
59
	
60
	public String getViewTitle() {
61
		return UIMessages.MEM_ANALYSIS_TITLE;
62
	}
63
64
	public boolean contextChanged() {
65
		return _contextChanged;
66
	}
67
68
	public ContextSelectionMenuListener getContextSelectionMenuListener() {
69
		if (_contextSelectionMenuListener == null)
70
			_contextSelectionMenuListener = new ContextSelectionMenuListener();
71
		return _contextSelectionMenuListener;
72
	}
73
74
	public String getSelectedContext() {
75
		return _context;
76
	}
77
78
	public void setSelectedContext(String context) {
79
		setSelectedContext(context, true);
80
	}
81
82
	public void setSelectedContext(String context, boolean refresh) {
83
		if (context == null)
84
			_contextChanged = _context != null;
85
		else
86
			_contextChanged = !context.equals(_context);
87
		_context = context;
88
		if (_contextChanged && refresh && getCurrentPage() != null)
89
			((TraceViewerPage) getCurrentPage()).refreshPage();
90
	}
91
92
	public void updateContext() {
93
		ContextUpdaterHelper.setCurrentFocusContextLanguage(getSelectedContext());
94
		_contextChanged = false;
95
	}
96
97
	public void filterUpdated() {
98
		TraceViewerPage page = (TraceViewerPage) getCurrentPage();
99
		if (page != null) {
100
			if (fPartVisible)
101
				page.refreshPage();
102
			else
103
				fForceRefresh = true;
104
		}
105
	}
106
107
	public String[] getFilterScope() {
108
		String[] scope = new String[] { IFilterScopes.PROFILING_AGENT_FILTER_SCOPE };
109
		return scope;
110
	}
111
112
	public void makeActions() {
113
		if (isInitializedMenu())
114
			return; //create the toolbar only once
115
		super.makeActions();
116
		initializedMenu(true);
117
		createActions();
118
		updateButtons();
119
		IActionBars bars = getViewSite().getActionBars();
120
		fillLocalPullDown(bars.getMenuManager());
121
		fillLocalToolBar(bars.getToolBarManager());
122
		bars.updateActionBars();
123
	}
124
125
	public void updateButtons() {
126
		MemoryAnalysisPage page = null;
127
		if (getCurrentPage() instanceof MemoryAnalysisPage)
128
			page = (MemoryAnalysisPage) getCurrentPage();
129
		boolean memStatsTab = null != page && page.getViewTab() == MemoryAnalysisPage.TAB_MEMORY_STATS;
130
		boolean classMode = memStatsTab && page.getViewTabViewMode() == BaseMemoryStatisticView.CLASS_MODE;
131
		boolean packageMode = memStatsTab && page.getViewTabViewMode() == BaseMemoryStatisticView.PACKAGE_MODE;
132
		boolean isDelta = memStatsTab && page.isShowDelta();
133
		boolean isPercent = memStatsTab && page.isShowPercent();
134
		_viewClass.setEnabled(memStatsTab);
135
		_viewClass.setChecked(classMode);
136
		_viewPackage.setEnabled(memStatsTab);
137
		_viewPackage.setChecked(packageMode);
138
		boolean canSrc = null != page && Utils.canOpenSourceOnThisObject(page.getMOFObject());
139
		_openSource.setEnabled(canSrc);
140
		_deltaColumns.setEnabled(memStatsTab);
141
		_percentMode.setEnabled(memStatsTab);
142
		_deltaColumns.setChecked(isDelta);
143
		_percentMode.setChecked(isPercent);
144
	}
145
146
	void createActions() {
147
		_viewClass = new Action() {
148
			public void run() {
149
				MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage();
150
				page.setViewMode(0, BaseMemoryStatisticView.CLASS_MODE);
151
			}
152
		};
153
		_viewPackage = new Action() {
154
			public void run() {
155
				MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage();
156
				page.setViewMode(0, BaseMemoryStatisticView.PACKAGE_MODE);
157
			}
158
		};
159
		Utils.setActionProperties(_viewPackage, _context, IContextAttributes.SHOW_PACKAGE_LEVEL);
160
		Utils.setActionProperties(_viewClass, _context, IContextAttributes.SHOW_CLASS_LEVEL);
161
162
		String openSourceStr = TraceUIMessages._74;
163
		_openSource = new Action(openSourceStr) {
164
			public void run() {
165
				MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage();
166
				if (null != page)
167
					OpenSource.openSource(UIPlugin.getDefault().getSelectionModel(page.getMOFObject()).getFirstElement());
168
			}
169
		};
170
		_openSource.setText(openSourceStr);
171
		TracePluginImages.setImageDescriptors(_openSource,TracePluginImages.T_TOOL,TracePluginImages.IMG_SOURCE);	
172
		_openSource.setDescription(openSourceStr);   
173
		_openSource.setToolTipText(openSourceStr);
174
		_openSource.setEnabled(false);
175
176
		String strShowPercent = TraceUIMessages._13;
177
		_percentMode = new Action(strShowPercent) {
178
			public void run() {
179
				MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage();
180
				if (null != page)
181
					page.getCurrentView().getShowPercentAction().run();
182
			}
183
		};
184
		_percentMode.setText(strShowPercent);
185
		TracePluginImages.setImageDescriptors(_percentMode,TracePluginImages.T_LCL,TracePluginImages.IMG_PERCENT);			
186
		_percentMode.setDescription(strShowPercent);   
187
		_percentMode.setToolTipText(strShowPercent);
188
		_percentMode.setEnabled(true);
189
		
190
		String strShowDelta = TraceUIMessages._84;
191
		_deltaColumns = new Action(strShowDelta) {
192
			public void run() {
193
				MemoryAnalysisPage page = (MemoryAnalysisPage) getCurrentPage();
194
				if (null != page)
195
					page.getCurrentView().getDeltaColumnsAction().run();
196
			}
197
		};
198
199
		_deltaColumns.setText(strShowDelta);
200
		TracePluginImages.setImageDescriptors(_deltaColumns,TracePluginImages.T_LCL,TracePluginImages.IMG_DELTACOLUMNS);
201
		_deltaColumns.setDescription(strShowDelta);   
202
		_deltaColumns.setToolTipText(strShowDelta);
203
		_deltaColumns.setEnabled(true);
204
	}
205
206
	void fillLocalPullDown(IMenuManager manager) {
207
		//manager.removeAll();
208
		manager.add(_openSource);
209
	}
210
211
	void fillLocalToolBar(IToolBarManager manager) {
212
		//manager.removeAll();
213
		manager.add(_viewPackage);
214
		manager.add(_viewClass);
215
		manager.add(_openSource);
216
		manager.add(_percentMode);
217
		manager.add(_deltaColumns);
218
	}
219
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/NumberLabelAdapter.java (+67 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import org.eclipse.hyades.models.trace.TRCClass;
14
import org.eclipse.hyades.models.trace.TRCMethod;
15
import org.eclipse.hyades.models.trace.TRCPackage;
16
import org.eclipse.hyades.trace.ui.internal.util.TString;
17
import org.eclipse.hyades.trace.views.internal.TracePluginImages;
18
import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel;
19
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
20
import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails;
21
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
22
import org.eclipse.swt.graphics.Image;
23
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
24
25
public abstract class NumberLabelAdapter extends AbstractNumberColumnLabel {
26
27
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
28
29
		String attributeId = getContextAttribute(element, info);
30
		if (attributeId == null)
31
			return "";
32
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
33
		if (!info.isDeltaColumn) {
34
			if (info.showPercentage)
35
				return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max);
36
			else
37
				return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
38
		} else {
39
			if (element instanceof TRCPackage
40
					|| element instanceof TRCClass
41
					|| element instanceof TRCMethod
42
					|| element instanceof MethodCallDetails)
43
				return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
44
			else
45
				return "";
46
		}
47
	}
48
	
49
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
50
		if (!info.isDeltaColumn) {
51
			Number delta = getDelta(element, info);
52
			double d = delta != null ? delta.doubleValue() : 0;
53
			if (d < 0)
54
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN);
55
			if (d > 0)
56
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP);
57
			else {
58
				String attributeId = getContextAttribute(element, info);
59
				if (attributeId == null)
60
					return null;
61
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
62
				return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
63
			}
64
		}
65
		return null;
66
	}
67
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadStopTimeLP.java (+42 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
23
24
public class ThreadStopTimeLP extends AttrLPAdapter {
25
26
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
27
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
28
			return UIMessages._THREAD_STOP_TIME;
29
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
30
			if (value != null && value instanceof Double)
31
				return Utils.formatTime(((Double)value).doubleValue());
32
		}
33
		return "";
34
	}
35
36
	protected List internalSupportModes() {
37
		List modes = super.internalSupportModes();
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
40
		return modes;
41
	}
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockedTimeColumnLabel.java (+24 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadBlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadBlockedTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_BLOCKED_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getBlockedTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/MemoryAnalysisPage.java (+158 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.views;
16
17
import org.eclipse.emf.ecore.EObject;
18
import org.eclipse.hyades.models.hierarchy.extensions.SimpleSearchQuery;
19
import org.eclipse.hyades.trace.ui.TraceViewer;
20
import org.eclipse.hyades.trace.ui.TraceViewerPage;
21
import org.eclipse.hyades.trace.views.internal.StatisticView;
22
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.custom.CTabFolder;
24
import org.eclipse.swt.custom.CTabItem;
25
import org.eclipse.swt.events.SelectionEvent;
26
import org.eclipse.swt.events.SelectionListener;
27
import org.eclipse.swt.layout.GridData;
28
import org.eclipse.swt.widgets.Composite;
29
import org.eclipse.swt.widgets.Control;
30
31
public class MemoryAnalysisPage extends TraceViewerPage {
32
33
	static public final int TAB_MEMORY_STATS = 0;
34
	static public final int TAB_ALLOC_DETAILS = 1;
35
36
	CTabFolder _tabFolder;
37
	StatisticView _views[];
38
39
	public MemoryAnalysisPage(EObject mofObject, TraceViewer viewer) {
40
		super(mofObject, viewer);
41
	}
42
43
	public void refreshPage() {
44
		StatisticView view = _views[_tabFolder.getSelectionIndex()];
45
		view.refresh();
46
		updateButtons();
47
	}
48
49
	public void selectionChanged() {
50
	}
51
52
	public void update(boolean newPage) {
53
		if (newPage) {
54
			StatisticView view = _views[_tabFolder.getSelectionIndex()];
55
			view.updateUI(view.getColumnDataList());
56
			updateButtons();
57
		}
58
	}
59
60
	public void createControl(Composite parent) {
61
		GridData gd = new GridData();
62
		gd.horizontalAlignment = GridData.FILL;
63
		gd.grabExcessHorizontalSpace = true;
64
		gd.verticalAlignment = GridData.FILL;
65
		gd.grabExcessVerticalSpace = true;
66
67
		_tabFolder = new CTabFolder(parent, SWT.BOTTOM | SWT.FLAT);
68
		_tabFolder.setLayoutData(gd);
69
		_tabFolder.addSelectionListener(new SelectionListener() {
70
			public void widgetDefaultSelected(SelectionEvent e) {
71
				;
72
			}
73
			public void widgetSelected(SelectionEvent e) {
74
				StatisticView view = _views[_tabFolder.getSelectionIndex()];
75
				view.updateUI(view.getColumnDataList());
76
				updateButtons();
77
			}
78
		});
79
80
		_views = new StatisticView[2];
81
		CTabItem tabItem;
82
83
		tabItem = new CTabItem(_tabFolder, SWT.NONE);
84
		tabItem.setText("Memory Statistic");
85
		_views[0] = new BaseMemoryStatisticView(_tabFolder, this);
86
		tabItem.setControl(_views[0].getControl());
87
88
		tabItem = new CTabItem(_tabFolder, SWT.NONE);
89
		tabItem.setText("Allocation Details");
90
		_views[1] = new AllocationDetailsView(_tabFolder, this);
91
		tabItem.setControl(_views[1].getControl());
92
		
93
		_tabFolder.setSelection(0);
94
	}
95
96
	public Control getControl() {
97
		return _tabFolder;
98
	}
99
100
	public void setFocus() {
101
		_views[_tabFolder.getSelectionIndex()].getControl().setFocus();
102
	}
103
104
	public SimpleSearchQuery getCurrentFilter() {
105
		return ((MemoryAnalysisViewer)_viewer).getCurrentFilter();
106
	}
107
108
	public int getViewTab() {
109
		return _tabFolder.getSelectionIndex();
110
	}
111
112
	public int getViewTabViewMode() {
113
		int viewMode = -1;
114
		StatisticView view = _views[_tabFolder.getSelectionIndex()];
115
		if (view instanceof BaseMemoryStatisticView) {
116
			BaseMemoryStatisticView view0 = (BaseMemoryStatisticView) view;
117
			viewMode = view0.getViewMode();
118
		}
119
		return viewMode;
120
	}
121
122
	public void setViewMode(int tab, int viewMode) {
123
		if (TAB_MEMORY_STATS != tab && TAB_ALLOC_DETAILS != tab)
124
			return;
125
		_tabFolder.setSelection(tab);
126
		StatisticView view = _views[_tabFolder.getSelectionIndex()];
127
		if (view instanceof BaseMemoryStatisticView) {
128
			BaseMemoryStatisticView view0 = (BaseMemoryStatisticView) view;
129
			view0.setViewMode(viewMode);
130
		}
131
		updateButtons();
132
	}
133
134
	public void updateButtons() {
135
		if (_viewer instanceof MemoryAnalysisViewer) {
136
			((MemoryAnalysisViewer)_viewer).updateButtons();
137
		}
138
	}
139
140
	public void updateFilterAppliedDescription() {
141
		((MemoryAnalysisViewer) _viewer).updateFilterAppliedDescription();
142
	}
143
144
	public StatisticView getCurrentView() {
145
		StatisticView view = _views[_tabFolder.getSelectionIndex()];
146
		return view;
147
	}
148
149
	public boolean isShowDelta() {
150
		StatisticView view = _views[_tabFolder.getSelectionIndex()];
151
		return view.showingDeltaColumns();
152
	}
153
154
	public boolean isShowPercent() {
155
		StatisticView view = _views[_tabFolder.getSelectionIndex()];
156
		return view.isShowPercent();
157
	}
158
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalInstancesLabelAdapter.java (+57 lines)
Added Link Here
1
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
2
3
import org.eclipse.hyades.models.trace.TRCClass;
4
import org.eclipse.hyades.models.trace.TRCMethod;
5
import org.eclipse.hyades.models.trace.TRCPackage;
6
import org.eclipse.hyades.trace.ui.internal.util.TString;
7
import org.eclipse.hyades.trace.views.internal.TracePluginImages;
8
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
9
import org.eclipse.hyades.trace.views.internal.view.columnlabels.TotalInstancesColumnLabel;
10
import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails;
11
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
12
import org.eclipse.swt.graphics.Image;
13
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
14
15
public class TotalInstancesLabelAdapter extends TotalInstancesColumnLabel {
16
17
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
18
19
		String attributeId = getContextAttribute(element, info);
20
		if (attributeId == null)
21
			return "";
22
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
23
		if (!info.isDeltaColumn) {
24
			if (info.showPercentage)
25
				return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max);
26
			else
27
				return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
28
		} else {
29
			if (element instanceof TRCPackage
30
					|| element instanceof TRCClass
31
					|| element instanceof TRCMethod
32
					|| element instanceof MethodCallDetails)
33
				return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
34
			else
35
				return "";
36
		}
37
	}
38
	
39
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
40
		if (!info.isDeltaColumn) {
41
			Number delta = getDelta(element, info);
42
			double d = delta != null ? delta.doubleValue() : 0;
43
			if (d < 0)
44
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN);
45
			if (d > 0)
46
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP);
47
			else {
48
				String attributeId = getContextAttribute(element, info);
49
				if (attributeId == null)
50
					return null;
51
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
52
				return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
53
			}
54
		}
55
		return null;
56
	}
57
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadSleepingTimeColumnLabel.java (+24 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadSleepingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadSleepingTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_SLEEPING_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getSleepingTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/GenerationsLabelAdapter.java (+71 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import org.eclipse.emf.ecore.EObject;
14
import org.eclipse.hyades.models.trace.TRCClass;
15
import org.eclipse.hyades.models.trace.TRCPackage;
16
import org.eclipse.hyades.models.trace.TracePackage;
17
import org.eclipse.hyades.models.trace.impl.TRCClassImpl.TRCClassSnapshot;
18
import org.eclipse.hyades.models.trace.impl.TRCPackageImpl.TRCPackageSnapshot;
19
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
20
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
21
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes;
22
23
public class GenerationsLabelAdapter extends NumberLabelAdapter {
24
25
	protected Number getValue(Object element, ColumnDisplayInfo info) {
26
		if (element instanceof TRCPackage) {
27
			// TODO stub
28
			//TRCPackageImpl.TRCPackageSnapshot ps = (TRCPackageImpl.TRCPackageSnapshot)((TRCPackage) element).retrieveSnapshot();		
29
			//return new Integer(getAverageAge());
30
			return new Integer(0);
31
		}
32
		if (element instanceof TRCClass) {
33
			// TODO stub
34
			//TRCClassImpl.TRCClassSnapshot cs = (TRCClassImpl.TRCClassSnapshot)((TRCClass) element).retrieveSnapshot();		
35
			//return new Integer(getAverageAge());
36
			return new Integer(0);
37
		}
38
		return null;
39
	}
40
41
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
42
		if (element instanceof TRCPackage) {
43
			// TODO stub
44
			TRCPackageSnapshot delta = packageSnapshot();
45
			((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__TOTAL_INSTANCES);
46
			((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__COLLECTED_INSTANCES);						
47
			//return new Integer(delta.getTotalInstances() - delta.getCollectedInstances());
48
			return new Integer(0);
49
		}
50
		if (element instanceof TRCClass) {
51
			// TODO stub
52
			TRCClassSnapshot delta = classSnapshot();			
53
			((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__TOTAL_INSTANCES);
54
			((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__COLLECTED_INSTANCES);						
55
			//return new Integer(delta.getTotalInstances() - delta.getCollectedInstances());
56
			return new Integer(0);
57
		}		
58
		return null;
59
	}
60
	
61
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
62
		EObject eObj = ContextUpdaterHelper.getEObject(element);		
63
		if (eObj instanceof TRCPackage)
64
			return TIContextAttributes.PACKAGE_GENERATIONS;
65
		else if (eObj instanceof TRCClass)
66
			return TIContextAttributes.CLASS_GENERATIONS;
67
		else
68
			return null;
69
		// TODO call sites
70
	}			
71
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/TIColumnData.java (+51 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.views;
16
17
import java.util.ArrayList;
18
import java.util.Iterator;
19
20
import org.eclipse.hyades.trace.views.util.internal.ColumnData;
21
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
22
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
23
24
public class TIColumnData extends ColumnData {
25
26
	public TIColumnData(String key, int initialPos, int style, int alignment, int width) {
27
		super(key, initialPos, style, alignment, width);
28
	}
29
30
	public TIColumnData(ColumnData columnData) {
31
		super(columnData.key(), columnData.getInitalPos(), columnData.getStyle(), columnData.getAlignment(), columnData.width());
32
	}
33
	
34
	public String name() {
35
		IContextLabelFormatProvider clfp = TIContextProvider.instance().getContextLabelFormatProvider(key());
36
		if (clfp != null)
37
			return clfp.getDisplayStringFromElement(null, null, IContextLabelFormatProvider.MODE_COLUMN_HEADER);
38
		else
39
			return key();
40
	}
41
42
	static public ArrayList convertColumnData(ArrayList in) {
43
		ArrayList out = new ArrayList();
44
		Iterator it = in.iterator();
45
		while (it.hasNext()) {
46
			ColumnData cd = (ColumnData) it.next();
47
			out.add(new TIColumnData(cd));
48
		}
49
		return out;
50
	}
51
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStopTimeColumnLabel.java (+42 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadStopTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.emf.ecore.EObject;
13
import org.eclipse.hyades.models.trace.TRCThread;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.AbstractNumberColumnLabel;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
16
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
17
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
18
19
public class ThreadStopTimeColumnLabel extends AbstractNumberColumnLabel {
20
	
21
	protected Number getValue(Object element, ColumnDisplayInfo info) {
22
		EObject eObj = ContextUpdaterHelper.getEObject(element);
23
24
		if (eObj instanceof TRCThread)
25
			return new Double(((TRCThread) eObj).getStopTime());
26
		else
27
			return null;
28
	}
29
30
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
31
		return null;
32
	}
33
34
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
35
		EObject eObj = ContextUpdaterHelper.getEObject(element);		
36
		
37
		if (eObj instanceof TRCThread)
38
			return IContextAttributes.THREAD_STOP_TIME;
39
		else
40
			return null;
41
	}	
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadRunningTimeColumnLabel.java (+24 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadRunningTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadRunningTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_RUNNING_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getRunningTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadBlockCountColumnLabel.java (+31 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadBlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
13
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
14
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
15
16
public class ThreadBlockCountColumnLabel extends ThreadDetailsColumnLabel {
17
	
18
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
19
		Number value = getValue(element, info);
20
		int number = value != null ? value.intValue() : 0;
21
		return number > 0 ? Integer.toString(number) : "";
22
	}
23
24
	protected String getContextAttribute() {
25
		return IContextAttributes.THREAD_BLOCK_COUNT;
26
	}
27
28
	protected Number getValue(ThreadDetails thread) {
29
		return new Double(thread.getBlockCount());
30
	}	
31
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDetailsColumnLabel.java (+52 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadDetailsColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
13
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
14
import org.eclipse.swt.graphics.Image;
15
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
16
17
public abstract class ThreadDetailsColumnLabel extends NumberLabelAdapter {
18
	
19
	protected abstract Number getValue(ThreadDetails thread);
20
	
21
	protected abstract String getContextAttribute();
22
	
23
	protected Number getValue(Object element, ColumnDisplayInfo info) {
24
		if (element instanceof ThreadDetails) {
25
			return getValue((ThreadDetails) element);
26
		}
27
		return null;
28
	}
29
30
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
31
		Number value = getValue(element, info);
32
		if (value == null || value.doubleValue() == 0) {
33
			return "";
34
		}
35
		return Utils.formatTime(value.doubleValue());
36
	}
37
	
38
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
39
		return null;
40
	}
41
42
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
43
		return null;
44
	}
45
46
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
47
		if (element instanceof ThreadDetails)
48
			return getContextAttribute();
49
		else
50
			return null;
51
	}
52
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/BaseStatisticView.java (+233 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.views;
16
17
import java.util.ArrayList;
18
19
import org.eclipse.emf.ecore.EObject;
20
import org.eclipse.hyades.models.hierarchy.extensions.SimpleSearchQuery;
21
import org.eclipse.hyades.trace.ui.ITraceSelection;
22
import org.eclipse.hyades.trace.ui.TraceViewerPage;
23
import org.eclipse.hyades.trace.ui.UIPlugin;
24
import org.eclipse.hyades.trace.ui.ViewSelectionChangedEvent;
25
import org.eclipse.hyades.trace.views.adapter.internal.IContextViewer;
26
import org.eclipse.hyades.trace.views.internal.ContextInfoContainer;
27
import org.eclipse.hyades.trace.views.internal.IContextInfoContainerListener;
28
import org.eclipse.hyades.trace.views.internal.StatisticView;
29
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
30
import org.eclipse.hyades.trace.views.util.internal.ColumnData;
31
import org.eclipse.hyades.ui.provisional.context.ContextManager;
32
import org.eclipse.hyades.ui.provisional.context.IContextLanguage;
33
import org.eclipse.jface.viewers.IContentProvider;
34
import org.eclipse.jface.viewers.ISelection;
35
import org.eclipse.jface.viewers.IStructuredSelection;
36
import org.eclipse.jface.viewers.ITableLabelProvider;
37
import org.eclipse.jface.viewers.ITreeContentProvider;
38
import org.eclipse.jface.viewers.LabelProvider;
39
import org.eclipse.jface.viewers.TreeViewer;
40
import org.eclipse.jface.viewers.Viewer;
41
import org.eclipse.swt.graphics.Image;
42
import org.eclipse.swt.widgets.Composite;
43
import org.eclipse.swt.widgets.Tree;
44
import org.eclipse.swt.widgets.TreeItem;
45
46
public abstract class BaseStatisticView extends StatisticView {
47
48
	static public String PREFERENCE_KEY_PREFIX = "org.eclipse.tptp.trace.jvmti.internal.client.views.basememstats.";
49
	static public Object _empty[] = new Object[0];
50
51
	protected ContextInfoContainer _contextInfo;
52
53
	BaseStatisticView(Composite parent, TraceViewerPage page) {
54
		super(parent, page);
55
	}
56
57
	protected Composite createTree(Composite parent, int options) {
58
		final Tree tree = _toolkit.createTree(parent, options);
59
		return tree;
60
	}
61
	
62
	protected Composite createControl(Composite parent, ArrayList cols) {
63
		final Composite vc = super.createControl(parent, cols);
64
		_contextInfo = new ContextInfoContainer();
65
		_contextInfo.setViewer((IContextViewer) _page.getTraceViewer());
66
		_contextInfo.createControl(vc);
67
		_contextInfo.addContextInfoContainerListener(new IContextInfoContainerListener() {
68
					public void visibilityChanged(boolean isVisible) {
69
						vc.layout(true, true);
70
					}
71
				});
72
		return vc;
73
	}
74
75
	protected abstract String getColumnsPreferencesKey();
76
	protected abstract String getViewTypeStr();
77
	protected abstract String getDefaultColumnsTemplate();
78
	protected abstract String getColumnText(Object element, int columnIndex);
79
	protected abstract Image getColumnImage(Object element, int columnIndex);
80
	protected abstract Object[] getElements(Object inputElement);
81
	protected abstract boolean hasChildren(Object element);
82
	protected abstract Object[] getChildren(Object parentElement);
83
	protected abstract StatisticSorter getViewerSorterInstance();
84
85
	protected IContentProvider getContentProvider() {
86
		return new BaseStatisticContentProvider();
87
	}
88
89
	public LabelProvider getTableLabelProvider() {
90
		class StatisticLabelProvider extends LabelProvider implements ITableLabelProvider {
91
			public Image getColumnImage(Object element, int columnIndex) {
92
				return BaseStatisticView.this.getColumnImage(element, columnIndex);
93
			}
94
			public String getColumnText(Object element, int columnIndex) {
95
				return BaseStatisticView.this.getColumnText(element, columnIndex);
96
			}
97
		}
98
		return new StatisticLabelProvider();
99
	}
100
101
	protected void updateButtons() {
102
		if (_page instanceof MemoryAnalysisPage) {
103
			((MemoryAnalysisPage)_page).updateButtons();
104
		}
105
	}
106
107
	public void update() {
108
		if (_page instanceof MemoryAnalysisPage && _contextInfo != null)
109
			_contextInfo.setMOFObject(_page.getMOFObject());
110
		super.update();
111
		if (_page instanceof MemoryAnalysisPage)
112
			((MemoryAnalysisPage) _page).updateFilterAppliedDescription();
113
	}
114
115
	protected void updateStatusContext(IContextLanguage language) {
116
		if (_contextInfo != null)
117
			_contextInfo.updateStatusContext(language);
118
	}
119
120
	public Tree getTree() {
121
		return (Tree) getTreeViewer().getControl();
122
	}
123
124
	protected TreeViewer getTreeViewer(Tree tree) {
125
		return new StatisticTreeViewer(tree);
126
	}
127
128
	protected void handleSelectionEvent() {
129
		ITraceSelection model = UIPlugin.getDefault().getSelectionModel(_page.getMOFObject());
130
		if (model.size() > 0) {
131
			Object sel = model.getFirstElement();
132
			if (sel != null) {
133
				//select(sel);
134
				if (sel instanceof EObject)
135
					updateStatusContext(ContextManager.getContextLanguage(ContextUpdaterHelper.getContext((EObject)sel)));
136
			}
137
		}
138
	}
139
140
	public void updateModelSelection() {
141
		ISelection selection = getTreeViewer().getSelection();
142
		if (selection != null && !selection.isEmpty()) {
143
			Object sel = ((IStructuredSelection) selection).getFirstElement();
144
			notifyViewSelectionChanged(this, sel);
145
		}
146
	}
147
148
	public void handleViewSelectionChangedEvent(ViewSelectionChangedEvent event) {
149
		Object source = event.getSource();
150
		if (source != this) {
151
			handleSelectionEvent();
152
		} else {
153
			ITraceSelection model = UIPlugin.getDefault().getSelectionModel(_page.getMOFObject());
154
			if (model.size() > 0) {
155
				Object sel = model.getFirstElement();
156
				if (sel != null && sel instanceof EObject)
157
					updateStatusContext(ContextManager.getContextLanguage(ContextUpdaterHelper.getContext((EObject)sel)));
158
			}
159
			updateButtons();
160
		}
161
	}
162
	
163
	protected void firstTimeUpdate() {
164
		super.firstTimeUpdate();
165
		redrawTable();
166
	}
167
168
	public void redrawTable() {
169
		getTree().setRedraw(false);
170
		_currentColumns = ColumnData.createColumnData(getColumnsPreferencesKey(), getDefaultColumnsTemplate());
171
		_currentColumns = TIColumnData.convertColumnData(_currentColumns);
172
		resetColumns(_currentColumns);
173
		getTree().setRedraw(true);
174
		refresh();
175
	}
176
177
	public class BaseStatisticContentProvider implements ITreeContentProvider {
178
179
		public Object[] getChildren(Object parentElement) {
180
			return BaseStatisticView.this.getChildren(parentElement);
181
		}
182
183
		public Object getParent(Object element) {
184
			return null;
185
		}
186
187
		public boolean hasChildren(Object element) {
188
			return BaseStatisticView.this.hasChildren(element);
189
		}
190
191
		public Object[] getElements(Object inputElement) {
192
			return BaseStatisticView.this.getElements(inputElement);
193
		}
194
195
		public void dispose() {
196
		}
197
198
		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
199
		}
200
	}
201
202
	class StatisticTreeViewer extends TreeViewer {
203
204
		public StatisticTreeViewer(Tree tree) {
205
			super(tree);
206
		}
207
208
		public void expandItem(TreeItem item) {
209
			item.setExpanded(true);
210
			createChildren(item);
211
		}
212
213
		public ISelection getSelection() {
214
			ISelection sel = super.getSelection();
215
			if (sel != null && !sel.isEmpty()) {
216
			}
217
			return sel;
218
		}
219
	}
220
221
	public class BaseStatisticFilter extends StatisticFilter {
222
223
		public boolean select(Viewer viewer, Object parent, Object element) {
224
			return false;
225
		}
226
	}
227
228
	protected SimpleSearchQuery getCurrentFilter() {
229
		if (_page instanceof MemoryAnalysisPage)
230
			return ((MemoryAnalysisPage) _page).getCurrentFilter();
231
		return null;
232
	}
233
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ClassPackageNameLabelAdapter.java (+64 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import org.eclipse.hyades.models.trace.TRCClass;
14
import org.eclipse.hyades.models.trace.TRCPackage;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
16
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
17
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
18
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
19
import org.eclipse.swt.graphics.Image;
20
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
21
22
public class ClassPackageNameLabelAdapter extends ColumnLabelAdapter {
23
24
	public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) {
25
		return null;
26
	}
27
28
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
29
		if (element == null)
30
			return null;
31
		if (element instanceof TRCPackage) {
32
			TRCPackage pack = (TRCPackage) element;
33
			IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME);
34
			return createImage(formatter.getDisplayImageByElement(pack.getName(), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
35
		} else if (element instanceof TRCClass) {
36
			TRCClass cls = (TRCClass) element;
37
			IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.CLASS_NAME);
38
			return createImage(formatter.getDisplayImageByElement(cls.getName(), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
39
		}
40
		return null;
41
	}
42
43
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
44
		String displayString = "";
45
		if (element instanceof TRCPackage) {
46
			TRCPackage pack = (TRCPackage) element;
47
			displayString = getDisplyStringFromMap(pack);
48
			if (displayString == null) {
49
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME);
50
				displayString = formatter.getDisplayStringFromElement(pack.getName(), pack, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
51
				displayStringMap.put(pack, displayString);
52
			}
53
		} else if (element instanceof TRCClass) {
54
			TRCClass cls = (TRCClass) element;
55
			displayString = getDisplyStringFromMap(cls);
56
			if (displayString == null) {
57
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.CLASS_NAME);
58
				displayString = formatter.getDisplayStringFromElement(cls.getName(), cls, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
59
				displayStringMap.put(cls, displayString);
60
			}
61
		}
62
		return displayString;
63
	}
64
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadClassNameColumnLabel.java (+38 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadClassNameColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.models.trace.TRCThread;
13
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
16
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
17
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
18
import org.eclipse.swt.graphics.Image;
19
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
20
21
public class ThreadClassNameColumnLabel extends ColumnLabelAdapter {
22
23
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
24
		TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element);
25
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.THREAD_CLASS_NAME);
26
		return formatter.getDisplayStringFromElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
27
	}
28
29
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
30
		TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element);
31
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.CLASS_NAME);
32
		return createImage(formatter.getDisplayImageByElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
33
	}
34
	
35
	public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) {
36
		return null;
37
	}
38
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/TotalSizeLabelAdapter.java (+57 lines)
Added Link Here
1
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
2
3
import org.eclipse.hyades.models.trace.TRCClass;
4
import org.eclipse.hyades.models.trace.TRCMethod;
5
import org.eclipse.hyades.models.trace.TRCPackage;
6
import org.eclipse.hyades.trace.ui.internal.util.TString;
7
import org.eclipse.hyades.trace.views.internal.TracePluginImages;
8
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
9
import org.eclipse.hyades.trace.views.internal.view.columnlabels.TotalSizeColumnLabel;
10
import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails;
11
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
12
import org.eclipse.swt.graphics.Image;
13
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
14
15
public class TotalSizeLabelAdapter extends TotalSizeColumnLabel {
16
17
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
18
19
		String attributeId = getContextAttribute(element, info);
20
		if (attributeId == null)
21
			return "";
22
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
23
		if (!info.isDeltaColumn) {
24
			if (info.showPercentage)
25
				return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max);
26
			else
27
				return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
28
		} else {
29
			if (element instanceof TRCPackage
30
					|| element instanceof TRCClass
31
					|| element instanceof TRCMethod
32
					|| element instanceof MethodCallDetails)
33
				return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
34
			else
35
				return "";
36
		}
37
	}
38
	
39
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
40
		if (!info.isDeltaColumn) {
41
			Number delta = getDelta(element, info);
42
			double d = delta != null ? delta.doubleValue() : 0;
43
			if (d < 0)
44
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN);
45
			if (d > 0)
46
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP);
47
			else {
48
				String attributeId = getContextAttribute(element, info);
49
				if (attributeId == null)
50
					return null;
51
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
52
				return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
53
			}
54
		}
55
		return null;
56
	}
57
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/AvgAgeLabelAdapter.java (+87 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import java.util.Map;
14
15
import org.eclipse.emf.ecore.EObject;
16
import org.eclipse.hyades.models.trace.TRCClass;
17
import org.eclipse.hyades.models.trace.TRCPackage;
18
import org.eclipse.hyades.models.trace.TracePackage;
19
import org.eclipse.hyades.models.trace.impl.TRCClassImpl.TRCClassSnapshot;
20
import org.eclipse.hyades.models.trace.impl.TRCPackageImpl.TRCPackageSnapshot;
21
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
22
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
23
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes;
24
import org.eclipse.tptp.trace.jvmti.internal.client.views.BaseMemoryStatisticView.AgeInfo;
25
26
public class AvgAgeLabelAdapter extends NumberLabelAdapter {
27
28
	Map _ageMap;
29
	
30
	public AvgAgeLabelAdapter(Map ageMap) {
31
		_ageMap = ageMap;
32
	}
33
34
	protected Number getValue(Object element, ColumnDisplayInfo info) {
35
		if (element instanceof TRCPackage) {
36
			// TODO stub
37
			//TRCPackageImpl.TRCPackageSnapshot ps = (TRCPackageImpl.TRCPackageSnapshot)((TRCPackage) element).retrieveSnapshot();		
38
			//return new Integer(getAverageAge());
39
			return new Integer(0);
40
		}
41
		if (element instanceof TRCClass) {
42
			// TODO stub
43
			//TRCClassImpl.TRCClassSnapshot cs = (TRCClassImpl.TRCClassSnapshot)((TRCClass) element).retrieveSnapshot();		
44
			//return new Integer(getAverageAge());
45
			AgeInfo age = (AgeInfo) _ageMap.get(element);
46
			double sum = age != null ? age.sumAges : 0;
47
			int count = age != null ? age.objCount : 0;
48
			if (count > 0)
49
				sum /= count;
50
			else
51
				sum = 0;
52
			return new Double(sum);
53
		}
54
		return null;
55
	}
56
57
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
58
		if (element instanceof TRCPackage) {
59
			// TODO stub
60
			TRCPackageSnapshot delta = packageSnapshot();
61
			((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__TOTAL_INSTANCES);
62
			((TRCPackage)element).computeDelta(delta,TracePackage.TRC_PACKAGE__COLLECTED_INSTANCES);						
63
			//return new Integer(delta.getTotalInstances() - delta.getCollectedInstances());
64
			return new Integer(0);
65
		}
66
		if (element instanceof TRCClass) {
67
			// TODO stub
68
			TRCClassSnapshot delta = classSnapshot();			
69
			((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__TOTAL_INSTANCES);
70
			((TRCClass)element).computeDelta(delta,TracePackage.TRC_CLASS__COLLECTED_INSTANCES);						
71
			//return new Integer(delta.getTotalInstances() - delta.getCollectedInstances());
72
			return new Integer(0);
73
		}		
74
		return null;
75
	}
76
	
77
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
78
		EObject eObj = ContextUpdaterHelper.getEObject(element);		
79
		if (eObj instanceof TRCPackage)
80
			return TIContextAttributes.PACKAGE_AVG_AGE;
81
		else if (eObj instanceof TRCClass)
82
			return TIContextAttributes.CLASS_AVG_AGE;
83
		else
84
			return null;
85
		// TODO call sites
86
	}			
87
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadNameLabelAdapter.java (+39 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import org.eclipse.hyades.models.trace.TRCThread;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
16
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
17
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
18
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
19
import org.eclipse.swt.graphics.Image;
20
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
21
22
public class ThreadNameLabelAdapter extends ColumnLabelAdapter {
23
24
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
25
		TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element);
26
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.THREAD_NAME);
27
		return formatter.getDisplayStringFromElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
28
	}
29
30
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
31
		TRCThread thread = (TRCThread) ContextUpdaterHelper.getEObject(element);
32
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.THREAD_NAME);
33
		return createImage(formatter.getDisplayImageByElement(thread.getName(), thread, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
34
	}
35
	
36
	public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) {
37
		return null;
38
	}
39
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/LiveInstancesLabelAdapter.java (+67 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import org.eclipse.hyades.models.trace.TRCClass;
14
import org.eclipse.hyades.models.trace.TRCMethod;
15
import org.eclipse.hyades.models.trace.TRCPackage;
16
import org.eclipse.hyades.trace.ui.internal.util.TString;
17
import org.eclipse.hyades.trace.views.internal.TracePluginImages;
18
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
19
import org.eclipse.hyades.trace.views.internal.view.columnlabels.LiveInstancesColumnLabel;
20
import org.eclipse.hyades.trace.views.util.internal.MethodCallDetails;
21
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
22
import org.eclipse.swt.graphics.Image;
23
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
24
25
public class LiveInstancesLabelAdapter extends LiveInstancesColumnLabel {
26
27
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
28
29
		String attributeId = getContextAttribute(element, info);
30
		if (attributeId == null)
31
			return "";
32
		IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
33
		if (!info.isDeltaColumn) {
34
			if (info.showPercentage)
35
				return TString.formatAsPercentage(getValue(element, info).doubleValue() / info.max);
36
			else
37
				return formatter.getDisplayStringFromElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
38
		} else {
39
			if (element instanceof TRCPackage
40
					|| element instanceof TRCClass
41
					|| element instanceof TRCMethod
42
					|| element instanceof MethodCallDetails)
43
				return formatter.getDisplayStringFromElement(getDelta(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
44
			else
45
				return "";
46
		}
47
	}
48
	
49
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
50
		if (!info.isDeltaColumn) {
51
			Number delta = getDelta(element, info);
52
			double d = delta != null ? delta.doubleValue() : 0;
53
			if (d < 0)
54
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTADOWN);
55
			if (d > 0)
56
				return TracePluginImages.getImage(TracePluginImages.IMG_DELTAUP);
57
			else {
58
				String attributeId = getContextAttribute(element, info);
59
				if (attributeId == null)
60
					return null;
61
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(attributeId);
62
				return createImage(formatter.getDisplayImageByElement(getValue(element, info), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
63
			}
64
		}
65
		return null;
66
	}
67
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/AllocationDetailsView.java (+102 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.views;
16
17
import org.eclipse.hyades.models.trace.TRCClass;
18
import org.eclipse.hyades.trace.ui.TraceViewerPage;
19
import org.eclipse.hyades.trace.views.util.internal.ColumnData;
20
import org.eclipse.hyades.trace.views.util.internal.StatisticTableColumnInfo;
21
import org.eclipse.jface.viewers.Viewer;
22
import org.eclipse.swt.graphics.Image;
23
import org.eclipse.swt.widgets.Composite;
24
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextAttributes;
25
26
public class AllocationDetailsView extends BaseStatisticView {
27
28
	protected AllocationDetailsView(Composite parent, TraceViewerPage page) {
29
		super(parent, page);
30
	}
31
32
	protected String getColumnsPreferencesKey() {
33
		return "org.eclipse.hyades.trace.views.statistic.allocdetails02";
34
	}
35
36
	protected String getViewTypeStr() {
37
		return "viewoption.allocdetails";
38
	}
39
40
	protected String getDefaultColumnsTemplate() {
41
		return ""
42
			+ TIContextAttributes.METHOD_NAME + ":" + 0 + ":" + String.valueOf(ColumnData.NONDELETABLE | ColumnData.IS_VISIBLE | ColumnData.NONMOVABLE) + ":left:150,"
43
			+ TIContextAttributes.METHOD_LINE_NUMBER + ":" + 1 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":left:120,"
44
			+ TIContextAttributes.THREAD_CLASS_NAME + ":" + 2 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":left:150,"
45
			+ TIContextAttributes.PACKAGE_NAME + ":" + 3 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":left:120,"
46
			+ TIContextAttributes.CLASS_LIVE_INST + ":" + 4 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
47
			+ TIContextAttributes.CLASS_ACTIVE_SIZE + ":" + 5 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
48
			+ TIContextAttributes.CLASS_TOTAL_INST + ":" + 6 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
49
			+ TIContextAttributes.CLASS_TOTAL_SIZE + ":" + 7 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80,"
50
			+ TIContextAttributes.CLASS_AVG_AGE + ":" + 8 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80"
51
			//+ TIContextAttributes.CLASS_GENERATIONS + ":" + 9 + ":" + String.valueOf(ColumnData.IS_VISIBLE) + ":right:80"
52
			;
53
	}
54
	
55
	public String getColumnText(Object element, int columnIndex) {
56
		StatisticTableColumnInfo info = StatisticTableColumnInfo.getStatisticTableColumnInfo(getTree().getColumn(columnIndex));
57
		int pos = info.getColumnData().getInitalPos();
58
		String label = "placeholder-" + pos;
59
		TRCClass cls = null;
60
		if (true)
61
			return label;
62
		switch (pos) {
63
		case 0: label = "method name"; break;
64
		case 1: label = "line number"; break;
65
		case 2: label = cls.getName(); break;
66
		case 3: label = cls.getPackage().getName(); break;
67
		case 4: label = "" + (cls.getTotalInstances() - cls.getCollectedInstances()); break;
68
		case 5: label = "" + (cls.getTotalSize() - cls.getCollectedSize()); break;
69
		case 6: label = "" + cls.getTotalInstances(); break;
70
		case 7: label = "" + cls.getTotalSize(); break;
71
		//case 8: label = "" + cls.getAvarageAge(); break;
72
		//case 9: label = "" + cls.getGenerations(); break;
73
		}
74
		return label;
75
	}
76
77
	public Image getColumnImage(Object element, int columnIndex) {
78
		return null;
79
	}
80
81
	public Object[] getElements(Object inputElement) {
82
		return new Object[] {""};
83
	}
84
85
	public int compare(Viewer viewer, Object e1, Object e2, int pos) {
86
		return 0;
87
	}
88
89
	public Object[] getChildren(Object parentElement) {
90
		return null;
91
	}
92
93
	public boolean hasChildren(Object element) {
94
		return false;
95
	}
96
97
	protected StatisticSorter getViewerSorterInstance() {
98
		return new StatisticSorter() {
99
			
100
		};
101
	}
102
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadRunningTimeLP.java (+42 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
23
24
public class ThreadRunningTimeLP extends AttrLPAdapter {
25
26
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
27
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
28
			return UIMessages._THREAD_RUNNING_TIME;
29
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
30
			if (value != null && value instanceof Double)
31
				return Utils.formatTime(((Double)value).doubleValue());
32
		}
33
		return "";
34
	}
35
36
	protected List internalSupportModes() {
37
		List modes = super.internalSupportModes();
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
40
		return modes;
41
	}
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/PackageNameLabelAdapter.java (+50 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2007 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id:
8
 * 
9
 **********************************************************************/
10
11
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
12
13
import org.eclipse.hyades.models.trace.TRCPackage;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
16
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
17
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
18
import org.eclipse.swt.graphics.Image;
19
import org.eclipse.tptp.trace.jvmti.internal.client.context.TIContextProvider;
20
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
21
22
public class PackageNameLabelAdapter extends ColumnLabelAdapter {
23
24
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
25
		TRCPackage pack = Utils.getPackage(element);
26
		if (pack != null) {
27
			String displayString = getDisplyStringFromMap(pack);
28
			if (displayString == null) {
29
				IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME);
30
				displayString = formatter.getDisplayStringFromElement(pack.getName(), pack, IContextLabelFormatProvider.MODE_COLUMN_CONTENT);
31
				displayStringMap.put(pack, displayString);
32
			}
33
			return displayString;// + " [" + pack.getProcess().getPid() + "]";
34
		}
35
		return "";
36
	}
37
38
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
39
		TRCPackage pack = Utils.getPackage(element);
40
		if (pack != null) {
41
			IContextLabelFormatProvider formatter = TIContextProvider.instance().getContextLabelFormatProvider(IContextAttributes.PACKAGE_NAME);
42
			return createImage(formatter.getDisplayImageByElement(pack.getName(), element, IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
43
		}
44
		return null;
45
	}
46
47
	public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) {
48
		return null;
49
	}
50
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/MethodDetails.java (+40 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client;
16
17
public class MethodDetails {
18
19
	public String name;
20
	public String signature;
21
	public int line;
22
	public boolean running;
23
24
	public MethodDetails() {
25
	}
26
27
	public MethodDetails(String name) {
28
		this(name, null);
29
	}
30
31
	public MethodDetails(String name, String signature) {
32
		this(name, signature, -1);
33
	}
34
35
	public MethodDetails(String name, String signature, int line) {
36
		this.name = name;
37
		this.signature = signature;
38
		this.line = line;
39
	}
40
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/GenerationsLP.java (+39 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
23
public class GenerationsLP extends AttrLPAdapter {
24
25
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
26
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
27
			return UIMessages._GENERATIONS;
28
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT)
29
			return "placeholder (Generations)";
30
		return "";
31
	}
32
33
	protected List internalSupportModes() {
34
		List modes = super.internalSupportModes();
35
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
36
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
37
		return modes;
38
	}
39
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/TIContextAttributes.java (+32 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
18
19
public interface TIContextAttributes extends IContextAttributes {
20
21
	public final static String METHOD_LINE_NUMBER = "method.line.number";
22
23
	public final static String PACKAGE_AVG_AGE = "package.avg.age";
24
	public final static String PACKAGE_GENERATIONS = "package.generations";
25
26
	public final static String CLASS_AVG_AGE = "class.avg.age";
27
	public final static String CLASS_GENERATIONS = "class.generations";
28
29
	public final static String CALL_SITE_LINE_NUMBER = "callsite.line.number";
30
	public final static String CALL_SITE_AVG_AGE = "callsite.avg.age";
31
	public final static String CALL_SITE_GENERATIONS = "callsite.generations";
32
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockCountColumnLabel.java (+31 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadDeadlockCountColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
13
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
14
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
15
16
public class ThreadDeadlockCountColumnLabel extends ThreadDetailsColumnLabel {
17
	
18
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
19
		Number value = getValue(element, info);
20
		int number = value != null ? value.intValue() : 0;
21
		return number > 0 ? Integer.toString(number) : "";
22
	}
23
24
	protected String getContextAttribute() {
25
		return IContextAttributes.THREAD_DEADLOCK_COUNT;
26
	}
27
28
	protected Number getValue(ThreadDetails thread) {
29
		return new Double(thread.getDeadlockCount());
30
	}	
31
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStateColumnLabel.java (+51 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadStateColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
13
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnLabelAdapter;
14
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
15
import org.eclipse.swt.graphics.Image;
16
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
17
18
public class ThreadStateColumnLabel extends ColumnLabelAdapter {
19
	
20
	public String getDisplayString(Object element, ColumnDisplayInfo info) {
21
		if (element instanceof ThreadDetails) {
22
			switch (((ThreadDetails)element).getState()) {
23
			case ThreadDetails.RUNNING:
24
				return UIMessages._Running;
25
			case ThreadDetails.SLEEPING:
26
				return UIMessages._Sleeping;
27
			case ThreadDetails.WAITING:
28
				return UIMessages._Waiting;
29
			case ThreadDetails.BLOCKED:
30
				return UIMessages._Blocked;
31
			case ThreadDetails.DEADLOCK:
32
				return UIMessages._Deadlocked;
33
			case ThreadDetails.STOPPED:
34
				return UIMessages._Stopped;
35
			}
36
		}
37
		return UIMessages._Unknown;
38
	}
39
	
40
	public Image getDisplayImage(Object element, ColumnDisplayInfo info) {
41
		return null;
42
	}
43
44
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
45
		return null;
46
	}
47
48
	public Double comparableDoubleValue(Object element, ColumnDisplayInfo info) {
49
		return null;
50
	}	
51
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadDeadlockedTimeColumnLabel.java (+24 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadDeadlockedTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadDeadlockedTimeColumnLabel extends ThreadDetailsColumnLabel {
16
	
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_DEADLOCKED_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getDeadlockedTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadWaitingTimeLP.java (+42 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
23
24
public class ThreadWaitingTimeLP extends AttrLPAdapter {
25
26
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
27
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
28
			return UIMessages._THREAD_WAITING_TIME;
29
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
30
			if (value != null && value instanceof Double)
31
				return Utils.formatTime(((Double)value).doubleValue());
32
		}
33
		return null;
34
	}
35
36
	protected List internalSupportModes() {
37
		List modes = super.internalSupportModes();
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
40
		return modes;
41
	}
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadWaitingTimeColumnLabel.java (+24 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadWaitingTimeColumnLabel.java,v 1.1 2006/10/26 19:28:23 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.hyades.trace.views.util.internal.ThreadDetails;
13
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
14
15
public class ThreadWaitingTimeColumnLabel extends ThreadDetailsColumnLabel {
16
17
	protected String getContextAttribute() {
18
		return IContextAttributes.THREAD_WAITING_TIME;
19
	}
20
21
	protected Number getValue(ThreadDetails thread) {
22
		return new Double(thread.getWaitingTime());
23
	}	
24
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/AverageAgeLP.java (+43 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
23
public class AverageAgeLP extends AttrLPAdapter {
24
25
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
26
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
27
			return UIMessages._AVG_AGE;
28
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
29
			if (value != null && value instanceof Integer)
30
				return value.toString();
31
			if (value != null && value instanceof Double)
32
				return value.toString();
33
		}
34
		return "";
35
	}
36
37
	protected List internalSupportModes() {
38
		List modes = super.internalSupportModes();
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
40
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
41
		return modes;
42
	}
43
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/columnlabels/ThreadStartTimeColumnLabel.java (+41 lines)
Added Link Here
1
/**********************************************************************
2
 * Copyright (c) 2006 Intel Corporation.
3
 * All rights reserved.   This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * $Id: ThreadStartTimeColumnLabel.java,v 1.1 2006/10/26 19:28:22 ewchan Exp $
8
 * 
9
 **********************************************************************/
10
package org.eclipse.tptp.trace.jvmti.internal.client.views.columnlabels;
11
12
import org.eclipse.emf.ecore.EObject;
13
import org.eclipse.hyades.models.trace.TRCThread;
14
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ColumnDisplayInfo;
15
import org.eclipse.hyades.trace.views.internal.view.columnlabels.ContextUpdaterHelper;
16
import org.eclipse.hyades.ui.provisional.context.IContextAttributes;
17
18
public class ThreadStartTimeColumnLabel extends NumberLabelAdapter {
19
	
20
	protected Number getValue(Object element, ColumnDisplayInfo info) {
21
		EObject eObj = ContextUpdaterHelper.getEObject(element);
22
23
		if (eObj instanceof TRCThread)
24
			return new Double(((TRCThread) eObj).getStartTime());
25
		else
26
			return null;
27
	}
28
29
	protected Number getDelta(Object element, ColumnDisplayInfo info) {
30
		return null;
31
	}
32
33
	protected String getContextAttribute(Object element, ColumnDisplayInfo info) {
34
		EObject eObj = ContextUpdaterHelper.getEObject(element);		
35
		
36
		if (eObj instanceof TRCThread)
37
			return IContextAttributes.THREAD_START_TIME;
38
		else
39
			return null;
40
	}	
41
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/context/ThreadSleepingTimeLP.java (+42 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.context;
16
17
import java.util.List;
18
19
import org.eclipse.hyades.trace.views.internal.context.java.formatters.AttrLPAdapter;
20
import org.eclipse.hyades.ui.provisional.context.IContextLabelFormatProvider;
21
import org.eclipse.tptp.trace.jvmti.internal.client.views.UIMessages;
22
import org.eclipse.tptp.trace.jvmti.internal.client.widgets.Utils;
23
24
public class ThreadSleepingTimeLP extends AttrLPAdapter {
25
26
	public String getDisplayStringFromElement(Object value, Object element, int mode) {
27
		if (mode == IContextLabelFormatProvider.MODE_COLUMN_HEADER)
28
			return UIMessages._THREAD_SLEEPING_TIME;
29
		else if (mode == IContextLabelFormatProvider.MODE_COLUMN_CONTENT) {
30
			if (value != null && value instanceof Double)
31
				return Utils.formatTime(((Double)value).doubleValue());
32
		}
33
		return "";
34
	}
35
36
	protected List internalSupportModes() {
37
		List modes = super.internalSupportModes();
38
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_HEADER));
39
		modes.add(new Integer(IContextLabelFormatProvider.MODE_COLUMN_CONTENT));
40
		return modes;
41
	}
42
}
(-)src/org/eclipse/tptp/trace/jvmti/internal/client/views/OpenMemoryAnalysisViewAction.java (+38 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 2007, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Ruslan A. Scherbakov, Intel - Initial API and implementation
11
 *
12
 * $Id$ 
13
 *****************************************************************************/
14
15
package org.eclipse.tptp.trace.jvmti.internal.client.views;
16
17
import org.eclipse.jface.resource.ImageDescriptor;
18
19
public class OpenMemoryAnalysisViewAction extends OpenTraceViewActionBase {
20
21
	private final String VIEW_ID = "org.eclipse.tptp.trace.jvmti.internal.client.views.MemoryAnalysisViewer";
22
23
	public OpenMemoryAnalysisViewAction() {
24
		super("");
25
	}
26
27
	public OpenMemoryAnalysisViewAction(String label) {
28
		super(label);
29
	}
30
31
	public OpenMemoryAnalysisViewAction(String label, ImageDescriptor image) {
32
		super(label, image);
33
	}
34
35
	public String getViewID() {
36
		return VIEW_ID;
37
	}
38
}

Return to bug 167609