Skip to content

Commit 3bc60a0

Browse files
committed
Make sure the aggregation settings in References/GC Roots can be shared
1 parent 7b9e65e commit 3bc60a0

File tree

2 files changed

+36
-36
lines changed

2 files changed

+36
-36
lines changed

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

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,6 @@ class JavaReferencesPlugin extends HeapViewPlugin {
112112
private static final TreeTableView.ColumnConfiguration CCONF_CLASS = new TreeTableView.ColumnConfiguration(DataType.COUNT, null, DataType.COUNT, SortOrder.DESCENDING, Boolean.FALSE);
113113
private static final TreeTableView.ColumnConfiguration CCONF_INSTANCE = new TreeTableView.ColumnConfiguration(null, DataType.COUNT, DataType.NAME, SortOrder.UNSORTED, null);
114114

115-
private static final String KEY_MERGED_REFERENCES = "autoMergedReferences"; // NOI18N
116-
private static final String KEY_LOGICAL_REFERENCES = "logicalkReferences"; // NOI18N
117-
118-
private volatile boolean mergedReferences = readItem(KEY_MERGED_REFERENCES, false);
119-
private volatile boolean logicalReferences = readItem(KEY_LOGICAL_REFERENCES, true);
120-
121115
private final Heap heap;
122116
private HeapViewerNode selected;
123117

@@ -187,31 +181,29 @@ public void run() {
187181
protected void populatePopup(HeapViewerNode node, JPopupMenu popup) {
188182
if (popup.getComponentCount() > 0) popup.addSeparator();
189183

190-
popup.add(new JCheckBoxMenuItem(Bundle.JavaReferencesPlugin_AutoComputeMergedReferencesLbl(), mergedReferences) {
184+
popup.add(new JCheckBoxMenuItem(Bundle.JavaReferencesPlugin_AutoComputeMergedReferencesLbl(), isAutoMerge()) {
191185
@Override
192186
protected void fireActionPerformed(ActionEvent event) {
193187
SwingUtilities.invokeLater(new Runnable() {
194188
@Override
195189
public void run() {
196-
mergedReferences = isSelected();
197-
storeItem(KEY_MERGED_REFERENCES, mergedReferences);
190+
setAutoMerge(isSelected());
198191
if (CCONF_CLASS.equals(objectsView.getCurrentColumnConfiguration())) { // only update view for class selection
199-
if (!mergedReferences) showMergedView();
192+
if (!isAutoMerge()) showMergedView();
200193
reloadView(); // reload even if !mergedReferences to release the currently computed references
201194
}
202195
}
203196
});
204197
}
205198
});
206199

207-
if (!CCONF_INSTANCE.equals(objectsView.getCurrentColumnConfiguration())) popup.add(new JCheckBoxMenuItem(Bundle.JavaReferencesPlugin_MenuShowLogicalReferences(), logicalReferences) {
200+
if (!CCONF_INSTANCE.equals(objectsView.getCurrentColumnConfiguration())) popup.add(new JCheckBoxMenuItem(Bundle.JavaReferencesPlugin_MenuShowLogicalReferences(), isLogicalReferences()) {
208201
@Override
209202
protected void fireActionPerformed(ActionEvent event) {
210203
SwingUtilities.invokeLater(new Runnable() {
211204
@Override
212205
public void run() {
213-
logicalReferences = isSelected();
214-
storeItem(KEY_LOGICAL_REFERENCES, logicalReferences);
206+
setLogicalReferences(isSelected());
215207
if (CCONF_CLASS.equals(objectsView.getCurrentColumnConfiguration())) { // only update view for class selection
216208
reloadView();
217209
}
@@ -264,9 +256,8 @@ protected void fireActionPerformed(ActionEvent e) {
264256

265257
LinkButton lb = new LinkButton(Bundle.JavaReferencesPlugin_AutoComputeMergedReferencesLbl()) {
266258
protected void fireActionPerformed(ActionEvent e) {
259+
setAutoMerge(true);
267260
showObjectsView();
268-
mergedReferences = true;
269-
storeItem(KEY_MERGED_REFERENCES, mergedReferences);
270261
objectsView.reloadView();
271262
}
272263
};
@@ -394,19 +385,30 @@ protected void nodeSelected(HeapViewerNode node, boolean adjusting) {
394385
selected = node;
395386
}
396387

397-
if (selected != null && !mergedReferences && HeapViewerNode.getValue(selected, DataType.INSTANCES_WRAPPER, heap) != null) showMergedView();
388+
if (selected != null && !isAutoMerge() && HeapViewerNode.getValue(selected, DataType.INSTANCES_WRAPPER, heap) != null) showMergedView();
398389
else showObjectsView();
399390

400391
objectsView.reloadView();
401392
}
402393

403394

404-
private static boolean readItem(String itemName, boolean initial) {
405-
return NbPreferences.forModule(JavaFieldsPlugin.class).getBoolean("JavaReferencesPlugin." + itemName, initial); // NOI18N
395+
private static final String KEY_MERGED_REFERENCES = "HeapViewer.autoMergedReferences"; // NOI18N
396+
private static final String KEY_LOGICAL_REFERENCES = "HeapViewer.logicalReferences"; // NOI18N
397+
398+
private boolean isAutoMerge() {
399+
return NbPreferences.root().getBoolean(KEY_MERGED_REFERENCES, false);
400+
}
401+
402+
private void setAutoMerge(boolean value) {
403+
NbPreferences.root().putBoolean(KEY_MERGED_REFERENCES, value);
404+
}
405+
406+
private boolean isLogicalReferences() {
407+
return NbPreferences.root().getBoolean(KEY_LOGICAL_REFERENCES, false);
406408
}
407409

408-
private static void storeItem(String itemName, boolean value) {
409-
NbPreferences.forModule(JavaFieldsPlugin.class).putBoolean("JavaReferencesPlugin." + itemName, value); // NOI18N
410+
private void setLogicalReferences(boolean value) {
411+
NbPreferences.root().putBoolean(KEY_LOGICAL_REFERENCES, value);
410412
}
411413

412414

@@ -576,7 +578,7 @@ public boolean isLeaf() {
576578

577579
private Instance logicalReferer(Instance realReferer) {
578580
if (realReferer == null) return null;
579-
return logicalReferences ? logicalRefererImpl(realReferer) : realReferer;
581+
return isLogicalReferences() ? logicalRefererImpl(realReferer) : realReferer;
580582
}
581583

582584
private Instance logicalRefererImpl(Instance realReferer) {

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

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,6 @@ public class PathToGCRootPlugin extends HeapViewPlugin {
105105
private static final TreeTableView.ColumnConfiguration CCONF_CLASS = new TreeTableView.ColumnConfiguration(DataType.COUNT, null, DataType.COUNT, SortOrder.DESCENDING, Boolean.FALSE);
106106
private static final TreeTableView.ColumnConfiguration CCONF_INSTANCE = new TreeTableView.ColumnConfiguration(null, DataType.COUNT, DataType.NAME, SortOrder.UNSORTED, null);
107107

108-
private static final String KEY_MERGED_GCROOTS = "autoMergedRoots"; // NOI18N
109-
110-
private volatile boolean mergedRoots = readItem(KEY_MERGED_GCROOTS, false);
111-
112108
private final Heap heap;
113109
private HeapViewerNode selected;
114110

@@ -214,16 +210,15 @@ protected String getNodesContainerString(String firstNodeIdx, String lastNodeIdx
214210
protected void populatePopup(HeapViewerNode node, JPopupMenu popup) {
215211
if (popup.getComponentCount() > 0) popup.addSeparator();
216212

217-
popup.add(new JCheckBoxMenuItem(Bundle.PathToGCRootPlugin_AutoComputeMergedRootsLbl(), mergedRoots) {
213+
popup.add(new JCheckBoxMenuItem(Bundle.PathToGCRootPlugin_AutoComputeMergedRootsLbl(), isAutoMerge()) {
218214
@Override
219215
protected void fireActionPerformed(ActionEvent event) {
220216
SwingUtilities.invokeLater(new Runnable() {
221217
@Override
222218
public void run() {
223-
mergedRoots = isSelected();
224-
storeItem(KEY_MERGED_GCROOTS, mergedRoots);
219+
setAutoMerge(isSelected());
225220
if (CCONF_CLASS.equals(objectsView.getCurrentColumnConfiguration())) { // only update view for class selection
226-
if (!mergedRoots) showMergedView();
221+
if (!isAutoMerge()) showMergedView();
227222
reloadView(); // reload even if !mergedReferences to release the currently computed references
228223
}
229224
}
@@ -287,9 +282,8 @@ protected void fireActionPerformed(ActionEvent e) {
287282

288283
LinkButton lb = new LinkButton(Bundle.PathToGCRootPlugin_AutoComputeMergedRootsLbl()) {
289284
protected void fireActionPerformed(ActionEvent e) {
285+
setAutoMerge(true);
290286
showObjectsView();
291-
mergedRoots = true;
292-
storeItem(KEY_MERGED_GCROOTS, mergedRoots);
293287
objectsView.reloadView();
294288
}
295289
};
@@ -338,7 +332,7 @@ protected void nodeSelected(final HeapViewerNode node, boolean adjusting) {
338332
selected = node;
339333
}
340334

341-
if (selected != null && !mergedRoots && HeapViewerNode.getValue(selected, DataType.INSTANCES_WRAPPER, heap) != null) showMergedView();
335+
if (selected != null && !isAutoMerge() && HeapViewerNode.getValue(selected, DataType.INSTANCES_WRAPPER, heap) != null) showMergedView();
342336
else showObjectsView();
343337

344338
objectsView.reloadView();
@@ -438,14 +432,18 @@ private static Instance getGCRoot(Instance instance, Thread current) {
438432
return instance;
439433
}
440434

441-
private static boolean readItem(String itemName, boolean initial) {
442-
return NbPreferences.forModule(PathToGCRootPlugin.class).getBoolean("PathToGCRootPlugin." + itemName, initial); // NOI18N
435+
436+
private static final String KEY_MERGED_GCROOTS = "HeapViewer.autoMergedGcRoots"; // NOI18N
437+
438+
private boolean isAutoMerge() {
439+
return NbPreferences.root().getBoolean(KEY_MERGED_GCROOTS, false);
443440
}
444441

445-
private static void storeItem(String itemName, boolean value) {
446-
NbPreferences.forModule(PathToGCRootPlugin.class).putBoolean("PathToGCRootPlugin." + itemName, value); // NOI18N
442+
private void setAutoMerge(boolean value) {
443+
NbPreferences.root().putBoolean(KEY_MERGED_GCROOTS, value);
447444
}
448445

446+
449447
@NbBundle.Messages({
450448
"GCRootNode_MoreNodes=<another {0} instances left>",
451449
"GCRootNode_SamplesContainer=<sample {0} instances>",

0 commit comments

Comments
 (0)