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

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

Issue 2310003004: Removed polymer & mirror from Observatory (Closed)
Patch Set: Fixed crash in heap-map page Created 4 years, 3 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 cpu_profile_table_element; 5 library cpu_profile_table_element;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:html'; 8 import 'dart:html';
9 import 'package:observatory/models.dart' as M; 9 import 'package:observatory/models.dart' as M;
10 import 'package:observatory/src/elements/containers/virtual_collection.dart'; 10 import 'package:observatory/src/elements/containers/virtual_collection.dart';
11 import 'package:observatory/src/elements/cpu_profile/virtual_tree.dart'; 11 import 'package:observatory/src/elements/cpu_profile/virtual_tree.dart';
12 import 'package:observatory/src/elements/function_ref.dart'; 12 import 'package:observatory/src/elements/function_ref.dart';
13 import 'package:observatory/src/elements/helpers/nav_bar.dart';
14 import 'package:observatory/src/elements/helpers/nav_menu.dart';
13 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; 15 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
14 import 'package:observatory/src/elements/helpers/tag.dart'; 16 import 'package:observatory/src/elements/helpers/tag.dart';
15 import 'package:observatory/src/elements/helpers/uris.dart'; 17 import 'package:observatory/src/elements/helpers/uris.dart';
16 import 'package:observatory/src/elements/nav/bar.dart';
17 import 'package:observatory/src/elements/nav/isolate_menu.dart'; 18 import 'package:observatory/src/elements/nav/isolate_menu.dart';
18 import 'package:observatory/src/elements/nav/menu.dart';
19 import 'package:observatory/src/elements/nav/notify.dart'; 19 import 'package:observatory/src/elements/nav/notify.dart';
20 import 'package:observatory/src/elements/nav/refresh.dart'; 20 import 'package:observatory/src/elements/nav/refresh.dart';
21 import 'package:observatory/src/elements/nav/top_menu.dart'; 21 import 'package:observatory/src/elements/nav/top_menu.dart';
22 import 'package:observatory/src/elements/nav/vm_menu.dart'; 22 import 'package:observatory/src/elements/nav/vm_menu.dart';
23 import 'package:observatory/src/elements/sample_buffer_control.dart'; 23 import 'package:observatory/src/elements/sample_buffer_control.dart';
24 import 'package:observatory/src/elements/stack_trace_tree_config.dart'; 24 import 'package:observatory/src/elements/stack_trace_tree_config.dart';
25 import 'package:observatory/utils.dart'; 25 import 'package:observatory/utils.dart';
26 26
27 enum _Table { 27 enum _Table {
28 functions, 28 functions,
(...skipping 11 matching lines...) Expand all
40 40
41 enum _SortingDirection { 41 enum _SortingDirection {
42 ascending, 42 ascending,
43 descending 43 descending
44 } 44 }
45 45
46 class CpuProfileTableElement extends HtmlElement implements Renderable { 46 class CpuProfileTableElement extends HtmlElement implements Renderable {
47 static const tag = const Tag<CpuProfileTableElement>('cpu-profile-table', 47 static const tag = const Tag<CpuProfileTableElement>('cpu-profile-table',
48 dependencies: const [ 48 dependencies: const [
49 FunctionRefElement.tag, 49 FunctionRefElement.tag,
50 NavBarElement.tag,
51 NavTopMenuElement.tag, 50 NavTopMenuElement.tag,
52 NavVMMenuElement.tag, 51 NavVMMenuElement.tag,
53 NavIsolateMenuElement.tag, 52 NavIsolateMenuElement.tag,
54 NavMenuElement.tag,
55 NavRefreshElement.tag, 53 NavRefreshElement.tag,
56 NavNotifyElement.tag, 54 NavNotifyElement.tag,
57 SampleBufferControlElement.tag, 55 SampleBufferControlElement.tag,
58 StackTraceTreeConfigElement.tag, 56 StackTraceTreeConfigElement.tag,
59 CpuProfileVirtualTreeElement.tag, 57 CpuProfileVirtualTreeElement.tag,
60 VirtualCollectionElement.tag 58 VirtualCollectionElement.tag
61 ]); 59 ]);
62 60
63 RenderingScheduler<CpuProfileTableElement> _r; 61 RenderingScheduler<CpuProfileTableElement> _r;
64 62
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 118
121 @override 119 @override
122 detached() { 120 detached() {
123 super.detached(); 121 super.detached();
124 _r.disable(notify: true); 122 _r.disable(notify: true);
125 children = []; 123 children = [];
126 } 124 }
127 125
128 void render() { 126 void render() {
129 var content = [ 127 var content = [
130 new NavBarElement(queue: _r.queue) 128 navBar([
131 ..children = [ 129 new NavTopMenuElement(queue: _r.queue),
132 new NavTopMenuElement(queue: _r.queue), 130 new NavVMMenuElement(_vm, _events, queue: _r.queue),
133 new NavVMMenuElement(_vm, _events, queue: _r.queue), 131 new NavIsolateMenuElement(_isolate, _events, queue: _r.queue),
134 new NavIsolateMenuElement(_isolate, _events, queue: _r.queue), 132 navMenu('cpu profile (table)'),
135 new NavMenuElement('cpu profile (table)', 133 new NavRefreshElement(queue: _r.queue)
136 link: Uris.cpuProfilerTable(_isolate), last: true, queue: _r.queue ), 134 ..onRefresh.listen(_refresh),
137 new NavRefreshElement(queue: _r.queue) 135 new NavRefreshElement(label: 'Clear', queue: _r.queue)
138 ..onRefresh.listen(_refresh), 136 ..onRefresh.listen(_clearCpuProfile),
139 new NavRefreshElement(label: 'Clear', queue: _r.queue) 137 new NavNotifyElement(_notifications, queue: _r.queue)
140 ..onRefresh.listen(_clearCpuProfile), 138 ]),
141 new NavNotifyElement(_notifications, queue: _r.queue)
142 ],
143 ]; 139 ];
144 if (_progress == null) { 140 if (_progress == null) {
145 children = content; 141 children = content;
146 return; 142 return;
147 } 143 }
148 content.add(new SampleBufferControlElement(_progress, _progressStream, 144 content.add(new SampleBufferControlElement(_progress, _progressStream,
149 showTag: false, queue: _r.queue)); 145 showTag: false, queue: _r.queue));
150 if (_progress.status == M.SampleProfileLoadingStatus.loaded) { 146 if (_progress.status == M.SampleProfileLoadingStatus.loaded) {
151 content.add(new BRElement()); 147 content.add(new BRElement());
152 content.addAll(_createTables()); 148 content.addAll(_createTables());
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 _Table.functions, 249 _Table.functions,
254 _SortingField.exclusive, 250 _SortingField.exclusive,
255 _SortingDirection.descending), 251 _SortingDirection.descending),
256 _createHeaderButton(const ['inclusive'], 'Stack(%)', 252 _createHeaderButton(const ['inclusive'], 'Stack(%)',
257 _Table.functions, 253 _Table.functions,
258 _SortingField.inclusive, 254 _SortingField.inclusive,
259 _SortingDirection.descending), 255 _SortingDirection.descending),
260 _createHeaderButton(const ['name'], 'Method', 256 _createHeaderButton(const ['name'], 'Method',
261 _Table.functions, 257 _Table.functions,
262 _SortingField.method, 258 _SortingField.method,
263 _SortingDirection.descending), 259 _SortingDirection.ascending),
264 ]; 260 ];
265 261
266 void _setSorting(_Table table, 262 void _setSorting(_Table table,
267 _SortingField field, 263 _SortingField field,
268 _SortingDirection defaultDirection) { 264 _SortingDirection defaultDirection) {
269 if (_sortingField[table] == field) { 265 if (_sortingField[table] == field) {
270 switch (_sortingDirection[table]) { 266 switch (_sortingDirection[table]) {
271 case _SortingDirection.descending: 267 case _SortingDirection.descending:
272 _sortingDirection[table] = _SortingDirection.ascending; 268 _sortingDirection[table] = _SortingDirection.ascending;
273 break; 269 break;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 new DivElement() 306 new DivElement()
311 ..classes = ['function-item'] 307 ..classes = ['function-item']
312 ..children = [ 308 ..children = [
313 _createHeaderButton(const ['inclusive'], 'Callees(%)', 309 _createHeaderButton(const ['inclusive'], 'Callees(%)',
314 _Table.callee, 310 _Table.callee,
315 _SortingField.callee, 311 _SortingField.callee,
316 _SortingDirection.descending), 312 _SortingDirection.descending),
317 _createHeaderButton(const ['name'], 'Method', 313 _createHeaderButton(const ['name'], 'Method',
318 _Table.callee, 314 _Table.callee,
319 _SortingField.method, 315 _SortingField.method,
320 _SortingDirection.descending), 316 _SortingDirection.ascending),
321 ]; 317 ];
322 318
323 Element _createCaller() { 319 Element _createCaller() {
324 final element = new DivElement() 320 final element = new DivElement()
325 ..classes = ['function-item'] 321 ..classes = ['function-item']
326 ..children = [ 322 ..children = [
327 new SpanElement()..classes = ['inclusive'] 323 new SpanElement()..classes = ['inclusive']
328 ..text = '0%', 324 ..text = '0%',
329 new SpanElement()..classes = ['name'] 325 new SpanElement()..classes = ['name']
330 ]; 326 ];
(...skipping 17 matching lines...) Expand all
348 new DivElement() 344 new DivElement()
349 ..classes = ['function-item'] 345 ..classes = ['function-item']
350 ..children = [ 346 ..children = [
351 _createHeaderButton(const ['inclusive'], 'Callers(%)', 347 _createHeaderButton(const ['inclusive'], 'Callers(%)',
352 _Table.caller, 348 _Table.caller,
353 _SortingField.caller, 349 _SortingField.caller,
354 _SortingDirection.descending), 350 _SortingDirection.descending),
355 _createHeaderButton(const ['name'], 'Method', 351 _createHeaderButton(const ['name'], 'Method',
356 _Table.caller, 352 _Table.caller,
357 _SortingField.method, 353 _SortingField.method,
358 _SortingDirection.descending), 354 _SortingDirection.ascending),
359 ]; 355 ];
360 356
361 ButtonElement _createHeaderButton(List<String> classes, 357 ButtonElement _createHeaderButton(List<String> classes,
362 String text, 358 String text,
363 _Table table, 359 _Table table,
364 _SortingField field, 360 _SortingField field,
365 _SortingDirection direction) => 361 _SortingDirection direction) =>
366 new ButtonElement()..classes = classes 362 new ButtonElement()..classes = classes
367 ..text = _sortingField[table] != field ? text : 363 ..text = _sortingField[table] != field ? text :
368 _sortingDirection[table] == _SortingDirection.ascending 364 _sortingDirection[table] == _SortingDirection.ascending
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 447
452 static double _getExclusiveT(M.ProfileFunction f) => 448 static double _getExclusiveT(M.ProfileFunction f) =>
453 f.normalizedExclusiveTicks; 449 f.normalizedExclusiveTicks;
454 static double _getInclusiveT(M.ProfileFunction f) => 450 static double _getInclusiveT(M.ProfileFunction f) =>
455 f.normalizedInclusiveTicks; 451 f.normalizedInclusiveTicks;
456 double _getCalleeT(M.ProfileFunction f) => 452 double _getCalleeT(M.ProfileFunction f) =>
457 _selected.callees[f] / _selected.callees.values.reduce((a, b) => a + b); 453 _selected.callees[f] / _selected.callees.values.reduce((a, b) => a + b);
458 double _getCallerT(M.ProfileFunction f) => 454 double _getCallerT(M.ProfileFunction f) =>
459 _selected.callers[f] / _selected.callers.values.reduce((a, b) => a + b); 455 _selected.callers[f] / _selected.callers.values.reduce((a, b) => a + b);
460 } 456 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/cpu_profile.dart ('k') | runtime/observatory/lib/src/elements/css/shared.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698