Skip to content

Commit cbb993e

Browse files
committed
Merge branch 'master' into graal
2 parents 7b4e15d + ab380b7 commit cbb993e

File tree

19 files changed

+213
-106
lines changed

19 files changed

+213
-106
lines changed

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/InstanceReferenceNode.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,11 @@
2929
import org.graalvm.visualvm.lib.jfluid.heap.Instance;
3030
import org.graalvm.visualvm.lib.jfluid.heap.ObjectFieldValue;
3131
import org.graalvm.visualvm.lib.jfluid.heap.Value;
32-
import org.openide.util.NbBundle;
3332

3433
/**
3534
*
3635
* @author Jiri Sedlacek
3736
*/
38-
@NbBundle.Messages({
39-
"InstanceReferenceNode_NodeNameField={0} {1}",
40-
"InstanceReferenceNode_NodeNameReference={0} in {1}"
41-
})
4237
public abstract class InstanceReferenceNode extends InstanceNode.IncludingNull {
4338

4439
private final Mode mode;
@@ -89,8 +84,8 @@ public String getFieldName() {
8984

9085
public String toString() {
9186
// TODO: should not be called directly when sorting the tree
92-
if (Mode.INCOMING_REFERENCE.equals(mode)) return Bundle.InstanceReferenceNode_NodeNameReference(getFieldName(), getName(null));
93-
else return Bundle.InstanceReferenceNode_NodeNameField(getFieldName(), getName(null));
87+
if (Mode.INCOMING_REFERENCE.equals(mode)) return getFieldName() + " in " + getName(null); // NOI18N
88+
else return getFieldName() + " = " + getName(null); // NOI18N
9489
}
9590

9691
public boolean equals(Object o) {

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/PrimitiveNode.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,16 @@ public String getFieldName() {
5353
public abstract String getValue();
5454

5555

56+
private String getName() {
57+
return getFieldName() + " = " + getType() + " " + getValue(); // NOI18N
58+
}
59+
5660
public String toString() {
57-
return getFieldName();
61+
return getName();
5862
}
5963

6064
protected Object getValue(DataType type, Heap heap) {
61-
if (type == DataType.NAME) return getFieldName();
65+
if (type == DataType.NAME) return getName();
6266
if (type == DataType.OWN_SIZE) return DataType.OWN_SIZE.getNoValue();
6367
if (type == DataType.RETAINED_SIZE) return DataType.RETAINED_SIZE.getNoValue();
6468
if (type == DataType.OBJECT_ID) return DataType.OBJECT_ID.getNoValue();

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/impl/JavaDiffObjectsView.java

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,16 @@
5757
import javax.swing.JMenuItem;
5858
import javax.swing.JPopupMenu;
5959
import javax.swing.JToggleButton;
60+
import javax.swing.SwingUtilities;
6061
import org.graalvm.visualvm.lib.jfluid.heap.JavaClass;
6162
import org.graalvm.visualvm.lib.ui.swing.GrayLabel;
62-
import org.graalvm.visualvm.lib.ui.swing.renderer.HideableBarRenderer;
6363
import org.graalvm.visualvm.lib.ui.swing.renderer.ProfilerRenderer;
6464
import org.graalvm.visualvm.lib.profiler.api.ProfilerDialogs;
6565
import org.graalvm.visualvm.lib.profiler.api.icons.Icons;
6666
import org.graalvm.visualvm.lib.profiler.api.icons.LanguageIcons;
6767
import org.graalvm.visualvm.lib.profiler.api.icons.ProfilerIcons;
68+
import org.graalvm.visualvm.lib.ui.swing.renderer.HideableBarRenderer;
69+
import org.graalvm.visualvm.lib.ui.swing.renderer.RelativeRenderer;
6870
import org.openide.util.Exceptions;
6971
import org.openide.util.NbBundle;
7072
import org.openide.util.RequestProcessor;
@@ -111,6 +113,10 @@ private static enum Aggregation {
111113
private HeapViewerNode status;
112114
private List<ClassNode> diffClasses;
113115

116+
private int maxDiffCount = 0;
117+
private long maxDiffSize = 0;
118+
private long maxDiffRetained = 0;
119+
114120
private final PluggableTreeTableView objectsView;
115121
private ProfilerToolbar toolbar;
116122
private JComponent component;
@@ -132,35 +138,45 @@ public JavaDiffObjectsView(HeapContext context1, File file2, final boolean compa
132138

133139
final Heap heap = context1.getFragment().getHeap();
134140

135-
status = new ProgressNode(Bundle.JavaDiffObjectsView_LoadingProgress());
136-
new RequestProcessor("Compare Heap Dumps Worker").post(new Runnable() { // NOI18N
137-
public void run() { computeDiffClasses(heap, compareRetained); }
138-
});
141+
final TreeTableViewColumn countC = new TreeTableViewColumn.Count(heap);
142+
final TreeTableViewColumn sizeC = new TreeTableViewColumn.OwnSize(heap, true, true);
143+
final TreeTableViewColumn retainedC = compareRetained ? new TreeTableViewColumn.RetainedSize(heap) : null;
139144

140-
141145
TreeTableViewColumn[] columns = compareRetained ?
142146
new TreeTableViewColumn[] {
143147
new TreeTableViewColumn.Name(heap),
144148
// new TreeTableViewColumn.LogicalValue(heap),
145-
new TreeTableViewColumn.Count(heap),
146-
new TreeTableViewColumn.OwnSize(heap, true, true),
147-
new TreeTableViewColumn.RetainedSize(heap)
149+
countC,
150+
sizeC,
151+
retainedC
148152
} :
149153
new TreeTableViewColumn[] {
150154
new TreeTableViewColumn.Name(heap),
151155
// new TreeTableViewColumn.LogicalValue(heap),
152-
new TreeTableViewColumn.Count(heap),
153-
new TreeTableViewColumn.OwnSize(heap, true, true)
156+
countC,
157+
sizeC
154158
};
155159

156160
for (TreeTableViewColumn column : columns) {
157161
ProfilerRenderer renderer = column.getRenderer();
158-
if (renderer instanceof HideableBarRenderer) {
159-
HideableBarRenderer brenderer = (HideableBarRenderer)renderer;
160-
brenderer.setDiffMode(true);
161-
}
162+
if (renderer instanceof RelativeRenderer) ((RelativeRenderer)renderer).setDiffMode(true);
162163
}
163164

165+
status = new ProgressNode(Bundle.JavaDiffObjectsView_LoadingProgress());
166+
new RequestProcessor("Compare Heap Dumps Worker").post(new Runnable() { // NOI18N
167+
public void run() {
168+
computeDiffClasses(heap, compareRetained);
169+
SwingUtilities.invokeLater(new Runnable() {
170+
public void run() {
171+
((HideableBarRenderer)countC.getRenderer()).setMaxValue(maxDiffCount);
172+
((HideableBarRenderer)sizeC.getRenderer()).setMaxValue(maxDiffSize);
173+
if (compareRetained) ((HideableBarRenderer)retainedC.getRenderer()).setMaxValue(maxDiffRetained);
174+
if (objectsView != null) objectsView.getComponent().repaint();
175+
}
176+
});
177+
}
178+
});
179+
164180
objectsView = new PluggableTreeTableView("diff_java_objects", context1, actions, columns) { // NOI18N
165181
protected HeapViewerNode[] computeData(RootNode root, Heap heap, String viewID, HeapViewerNodeFilter viewFilter, List<DataType> dataTypes, List<SortOrder> sortOrders, Progress progress) throws InterruptedException {
166182
synchronized (statusLock) {
@@ -280,7 +296,7 @@ protected void fireItemStateChanged(ItemEvent e) {
280296
}
281297

282298

283-
private void computeDiffClasses(Heap heap, boolean compareRetained) {
299+
private void computeDiffClasses(Heap heap, final boolean compareRetained) {
284300
try {
285301
HeapViewer otherViewer = new HeapViewer(file2);
286302

@@ -292,6 +308,18 @@ private void computeDiffClasses(Heap heap, boolean compareRetained) {
292308
Heap diffHeap = otherContext.getFragment().getHeap();
293309
synchronized (statusLock) {
294310
diffClasses = JavaDiffClassesProvider.createDiffClasses(heap, diffHeap, compareRetained);
311+
312+
for (ClassNode node : diffClasses) {
313+
int count = Math.abs(node.getInstancesCount());
314+
maxDiffCount = Math.max(maxDiffCount, count);
315+
long size = Math.abs(node.getOwnSize());
316+
maxDiffSize = Math.max(maxDiffSize, size);
317+
if (compareRetained) {
318+
long retained = Math.abs(node.getRetainedSize(heap));
319+
maxDiffRetained = Math.max(maxDiffRetained, retained);
320+
}
321+
}
322+
295323
status = null;
296324
}
297325
objectsView.reloadView();

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/java/impl/JavaFieldsPlugin.java

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -337,11 +337,13 @@ int getValuesCount() {
337337
return valuesCount;
338338
}
339339

340-
public String toString() {
340+
341+
private String getName() {
341342
if (valuesCount == -1) return fieldName;
342343
else return fieldName + " " + Bundle.JavaFieldsPlugin_ValuesCountHint(valuesCount); // NOI18N
343344
}
344345

346+
345347
abstract int instancesCount();
346348

347349
abstract InterruptibleIterator<Instance> instancesIterator();
@@ -460,6 +462,18 @@ protected String getNodesContainerString(String firstNodeIdx, String lastNodeIdx
460462

461463
}
462464

465+
466+
protected Object getValue(DataType type, Heap heap) {
467+
if (type == DataType.NAME) return getName();
468+
469+
return super.getValue(type, heap);
470+
}
471+
472+
473+
public String toString() {
474+
return getName();
475+
}
476+
463477
}
464478

465479

@@ -495,7 +509,17 @@ public int getValuesCount() {
495509
abstract InterruptibleIterator<Instance> instancesIterator();
496510

497511

512+
public String getName() {
513+
return getType() + " " + getValue();
514+
}
515+
516+
public String toString() {
517+
return getName();
518+
}
519+
520+
498521
protected Object getValue(DataType type, Heap heap) {
522+
if (type == DataType.NAME) return getName();
499523
if (type == DataType.COUNT) return getValuesCount();
500524

501525
return super.getValue(type, heap);
@@ -545,7 +569,7 @@ protected String getNodesContainerString(String firstNodeIdx, String lastNodeIdx
545569

546570
}
547571

548-
static abstract class InstanceFieldValueNode extends InstanceNode {
572+
static abstract class InstanceFieldValueNode extends InstanceNode.IncludingNull {
549573

550574
private final int valuesCount;
551575

@@ -561,32 +585,6 @@ public int getValuesCount() {
561585
}
562586

563587

564-
public JavaClass getJavaClass() {
565-
if (getInstance() == null) return null;
566-
else return super.getJavaClass();
567-
}
568-
569-
public String getName(Heap heap) {
570-
if (getInstance() == null) return "null"; // NOI18N
571-
else return super.getName(heap);
572-
}
573-
574-
public String getLogicalValue(Heap heap) {
575-
if (getInstance() == null) return DataType.LOGICAL_VALUE.getNoValue();
576-
else return super.getLogicalValue(heap);
577-
}
578-
579-
public long getOwnSize() {
580-
if (getInstance() == null) return DataType.OWN_SIZE.getNoValue();
581-
else return super.getOwnSize();
582-
}
583-
584-
public long getRetainedSize(Heap heap) {
585-
if (getInstance() == null) return DataType.RETAINED_SIZE.valuesAvailable(heap) ?
586-
DataType.RETAINED_SIZE.getNoValue() : DataType.RETAINED_SIZE.getNotAvailableValue();
587-
else return super.getRetainedSize(heap);
588-
}
589-
590588
public boolean equals(Object o) {
591589
if (o == this) return true;
592590
if (!(o instanceof InstanceFieldValueNode)) return false;

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/model/HeapViewerNodeWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public String toString() {
6767

6868
@Override
6969
protected <T> T getValue(DataType<T> type, Heap heap) {
70-
return super.getValue(type, heap);
70+
return node.getValue(type, heap);
7171
}
7272

7373
}

visualvm/heapviewer/src/org/graalvm/visualvm/heapviewer/utils/HeapOperations.java

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.graalvm.visualvm.lib.jfluid.heap.JavaClass;
3636
import org.netbeans.api.progress.ProgressHandle;
3737
import org.openide.util.NbBundle;
38+
import org.openide.util.RequestProcessor;
3839

3940
/**
4041
*
@@ -82,10 +83,10 @@ public static void initializeRetainedSizes(Heap heap) throws InterruptedExceptio
8283
// --- References ----------------------------------------------------------
8384

8485
private static boolean referencesInitialized;
85-
private static volatile Thread referencesComputer;
86+
private static volatile RequestProcessor.Task referencesComputer;
8687

8788
private void initializeReferencesImpl(Heap heap) throws InterruptedException {
88-
Thread _referencesComputer;
89+
RequestProcessor.Task _referencesComputer;
8990

9091
synchronized (this) {
9192
if (referencesInitialized) return;
@@ -114,29 +115,28 @@ public void run() {
114115
}
115116
}
116117
};
117-
referencesComputer = new Thread(workerR, "References Computer"); // NO18N
118-
_referencesComputer = referencesComputer; // NOTE: must be assigned before starting the thread which eventually nulls the referencesComputer!
119-
referencesComputer.start();
118+
referencesComputer = new RequestProcessor("References Computer").post(workerR); // NO18N
119+
_referencesComputer = referencesComputer;
120120
} else {
121121
_referencesComputer = referencesComputer;
122122
}
123123
}
124124

125125
assert !SwingUtilities.isEventDispatchThread();
126126

127-
_referencesComputer.join();
127+
_referencesComputer.waitFinished(0);
128128
}
129129

130130

131131
// --- GC Roots ------------------------------------------------------------
132132

133133
private static boolean gcrootsInitialized;
134-
private static volatile Thread gcrootsComputer;
134+
private static volatile RequestProcessor.Task gcrootsComputer;
135135

136136
private void initializeGCRootsImpl(Heap heap) throws InterruptedException {
137137
initializeReferencesImpl(heap);
138138

139-
Thread _gcrootsComputer;
139+
RequestProcessor.Task _gcrootsComputer;
140140

141141
synchronized (this) {
142142
if (gcrootsInitialized) return;
@@ -165,29 +165,27 @@ public void run() {
165165
}
166166
}
167167
};
168-
gcrootsComputer = new Thread(workerR, "GC Roots Computer"); // NO18N
169-
_gcrootsComputer = gcrootsComputer; // NOTE: must be assigned before starting the thread which eventually nulls the gcrootsComputer!
170-
gcrootsComputer.start();
168+
gcrootsComputer = new RequestProcessor("GC Roots Computer").post(workerR); // NO18N
169+
_gcrootsComputer = gcrootsComputer;
171170
} else {
172171
_gcrootsComputer = gcrootsComputer;
173172
}
174173
}
175174

176175
assert !SwingUtilities.isEventDispatchThread();
177176

178-
_gcrootsComputer.join();
177+
_gcrootsComputer.waitFinished(0);
179178
}
180179

181-
182180
// --- GC Roots ------------------------------------------------------------
183181

184182
private static boolean retainedInitialized;
185-
private static volatile Thread retainedComputer;
183+
private static volatile RequestProcessor.Task retainedComputer;
186184

187185
private void initializeRetainedSizesImpl(Heap heap) throws InterruptedException {
188186
initializeGCRootsImpl(heap);
189187

190-
Thread _retainedComputer;
188+
RequestProcessor.Task _retainedComputer;
191189

192190
synchronized (this) {
193191
if (retainedInitialized) return;
@@ -216,17 +214,16 @@ public void run() {
216214
}
217215
}
218216
};
219-
retainedComputer = new Thread(workerR, "Retained Sizes Computer"); // NO18N
220-
_retainedComputer = retainedComputer; // NOTE: must be assigned before starting the thread which eventually nulls the retainedComputer!
221-
retainedComputer.start();
217+
retainedComputer = new RequestProcessor("Retained Sizes Computer").post(workerR); // NO18N
218+
_retainedComputer = retainedComputer;
222219
} else {
223220
_retainedComputer = retainedComputer;
224221
}
225222
}
226223

227224
assert !SwingUtilities.isEventDispatchThread();
228225

229-
_retainedComputer.join();
226+
_retainedComputer.waitFinished(0);
230227
}
231228

232229
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Manifest-Version: 1.0
22
OpenIDE-Module: org.graalvm.visualvm.lib.ui/1
33
OpenIDE-Module-Localizing-Bundle: org/graalvm/visualvm/lib/ui/Bundle.properties
4-
OpenIDE-Module-Specification-Version: 1.147
4+
OpenIDE-Module-Specification-Version: 1.148
55

0 commit comments

Comments
 (0)