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

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

Issue 2287793002: Converted Observatory field-view element (Closed)
Patch Set: Fixed tests 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 field_view_element; 5 library field_view_element;
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/class_ref.dart';
11 11 import 'package:observatory/src/elements/curly_block.dart';
12 @CustomTag('field-view') 12 import 'package:observatory/src/elements/helpers/any_ref.dart';
13 class FieldViewElement extends ObservatoryElement { 13 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
14 @published Field field; 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/class_menu.dart';
17 import 'package:observatory/src/elements/nav/isolate_menu.dart';
18 import 'package:observatory/src/elements/nav/library_menu.dart';
19 import 'package:observatory/src/elements/nav/menu.dart';
20 import 'package:observatory/src/elements/nav/notify.dart';
21 import 'package:observatory/src/elements/nav/refresh.dart';
22 import 'package:observatory/src/elements/nav/top_menu.dart';
23 import 'package:observatory/src/elements/nav/vm_menu.dart';
24 import 'package:observatory/src/elements/object_common.dart';
25 import 'package:observatory/src/elements/script_inset.dart';
26 import 'package:observatory/src/elements/source_link.dart';
27 import 'package:observatory/src/elements/view_footer.dart';
28
29 class FieldViewElement extends HtmlElement implements Renderable {
30 static const tag = const Tag<FieldViewElement>('field-view',
31 dependencies: const [
32 ClassRefElement.tag,
33 CurlyBlockElement.tag,
34 NavBarElement.tag,
35 NavClassMenuElement.tag,
36 NavLibraryMenuElement.tag,
37 NavTopMenuElement.tag,
38 NavVMMenuElement.tag,
39 NavIsolateMenuElement.tag,
40 NavMenuElement.tag,
41 NavRefreshElement.tag,
42 NavNotifyElement.tag,
43 ObjectCommonElement.tag,
44 SourceLinkElement.tag,
45 ViewFooterElement.tag
46 ]);
47
48 RenderingScheduler<FieldViewElement> _r;
49
50 Stream<RenderedEvent<FieldViewElement>> get onRendered => _r.onRendered;
51
52 M.VM _vm;
53 M.IsolateRef _isolate;
54 M.EventRepository _events;
55 M.NotificationRepository _notifications;
56 M.Field _field;
57 M.LibraryRef _library;
58 M.FieldRepository _fields;
59 M.ClassRepository _classes;
60 M.RetainedSizeRepository _retainedSizes;
61 M.ReachableSizeRepository _reachableSizes;
62 M.InboundReferencesRepository _references;
63 M.RetainingPathRepository _retainingPaths;
64 M.ScriptRepository _scripts;
65 M.InstanceRepository _instances;
66
67
68 M.VMRef get vm => _vm;
69 M.IsolateRef get isolate => _isolate;
70 M.NotificationRepository get notifications => _notifications;
71 M.Field get field => _field;
72
73 factory FieldViewElement(M.VM vm, M.IsolateRef isolate, M.Field field,
74 M.EventRepository events,
75 M.NotificationRepository notifications,
76 M.FieldRepository fields,
77 M.ClassRepository classes,
78 M.RetainedSizeRepository retainedSizes,
79 M.ReachableSizeRepository reachableSizes,
80 M.InboundReferencesRepository references,
81 M.RetainingPathRepository retainingPaths,
82 M.ScriptRepository scripts,
83 M.InstanceRepository instances,
84 {RenderingQueue queue}) {
85 assert(vm != null);
86 assert(isolate != null);
87 assert(events != null);
88 assert(notifications != null);
89 assert(field != null);
90 assert(fields != null);
91 assert(classes != null);
92 assert(retainedSizes != null);
93 assert(reachableSizes != null);
94 assert(references != null);
95 assert(retainingPaths != null);
96 assert(scripts != null);
97 assert(instances != null);
98 FieldViewElement e = document.createElement(tag.name);
99 e._r = new RenderingScheduler(e, queue: queue);
100 e._vm = vm;
101 e._isolate = isolate;
102 e._events = events;
103 e._notifications = notifications;
104 e._field = field;
105 e._fields = fields;
106 e._classes = classes;
107 e._retainedSizes = retainedSizes;
108 e._reachableSizes = reachableSizes;
109 e._references = references;
110 e._retainingPaths = retainingPaths;
111 e._scripts = scripts;
112 e._instances = instances;
113 if (field.dartOwner is M.LibraryRef) {
114 e._library = field.dartOwner;
115 }
116 return e;
117 }
118
15 FieldViewElement.created() : super.created(); 119 FieldViewElement.created() : super.created();
16 120
17 Future refresh() { 121 @override
18 return field.reload(); 122 attached() {
123 super.attached();
124 _r.enable();
125 _refresh();
126 }
127
128 @override
129 detached() {
130 super.detached();
131 _r.disable(notify: true);
132 children = [];
133 }
134
135 void render() {
136 var header = '';
137 if (_field.isStatic) {
138 if (_field.dartOwner is M.ClassRef) {
139 header += 'static ';
140 } else {
141 header += 'top-level ';
142 }
143 }
144 if (_field.isFinal) {
145 header += 'final ';
146 } else if (_field.isConst) {
147 header += 'const ';
148 }
149 if (_field.declaredType.name == 'dynamic'){
150 header += 'var';
151 } else {
152 header += _field.declaredType.name;
153 }
154 children = [
155 new NavBarElement(queue: _r.queue)
156 ..children = _createMenu(),
157 new DivElement()..classes = const ['content-centered-big']
158 ..children = [
159 new HeadingElement.h2()..text = '$header ${field.name}',
160 new HRElement(),
161 new ObjectCommonElement(_isolate, _field, _retainedSizes,
162 _reachableSizes, _references, _retainingPaths,
163 _instances, queue: _r.queue),
164 new BRElement(),
165 new DivElement()..classes = ['memberList']
166 ..children = _createMembers(),
167 new HRElement(),
168 new DivElement()
169 ..children = _field.location == null ? const []
170 : [
171 new ScriptInsetElement(_isolate, _field.location.script,
172 _scripts, _instances, _events,
173 startPos: field.location.tokenPos,
174 endPos: field.location.tokenPos,
175 queue: _r.queue)
176 ],
177 new ViewFooterElement(queue: _r.queue)
178 ]
179 ];
180 }
181
182 List<Element> _createMenu() {
183 final menu = [
184 new NavTopMenuElement(queue: _r.queue),
185 new NavVMMenuElement(_vm, _events, queue: _r.queue),
186 new NavIsolateMenuElement(_isolate, _events, queue: _r.queue)
187 ];
188 if (_library != null) {
189 menu.add(new NavLibraryMenuElement(_isolate, _field.dartOwner,
190 queue: _r.queue));
191 } else if (_field.dartOwner is M.ClassRef) {
192 menu.add(
193 new NavClassMenuElement(_isolate, _field.dartOwner, queue: _r.queue),
194 );
195 }
196 menu.addAll([
197 new NavMenuElement(_field.name, last: true, queue: _r.queue),
198 new NavRefreshElement(queue: _r.queue)
199 ..onRefresh.listen((e) {
200 e.element.disabled = true;
201 _refresh();
202 }),
203 new NavNotifyElement(_notifications, queue: _r.queue)
204 ]);
205 return menu;
206 }
207
208 List<Element> _createMembers() {
209 final members = <Element>[
210 new DivElement()..classes = ['memberItem']
211 ..children = [
212 new DivElement()..classes = ['memberName']
213 ..text = 'owner',
214 new DivElement()..classes = ['memberName']
215 ..children = [
216 _field.dartOwner == null
217 ? (new SpanElement()..text = '...')
218 : anyRef(_isolate, _field.dartOwner, _instances,
219 queue: _r.queue)
220 ]
221 ],
222 new DivElement()..classes = ['memberItem']
223 ..children = [
224 new DivElement()..classes = ['memberName']
225 ..text = 'script',
226 new DivElement()..classes = ['memberName']
227 ..children = [
228 new SourceLinkElement(_isolate, field.location, _scripts,
229 queue: _r.queue)
230 ]
231 ]
232 ];
233 if (!_field.isStatic) {
234 members.add(
235 new DivElement()..classes = ['memberItem']
236 ..title = 'The types observed for this field at runtime. '
237 'Fields that are observed to have a single type at runtime '
238 'or to never be null may allow for additional optimization.'
239 ..children = [
240 new DivElement()..classes = ['memberName']
241 ..text = 'observed types',
242 new DivElement()..classes = ['memberName']
243 ..children = _createGuard()
244 ]
245 );
246 }
247 if (_field.staticValue != null) {
248 members.add(
249 new DivElement()..classes = ['memberItem']
250 ..children = [
251 new DivElement()..classes = ['memberName']
252 ..text = 'static value',
253 new DivElement()..classes = ['memberName']
254 ..children = [
255 anyRef(_isolate, _field.staticValue, _instances,
256 queue: _r.queue)
257 ]
258 ]
259 );
260 }
261 return members;
262 }
263
264 List<Element> _createGuard() {
265 final guard = <Element>[];
266 switch (_field.guardClassKind) {
267 case M.GuardClassKind.unknown:
268 guard.add(new SpanElement()..text = 'none');
269 break;
270 case M.GuardClassKind.dynamic:
271 guard.add(new SpanElement()..text = 'various');
272 break;
273 case M.GuardClassKind.single:
274 guard.add(new ClassRefElement(_isolate, _field.guardClass,
275 queue: _r.queue));
276 break;
277 }
278 guard.add(new SpanElement()
279 ..text = _field.guardNullable ? '— null observed' : '— null not observed'
280 );
281 return guard;
282 }
283
284 Future _refresh() async {
285 _field = await _fields.get(_isolate, _field.id);
286 if (field.dartOwner is M.LibraryRef) {
287 _library = field.dartOwner;
288 } else if (field.dartOwner is M.ClassRef) {
289 _library = (await _classes.get(_isolate, field.dartOwner.id)).library;
290 }
291 _r.dirty();
19 } 292 }
20 } 293 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/elements/class_tree.dart ('k') | runtime/observatory/lib/src/elements/field_view.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698