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

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

Issue 2283863003: Converted Observatory object-pool-view element (Closed)
Patch Set: Addressed comments 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 objectpool_view; 5 library objectpool_view;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'observatory_element.dart'; 8 import 'dart:html';
9 import 'package:observatory/service.dart'; 9 import 'package:observatory/models.dart' as M;
10 import 'package:polymer/polymer.dart'; 10 import 'package:observatory/src/elements/context_ref.dart';
11 import 'package:observatory/src/elements/curly_block.dart';
12 import 'package:observatory/src/elements/helpers/any_ref.dart';
13 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
14 import 'package:observatory/src/elements/helpers/tag.dart';
15 import 'package:observatory/src/elements/nav/bar.dart';
16 import 'package:observatory/src/elements/nav/isolate_menu.dart';
17 import 'package:observatory/src/elements/nav/menu.dart';
18 import 'package:observatory/src/elements/nav/notify.dart';
19 import 'package:observatory/src/elements/nav/refresh.dart';
20 import 'package:observatory/src/elements/nav/top_menu.dart';
21 import 'package:observatory/src/elements/nav/vm_menu.dart';
22 import 'package:observatory/src/elements/object_common.dart';
23 import 'package:observatory/src/elements/view_footer.dart';
11 24
12 @CustomTag('objectpool-view') 25 class ObjectPoolViewElement extends HtmlElement implements Renderable {
13 class ObjectPoolViewElement extends ObservatoryElement { 26 static const tag = const Tag<ObjectPoolViewElement>('object-pool-view',
14 @published ObjectPool pool; 27 dependencies: const [
28 ContextRefElement.tag,
29 CurlyBlockElement.tag,
30 NavBarElement.tag,
31 NavTopMenuElement.tag,
32 NavVMMenuElement.tag,
33 NavIsolateMenuElement.tag,
34 NavMenuElement.tag,
35 NavRefreshElement.tag,
36 NavNotifyElement.tag,
37 ObjectCommonElement.tag,
38 ViewFooterElement.tag
39 ]);
40
41 RenderingScheduler<ObjectPoolViewElement> _r;
42
43 Stream<RenderedEvent<ObjectPoolViewElement>> get onRendered => _r.onRendered;
44
45 M.VM _vm;
46 M.IsolateRef _isolate;
47 M.EventRepository _events;
48 M.NotificationRepository _notifications;
49 M.ObjectPool _pool;
50 M.ObjectPoolRepository _pools;
51 M.RetainedSizeRepository _retainedSizes;
52 M.ReachableSizeRepository _reachableSizes;
53 M.InboundReferencesRepository _references;
54 M.RetainingPathRepository _retainingPaths;
55 M.InstanceRepository _instances;
56
57
58 M.VMRef get vm => _vm;
59 M.IsolateRef get isolate => _isolate;
60 M.NotificationRepository get notifications => _notifications;
61 M.ObjectPoolRef get pool => _pool;
62
63 factory ObjectPoolViewElement(M.VM vm, M.IsolateRef isolate,
64 M.ObjectPool pool,
65 M.EventRepository events,
66 M.NotificationRepository notifications,
67 M.ObjectPoolRepository pools,
68 M.RetainedSizeRepository retainedSizes,
69 M.ReachableSizeRepository reachableSizes,
70 M.InboundReferencesRepository references,
71 M.RetainingPathRepository retainingPaths,
72 M.InstanceRepository instances,
73 {RenderingQueue queue}) {
74 assert(vm != null);
75 assert(isolate != null);
76 assert(events != null);
77 assert(notifications != null);
78 assert(pool != null);
79 assert(pools != null);
80 assert(retainedSizes != null);
81 assert(reachableSizes != null);
82 assert(references != null);
83 assert(retainingPaths != null);
84 assert(instances != null);
85 ObjectPoolViewElement e = document.createElement(tag.name);
86 e._r = new RenderingScheduler(e, queue: queue);
87 e._vm = vm;
88 e._isolate = isolate;
89 e._events = events;
90 e._notifications = notifications;
91 e._pool = pool;
92 e._pools = pools;
93 e._retainedSizes = retainedSizes;
94 e._reachableSizes = reachableSizes;
95 e._references = references;
96 e._retainingPaths = retainingPaths;
97 e._instances = instances;
98 return e;
99 }
15 100
16 ObjectPoolViewElement.created() : super.created(); 101 ObjectPoolViewElement.created() : super.created();
17 102
18 bool isServiceObject(o) => o is ServiceObject; 103 @override
104 attached() {
105 super.attached();
106 _r.enable();
107 }
19 108
20 Future refresh() { 109 @override
21 return pool.reload(); 110 detached() {
111 super.detached();
112 _r.disable(notify: true);
113 children = [];
114 }
115
116 void render() {
117 children = [
118 new NavBarElement(queue: _r.queue)
119 ..children = [
120 new NavTopMenuElement(queue: _r.queue),
121 new NavVMMenuElement(_vm, _events, queue: _r.queue),
122 new NavIsolateMenuElement(_isolate, _events, queue: _r.queue),
123 new NavMenuElement('instance', last: true, queue: _r.queue),
124 new NavRefreshElement(queue: _r.queue)
125 ..onRefresh.listen((e) async {
126 e.element.disabled = true;
127 _pool = await _pools.get(_isolate, _pool.id);
128 _r.dirty();
129 }),
130 new NavNotifyElement(_notifications, queue: _r.queue)
131 ],
132 new DivElement()..classes = const ['content-centered-big']
133 ..children = [
134 new HeadingElement.h2()..text = 'Object Pool',
135 new HRElement(),
136 new ObjectCommonElement(_isolate, _pool, _retainedSizes,
137 _reachableSizes, _references, _retainingPaths,
138 _instances, queue: _r.queue),
139 new HRElement(),
140 new HeadingElement.h3()..text = 'entries (${_pool.entries.length})',
141 new DivElement()..classes = const ['memberList']
142 ..children = _pool.entries.map((entry)
143 => new DivElement()..classes = const ['memberItem']
144 ..children = [
145 new DivElement()..classes = const ['memberName',
146 'hexadecimal']
147 ..text = '[PP+0x${entry.offset.toRadixString(16)}]',
148 new DivElement()..classes = const ['memberName']
149 ..children = _createEntry(entry)
150 ]).toList(),
151 new HRElement(),
152 new ViewFooterElement(queue: _r.queue)
153 ]
154 ];
155 }
156
157 List<Element> _createEntry(M.ObjectPoolEntry entry) {
158 switch (entry.kind) {
159 case M.ObjectPoolEntryKind.object:
160 return [
161 anyRef(_isolate, entry.asObject, _instances, queue: _r.queue)
162 ];
163 case M.ObjectPoolEntryKind.immediate:
164 return [
165 new SpanElement()
166 ..text = 'Immediate 0x${entry.asInteger.toRadixString(16)}'
167 ];
168 case M.ObjectPoolEntryKind.nativeEntry:
169 return [
170 new SpanElement()
171 ..text = 'NativeEntry 0x${entry.asInteger.toRadixString(16)}'
172 ];
173 }
174 throw new Exception('Unkown ObjectPoolEntryKind (${entry.kind})');
22 } 175 }
23 } 176 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/object_common.dart ('k') | runtime/observatory/lib/src/elements/objectpool_view.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698