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

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

Issue 3002843002: Introduce heap snapshot into Memory Dashboard (Closed)
Patch Set: Address CL comments Created 3 years, 4 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 /// This page is not directly reachable from the main Observatory ui. 5 /// This page is not directly reachable from the main Observatory ui.
6 /// It is mainly mented to be used from editors as an integrated tool. 6 /// It is mainly mented to be used from editors as an integrated tool.
7 /// 7 ///
8 /// This page mainly targeting developers and not VM experts, so concepts like 8 /// This page mainly targeting developers and not VM experts, so concepts like
9 /// old and new heap are abstracted away. 9 /// old and new heap are abstracted away.
10 /// 10 ///
(...skipping 15 matching lines...) Expand all
26 import 'package:observatory/src/elements/helpers/tag.dart'; 26 import 'package:observatory/src/elements/helpers/tag.dart';
27 import 'package:observatory/src/elements/nav/notify.dart'; 27 import 'package:observatory/src/elements/nav/notify.dart';
28 import 'package:observatory/src/elements/memory/graph.dart'; 28 import 'package:observatory/src/elements/memory/graph.dart';
29 import 'package:observatory/src/elements/memory/profile.dart'; 29 import 'package:observatory/src/elements/memory/profile.dart';
30 30
31 class MemoryDashboardElement extends HtmlElement implements Renderable { 31 class MemoryDashboardElement extends HtmlElement implements Renderable {
32 static const tag = const Tag<MemoryDashboardElement>('memory-dashboard', 32 static const tag = const Tag<MemoryDashboardElement>('memory-dashboard',
33 dependencies: const [ 33 dependencies: const [
34 NavNotifyElement.tag, 34 NavNotifyElement.tag,
35 MemoryGraphElement.tag, 35 MemoryGraphElement.tag,
36 MemoryProfileElement.tag 36 MemoryProfileElement.tag,
37 ]); 37 ]);
38 38
39 RenderingScheduler<MemoryDashboardElement> _r; 39 RenderingScheduler<MemoryDashboardElement> _r;
40 40
41 Stream<RenderedEvent<MemoryDashboardElement>> get onRendered => _r.onRendered; 41 Stream<RenderedEvent<MemoryDashboardElement>> get onRendered => _r.onRendered;
42 42
43 M.VMRef _vm; 43 M.VMRef _vm;
44 M.VMRepository _vms; 44 M.VMRepository _vms;
45 M.IsolateRepository _isolates; 45 M.IsolateRepository _isolates;
46 M.EditorRepository _editor; 46 M.EditorRepository _editor;
47 M.AllocationProfileRepository _allocations; 47 M.AllocationProfileRepository _allocations;
48 M.HeapSnapshotRepository _snapshots;
49 M.ObjectRepository _objects;
48 M.EventRepository _events; 50 M.EventRepository _events;
49 M.NotificationRepository _notifications; 51 M.NotificationRepository _notifications;
50 52
51 M.VMRef get vm => _vm; 53 M.VMRef get vm => _vm;
52 M.NotificationRepository get notifications => _notifications; 54 M.NotificationRepository get notifications => _notifications;
53 55
54 factory MemoryDashboardElement( 56 factory MemoryDashboardElement(
55 M.VMRef vm, 57 M.VMRef vm,
56 M.VMRepository vms, 58 M.VMRepository vms,
57 M.IsolateRepository isolates, 59 M.IsolateRepository isolates,
58 M.EditorRepository editor, 60 M.EditorRepository editor,
59 M.AllocationProfileRepository allocations, 61 M.AllocationProfileRepository allocations,
62 M.HeapSnapshotRepository snapshots,
63 M.ObjectRepository objects,
60 M.EventRepository events, 64 M.EventRepository events,
61 M.NotificationRepository notifications, 65 M.NotificationRepository notifications,
62 {RenderingQueue queue}) { 66 {RenderingQueue queue}) {
63 assert(vm != null); 67 assert(vm != null);
64 assert(vms != null); 68 assert(vms != null);
65 assert(isolates != null); 69 assert(isolates != null);
66 assert(editor != null); 70 assert(editor != null);
67 assert(allocations != null); 71 assert(allocations != null);
68 assert(events != null); 72 assert(events != null);
69 assert(notifications != null); 73 assert(notifications != null);
70 MemoryDashboardElement e = document.createElement(tag.name); 74 MemoryDashboardElement e = document.createElement(tag.name);
71 e._r = new RenderingScheduler(e, queue: queue); 75 e._r = new RenderingScheduler(e, queue: queue);
72 e._vm = vm; 76 e._vm = vm;
73 e._vms = vms; 77 e._vms = vms;
74 e._isolates = isolates; 78 e._isolates = isolates;
75 e._editor = editor; 79 e._editor = editor;
76 e._allocations = allocations; 80 e._allocations = allocations;
81 e._snapshots = snapshots;
82 e._objects = objects;
77 e._events = events; 83 e._events = events;
78 e._notifications = notifications; 84 e._notifications = notifications;
79 return e; 85 return e;
80 } 86 }
81 87
82 MemoryDashboardElement.created() : super.created(); 88 MemoryDashboardElement.created() : super.created();
83 89
84 @override 90 @override
85 attached() { 91 attached() {
86 super.attached(); 92 super.attached();
(...skipping 26 matching lines...) Expand all
113 new HRElement(), 119 new HRElement(),
114 _graph, 120 _graph,
115 new HRElement(), 121 new HRElement(),
116 ], 122 ],
117 ]; 123 ];
118 if (_isolate == null) { 124 if (_isolate == null) {
119 children.add(new DivElement() 125 children.add(new DivElement()
120 ..classes = ['content-centered-big'] 126 ..classes = ['content-centered-big']
121 ..children = [new HeadingElement.h1()..text = "No isolate selected"]); 127 ..children = [new HeadingElement.h1()..text = "No isolate selected"]);
122 } else { 128 } else {
123 final MemoryProfileElement profile = 129 children.add(new MemoryProfileElement(
124 new MemoryProfileElement(_isolate, _editor, _events, _allocations); 130 _isolate, _editor, _events, _allocations, _snapshots, _objects));
125 final ButtonElement reload = new ButtonElement();
126 final ButtonElement gc = new ButtonElement();
127 children.addAll([
128 new DivElement()
129 ..classes = ['content-centered-big']
130 ..children = [
131 new HeadingElement.h1()
132 ..children = [
133 new Text("Isolate ${_isolate.name}"),
134 reload
135 ..classes = ['link', 'big']
136 ..text = ' ↺ '
137 ..title = 'Refresh'
138 ..onClick.listen((e) async {
139 gc.disabled = true;
140 reload.disabled = true;
141 await profile.reload();
142 gc.disabled = false;
143 reload.disabled = false;
144 }),
145 gc
146 ..classes = ['link', 'big']
147 ..text = ' ♺ '
148 ..title = 'Collect Garbage'
149 ..onClick.listen((e) async {
150 gc.disabled = true;
151 reload.disabled = true;
152 await profile.reload(gc: true);
153 gc.disabled = false;
154 reload.disabled = false;
155 }),
156 ]
157 ],
158 profile
159 ]);
160 } 131 }
161 } 132 }
162 133
163 void _onIsolateSelected(IsolateSelectedEvent e) { 134 void _onIsolateSelected(IsolateSelectedEvent e) {
164 _r.checkAndReact(_isolate, e.isolate); 135 _isolate = _r.checkAndReact(_isolate, e.isolate);
165 _isolate = e.isolate;
166 } 136 }
167 } 137 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/memory/allocations.dart ('k') | runtime/observatory/lib/src/elements/memory/profile.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698