57
57
import javax .swing .JMenuItem ;
58
58
import javax .swing .JPopupMenu ;
59
59
import javax .swing .JToggleButton ;
60
+ import javax .swing .SwingUtilities ;
60
61
import org .netbeans .lib .profiler .heap .JavaClass ;
61
62
import org .netbeans .lib .profiler .ui .swing .GrayLabel ;
62
63
import org .netbeans .lib .profiler .ui .swing .renderer .HideableBarRenderer ;
63
64
import org .netbeans .lib .profiler .ui .swing .renderer .ProfilerRenderer ;
65
+ import org .netbeans .lib .profiler .ui .swing .renderer .RelativeRenderer ;
64
66
import org .netbeans .modules .profiler .api .ProfilerDialogs ;
65
67
import org .netbeans .modules .profiler .api .icons .Icons ;
66
68
import org .netbeans .modules .profiler .api .icons .LanguageIcons ;
@@ -111,6 +113,10 @@ private static enum Aggregation {
111
113
private HeapViewerNode status ;
112
114
private List <ClassNode > diffClasses ;
113
115
116
+ private int maxDiffCount = 0 ;
117
+ private long maxDiffSize = 0 ;
118
+ private long maxDiffRetained = 0 ;
119
+
114
120
private final PluggableTreeTableView objectsView ;
115
121
private ProfilerToolbar toolbar ;
116
122
private JComponent component ;
@@ -132,35 +138,45 @@ public JavaDiffObjectsView(HeapContext context1, File file2, final boolean compa
132
138
133
139
final Heap heap = context1 .getFragment ().getHeap ();
134
140
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 ;
139
144
140
-
141
145
TreeTableViewColumn [] columns = compareRetained ?
142
146
new TreeTableViewColumn [] {
143
147
new TreeTableViewColumn .Name (heap ),
144
148
// 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
148
152
} :
149
153
new TreeTableViewColumn [] {
150
154
new TreeTableViewColumn .Name (heap ),
151
155
// new TreeTableViewColumn.LogicalValue(heap),
152
- new TreeTableViewColumn . Count ( heap ) ,
153
- new TreeTableViewColumn . OwnSize ( heap , true , true )
156
+ countC ,
157
+ sizeC
154
158
};
155
159
156
160
for (TreeTableViewColumn column : columns ) {
157
161
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 );
162
163
}
163
164
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
+
164
180
objectsView = new PluggableTreeTableView ("diff_java_objects" , context1 , actions , columns ) { // NOI18N
165
181
protected HeapViewerNode [] computeData (RootNode root , Heap heap , String viewID , HeapViewerNodeFilter viewFilter , List <DataType > dataTypes , List <SortOrder > sortOrders , Progress progress ) {
166
182
synchronized (statusLock ) {
@@ -280,7 +296,7 @@ protected void fireItemStateChanged(ItemEvent e) {
280
296
}
281
297
282
298
283
- private void computeDiffClasses (Heap heap , boolean compareRetained ) {
299
+ private void computeDiffClasses (Heap heap , final boolean compareRetained ) {
284
300
try {
285
301
HeapViewer otherViewer = new HeapViewer (file2 );
286
302
@@ -292,6 +308,18 @@ private void computeDiffClasses(Heap heap, boolean compareRetained) {
292
308
Heap diffHeap = otherContext .getFragment ().getHeap ();
293
309
synchronized (statusLock ) {
294
310
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
+
295
323
status = null ;
296
324
}
297
325
objectsView .reloadView ();
0 commit comments