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

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

Issue 2283863003: Converted Observatory object-pool-view element (Closed)
Patch Set: 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})',
rmacnak 2016/08/29 17:55:15 Missing opening brace ${_pool.entries.length}
cbernaschina 2016/08/29 18:13:57 Done.
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', 'exadecimal']
rmacnak 2016/08/29 17:55:15 hexadecimal
cbernaschina 2016/08/29 18:13:57 Done.
146 ..text = '[PP+0x${entry.offset.toRadixString(16)}]',
147 new DivElement()..classes = const ['memberName']
148 ..children = _createEntry(entry)
149 ]).toList(),
150 new HRElement(),
151 new ViewFooterElement(queue: _r.queue)
152 ]
153 ];
154 }
155
156 List<Element> _createEntry(M.ObjectPoolEntry entry) {
157 switch (entry.kind) {
158 case M.ObjectPoolEntryKind.object:
159 return [
160 anyRef(_isolate, entry.asObject, _instances, queue: _r.queue)
161 ];
162 case M.ObjectPoolEntryKind.immediate:
163 return [
164 new SpanElement()
165 ..text = 'Immediate 0x${entry.asInteger.toRadixString(16)}'
166 ];
167 case M.ObjectPoolEntryKind.nativeEntry:
168 return [
169 new SpanElement()
170 ..text = 'NativeEntry 0x${entry.asInteger.toRadixString(16)}'
171 ];
172 }
173 throw new Exception('Unkown ObjectPoolEntryKind (${entry.kind})');
22 } 174 }
23 } 175 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698