Skip to content

Commit d8e4936

Browse files
jisedlacthurka
authored andcommitted
Heap Viewer - display only visible application windows
1 parent f2199ae commit d8e4936

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

visualvm/heapviewer/src/com/sun/tools/visualvm/heapviewer/java/impl/JavaWindowsView.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import java.util.ArrayList;
5353
import java.util.Collection;
5454
import java.util.Enumeration;
55+
import java.util.Iterator;
5556
import javax.swing.AbstractButton;
5657
import javax.swing.BorderFactory;
5758
import javax.swing.Box;
@@ -71,6 +72,7 @@
7172
import org.netbeans.lib.profiler.ui.swing.GrayLabel;
7273
import org.netbeans.modules.profiler.api.icons.Icons;
7374
import org.netbeans.modules.profiler.heapwalk.details.api.DetailsSupport;
75+
import org.netbeans.modules.profiler.heapwalk.details.spi.DetailsUtils;
7476
import org.netbeans.modules.profiler.heapwalk.ui.icons.HeapWalkerIcons;
7577
import org.openide.util.Lookup;
7678
import org.openide.util.RequestProcessor;
@@ -233,8 +235,8 @@ public void run() {
233235
final Heap heap = context.getFragment().getHeap();
234236

235237
final Collection<Instance> windows = new ArrayList();
236-
windows.addAll(getFrames(heap));
237-
windows.addAll(getDialogs(heap));
238+
windows.addAll(getVisibleFrames(heap));
239+
windows.addAll(getVisibleDialogs(heap));
238240

239241
SwingUtilities.invokeLater(new Runnable() {
240242
public void run() {
@@ -510,22 +512,30 @@ public void componentRemoved(ContainerEvent e) {
510512
}
511513

512514

513-
private static Collection<Instance> getFrames(Heap heap) {
515+
private static Collection<Instance> getVisibleFrames(Heap heap) {
514516
Collection<JavaClass> framesC = HeapUtils.getSubclasses(heap, "java.awt.Frame"); // NOI18N
515517

516518
Collection<Instance> framesI = new ArrayList();
517519
for (JavaClass frameC : framesC) framesI.addAll(frameC.getInstances());
518520

519-
return framesI;
521+
return onlyVisible(framesI);
520522
}
521523

522-
private static Collection<Instance> getDialogs(Heap heap) {
524+
private static Collection<Instance> getVisibleDialogs(Heap heap) {
523525
Collection<JavaClass> dialogsC = HeapUtils.getSubclasses(heap, "java.awt.Dialog"); // NOI18N
524526

525527
Collection<Instance> dialogsI = new ArrayList();
526528
for (JavaClass dialogC : dialogsC) dialogsI.addAll(dialogC.getInstances());
527529

528-
return dialogsI;
530+
return onlyVisible(dialogsI);
531+
}
532+
533+
private static Collection<Instance> onlyVisible(Collection<Instance> instances) {
534+
Iterator<Instance> framesIt = instances.iterator();
535+
while (framesIt.hasNext())
536+
if (!DetailsUtils.getBooleanFieldValue(framesIt.next(), "visible", false)) // NOI18N
537+
framesIt.remove();
538+
return instances;
529539
}
530540

531541

@@ -536,8 +546,8 @@ public HeapViewerFeature getFeature(HeapContext context, HeapViewerActions actio
536546
if (!JavaHeapFragment.isJavaHeap(context)) return null;
537547

538548
Heap heap = context.getFragment().getHeap();
539-
int estWindowsCount = getFrames(heap).size();
540-
if (estWindowsCount <= 1) estWindowsCount += getDialogs(heap).size();
549+
int estWindowsCount = getVisibleFrames(heap).size();
550+
if (estWindowsCount <= 1) estWindowsCount += getVisibleDialogs(heap).size();
541551

542552
return estWindowsCount == 0 ? null : new JavaWindowsView(context, actions, estWindowsCount);
543553
}

0 commit comments

Comments
 (0)