| 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 |