Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(760)

Side by Side Diff: runtime/observatory/lib/src/elements/heap_profile.dart

Issue 1065303003: Fix auto-refresh in Heap profile. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/observatory/lib/src/elements/heap_profile.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | runtime/observatory/lib/src/elements/heap_profile.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698