| OLD | NEW | 
|    1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file |    1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
|    2 // for details. All rights reserved. Use of this source code is governed by a |    2 // for details. All rights reserved. Use of this source code is governed by a | 
|    3 // BSD-style license that can be found in the LICENSE file. |    3 // BSD-style license that can be found in the LICENSE file. | 
|    4  |    4  | 
|    5 library heap_profile_element; |    5 library heap_profile_element; | 
|    6  |    6  | 
|    7 import 'dart:html'; |    7 import 'dart:html'; | 
|    8 import 'observatory_element.dart'; |    8 import 'observatory_element.dart'; | 
 |    9 import 'package:logging/logging.dart'; | 
|    9 import 'package:observatory/app.dart'; |   10 import 'package:observatory/app.dart'; | 
|   10 import 'package:observatory/service.dart'; |   11 import 'package:observatory/service.dart'; | 
|   11 import 'package:observatory/elements.dart'; |   12 import 'package:observatory/elements.dart'; | 
|   12 import 'package:polymer/polymer.dart'; |   13 import 'package:polymer/polymer.dart'; | 
|   13  |   14  | 
|   14 class ClassSortedTable extends SortedTable { |   15 class ClassSortedTable extends SortedTable { | 
|   15  |   16  | 
|   16   ClassSortedTable(columns) : super(columns); |   17   ClassSortedTable(columns) : super(columns); | 
|   17  |   18  | 
|   18   @override |   19   @override | 
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   95     _classTableBody = shadowRoot.querySelector('#classTableBody'); |   96     _classTableBody = shadowRoot.querySelector('#classTableBody'); | 
|   96     _subscription = app.vm.events.stream.where( |   97     _subscription = app.vm.events.stream.where( | 
|   97         (event) => event.isolate == isolate).listen(_onEvent); |   98         (event) => event.isolate == isolate).listen(_onEvent); | 
|   98   } |   99   } | 
|   99  |  100  | 
|  100   @override |  101   @override | 
|  101   void detached() { |  102   void detached() { | 
|  102     _subscription.cancel((){}); |  103     _subscription.cancel((){}); | 
|  103     super.detached(); |  104     super.detached(); | 
|  104   } |  105   } | 
|  105  |  106    | 
 |  107   // Keep at most one outstanding auto-refresh RPC. | 
 |  108   bool refreshAutoPending = false; | 
 |  109   bool refreshAutoQueued = false; | 
 |  110    | 
|  106   void _onEvent(ServiceEvent event) { |  111   void _onEvent(ServiceEvent event) { | 
|  107     if (autoRefresh && event.eventType == 'GC') { |  112     if (autoRefresh && event.eventType == 'GC') { | 
|  108       refresh((){}); |  113       if (!refreshAutoPending) { | 
 |  114         refreshAuto(); | 
 |  115       } else { | 
 |  116         // Remember to refresh once more, to ensure latest profile. | 
 |  117         refreshAutoQueued = true; | 
 |  118       } | 
|  109     } |  119     } | 
|  110   } |  120   } | 
|  111  |  121  | 
 |  122   void refreshAuto() { | 
 |  123     refreshAutoPending = true; | 
 |  124     refreshAutoQueued = false; | 
 |  125     refresh(() { | 
 |  126       refreshAutoPending = false; | 
 |  127       // Keep refreshing if at least one GC event was received while waiting. | 
 |  128       if (refreshAutoQueued) { | 
 |  129         refreshAuto(); | 
 |  130       } | 
 |  131     }); | 
 |  132   } | 
 |  133  | 
|  112   void _updatePieCharts() { |  134   void _updatePieCharts() { | 
|  113     assert(profile != null); |  135     assert(profile != null); | 
|  114     _newPieDataTable.clearRows(); |  136     _newPieDataTable.clearRows(); | 
|  115     _newPieDataTable.addRow(['Used', isolate.newSpace.used]); |  137     _newPieDataTable.addRow(['Used', isolate.newSpace.used]); | 
|  116     _newPieDataTable.addRow(['Free', |  138     _newPieDataTable.addRow(['Free', | 
|  117         isolate.newSpace.capacity - isolate.newSpace.used]); |  139         isolate.newSpace.capacity - isolate.newSpace.used]); | 
|  118     _newPieDataTable.addRow(['External', isolate.newSpace.external]); |  140     _newPieDataTable.addRow(['External', isolate.newSpace.external]); | 
|  119     _oldPieDataTable.clearRows(); |  141     _oldPieDataTable.clearRows(); | 
|  120     _oldPieDataTable.addRow(['Used', isolate.oldSpace.used]); |  142     _oldPieDataTable.addRow(['Used', isolate.oldSpace.used]); | 
|  121     _oldPieDataTable.addRow(['Free', |  143     _oldPieDataTable.addRow(['Free', | 
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  337   } |  359   } | 
|  338  |  360  | 
|  339   @observable String formattedTotalCollectionTime(bool newSpace) { |  361   @observable String formattedTotalCollectionTime(bool newSpace) { | 
|  340     if (profile == null) { |  362     if (profile == null) { | 
|  341       return ''; |  363       return ''; | 
|  342     } |  364     } | 
|  343     var heap = newSpace ? isolate.newSpace : isolate.oldSpace; |  365     var heap = newSpace ? isolate.newSpace : isolate.oldSpace; | 
|  344     return '${Utils.formatSeconds(heap.totalCollectionTimeInSeconds)} secs'; |  366     return '${Utils.formatSeconds(heap.totalCollectionTimeInSeconds)} secs'; | 
|  345   } |  367   } | 
|  346 } |  368 } | 
| OLD | NEW |