OLD | NEW |
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 class_view_element; | 5 library class_view_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/class_allocation_profile.dart'; | 10 import 'package:observatory/src/elements/class_allocation_profile.dart'; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 M.Class _cls; | 67 M.Class _cls; |
68 M.ClassRepository _classes; | 68 M.ClassRepository _classes; |
69 M.RetainedSizeRepository _retainedSizes; | 69 M.RetainedSizeRepository _retainedSizes; |
70 M.ReachableSizeRepository _reachableSizes; | 70 M.ReachableSizeRepository _reachableSizes; |
71 M.InboundReferencesRepository _references; | 71 M.InboundReferencesRepository _references; |
72 M.RetainingPathRepository _retainingPaths; | 72 M.RetainingPathRepository _retainingPaths; |
73 M.StronglyReachableInstancesRepository _stronglyReachableInstances; | 73 M.StronglyReachableInstancesRepository _stronglyReachableInstances; |
74 M.TopRetainingInstancesRepository _topRetainedInstances; | 74 M.TopRetainingInstancesRepository _topRetainedInstances; |
75 M.FieldRepository _fields; | 75 M.FieldRepository _fields; |
76 M.ScriptRepository _scripts; | 76 M.ScriptRepository _scripts; |
77 M.InstanceRepository _instances; | 77 M.ObjectRepository _objects; |
78 M.EvalRepository _eval; | 78 M.EvalRepository _eval; |
79 M.ClassSampleProfileRepository _profiles; | 79 M.ClassSampleProfileRepository _profiles; |
80 Iterable<M.Field> _classFields; | 80 Iterable<M.Field> _classFields; |
81 | 81 |
82 M.VMRef get vm => _vm; | 82 M.VMRef get vm => _vm; |
83 M.IsolateRef get isolate => _isolate; | 83 M.IsolateRef get isolate => _isolate; |
84 M.NotificationRepository get notifications => _notifications; | 84 M.NotificationRepository get notifications => _notifications; |
85 M.Class get cls => _cls; | 85 M.Class get cls => _cls; |
86 | 86 |
87 factory ClassViewElement( | 87 factory ClassViewElement( |
88 M.VM vm, | 88 M.VM vm, |
89 M.IsolateRef isolate, | 89 M.IsolateRef isolate, |
90 M.Class cls, | 90 M.Class cls, |
91 M.EventRepository events, | 91 M.EventRepository events, |
92 M.NotificationRepository notifications, | 92 M.NotificationRepository notifications, |
93 M.ClassRepository classes, | 93 M.ClassRepository classes, |
94 M.RetainedSizeRepository retainedSizes, | 94 M.RetainedSizeRepository retainedSizes, |
95 M.ReachableSizeRepository reachableSizes, | 95 M.ReachableSizeRepository reachableSizes, |
96 M.InboundReferencesRepository references, | 96 M.InboundReferencesRepository references, |
97 M.RetainingPathRepository retainingPaths, | 97 M.RetainingPathRepository retainingPaths, |
98 M.FieldRepository fields, | 98 M.FieldRepository fields, |
99 M.ScriptRepository scripts, | 99 M.ScriptRepository scripts, |
100 M.InstanceRepository instances, | 100 M.ObjectRepository objects, |
101 M.EvalRepository eval, | 101 M.EvalRepository eval, |
102 M.StronglyReachableInstancesRepository stronglyReachable, | 102 M.StronglyReachableInstancesRepository stronglyReachable, |
103 M.TopRetainingInstancesRepository topRetained, | 103 M.TopRetainingInstancesRepository topRetained, |
104 M.ClassSampleProfileRepository profiles, | 104 M.ClassSampleProfileRepository profiles, |
105 {RenderingQueue queue}) { | 105 {RenderingQueue queue}) { |
106 assert(vm != null); | 106 assert(vm != null); |
107 assert(isolate != null); | 107 assert(isolate != null); |
108 assert(events != null); | 108 assert(events != null); |
109 assert(notifications != null); | 109 assert(notifications != null); |
110 assert(cls != null); | 110 assert(cls != null); |
111 assert(classes != null); | 111 assert(classes != null); |
112 assert(retainedSizes != null); | 112 assert(retainedSizes != null); |
113 assert(reachableSizes != null); | 113 assert(reachableSizes != null); |
114 assert(references != null); | 114 assert(references != null); |
115 assert(retainingPaths != null); | 115 assert(retainingPaths != null); |
116 assert(fields != null); | 116 assert(fields != null); |
117 assert(scripts != null); | 117 assert(scripts != null); |
118 assert(instances != null); | 118 assert(objects != null); |
119 assert(eval != null); | 119 assert(eval != null); |
120 assert(stronglyReachable != null); | 120 assert(stronglyReachable != null); |
121 assert(topRetained != null); | 121 assert(topRetained != null); |
122 assert(profiles != null); | 122 assert(profiles != null); |
123 ClassViewElement e = document.createElement(tag.name); | 123 ClassViewElement e = document.createElement(tag.name); |
124 e._r = new RenderingScheduler(e, queue: queue); | 124 e._r = new RenderingScheduler(e, queue: queue); |
125 e._vm = vm; | 125 e._vm = vm; |
126 e._isolate = isolate; | 126 e._isolate = isolate; |
127 e._events = events; | 127 e._events = events; |
128 e._notifications = notifications; | 128 e._notifications = notifications; |
129 e._cls = cls; | 129 e._cls = cls; |
130 e._classes = classes; | 130 e._classes = classes; |
131 e._retainedSizes = retainedSizes; | 131 e._retainedSizes = retainedSizes; |
132 e._reachableSizes = reachableSizes; | 132 e._reachableSizes = reachableSizes; |
133 e._references = references; | 133 e._references = references; |
134 e._retainingPaths = retainingPaths; | 134 e._retainingPaths = retainingPaths; |
135 e._fields = fields; | 135 e._fields = fields; |
136 e._scripts = scripts; | 136 e._scripts = scripts; |
137 e._instances = instances; | 137 e._objects = objects; |
138 e._eval = eval; | 138 e._eval = eval; |
139 e._stronglyReachableInstances = stronglyReachable; | 139 e._stronglyReachableInstances = stronglyReachable; |
140 e._topRetainedInstances = topRetained; | 140 e._topRetainedInstances = topRetained; |
141 e._profiles = profiles; | 141 e._profiles = profiles; |
142 return e; | 142 return e; |
143 } | 143 } |
144 | 144 |
145 ClassViewElement.created() : super.created(); | 145 ClassViewElement.created() : super.created(); |
146 | 146 |
147 @override | 147 @override |
(...skipping 10 matching lines...) Expand all Loading... |
158 children = []; | 158 children = []; |
159 } | 159 } |
160 | 160 |
161 ObjectCommonElement _common; | 161 ObjectCommonElement _common; |
162 ClassInstancesElement _classInstances; | 162 ClassInstancesElement _classInstances; |
163 bool _loadProfile = false; | 163 bool _loadProfile = false; |
164 | 164 |
165 void render() { | 165 void render() { |
166 _common = _common ?? | 166 _common = _common ?? |
167 new ObjectCommonElement(_isolate, _cls, _retainedSizes, _reachableSizes, | 167 new ObjectCommonElement(_isolate, _cls, _retainedSizes, _reachableSizes, |
168 _references, _retainingPaths, _instances, | 168 _references, _retainingPaths, _objects, |
169 queue: _r.queue); | 169 queue: _r.queue); |
170 _classInstances = _classInstances ?? | 170 _classInstances = _classInstances ?? |
171 new ClassInstancesElement( | 171 new ClassInstancesElement( |
172 _isolate, | 172 _isolate, |
173 _cls, | 173 _cls, |
174 _retainedSizes, | 174 _retainedSizes, |
175 _reachableSizes, | 175 _reachableSizes, |
176 _stronglyReachableInstances, | 176 _stronglyReachableInstances, |
177 _topRetainedInstances, | 177 _topRetainedInstances, |
178 _instances, | 178 _objects, |
179 queue: _r.queue); | 179 queue: _r.queue); |
180 var header = ''; | 180 var header = ''; |
181 if (_cls.isAbstract) { | 181 if (_cls.isAbstract) { |
182 header += 'abstract '; | 182 header += 'abstract '; |
183 } | 183 } |
184 if (_cls.isPatch) { | 184 if (_cls.isPatch) { |
185 header += 'patch '; | 185 header += 'patch '; |
186 } | 186 } |
187 children = [ | 187 children = [ |
188 navBar([ | 188 navBar([ |
(...skipping 30 matching lines...) Expand all Loading... |
219 ..classes = ['memberList'] | 219 ..classes = ['memberList'] |
220 ..children = _createMembers(), | 220 ..children = _createMembers(), |
221 new DivElement() | 221 new DivElement() |
222 ..children = _cls.error == null | 222 ..children = _cls.error == null |
223 ? const [] | 223 ? const [] |
224 : [ | 224 : [ |
225 new HRElement(), | 225 new HRElement(), |
226 new ErrorRefElement(_cls.error, queue: _r.queue) | 226 new ErrorRefElement(_cls.error, queue: _r.queue) |
227 ], | 227 ], |
228 new HRElement(), | 228 new HRElement(), |
229 new EvalBoxElement(_isolate, _cls, _instances, _eval, | 229 new EvalBoxElement(_isolate, _cls, _objects, _eval, queue: _r.queue), |
230 queue: _r.queue), | |
231 new HRElement(), | 230 new HRElement(), |
232 new HeadingElement.h2()..text = 'Fields & Functions', | 231 new HeadingElement.h2()..text = 'Fields & Functions', |
233 new DivElement() | 232 new DivElement() |
234 ..classes = ['memberList'] | 233 ..classes = ['memberList'] |
235 ..children = _createElements(), | 234 ..children = _createElements(), |
236 new HRElement(), | 235 new HRElement(), |
237 new HeadingElement.h2()..text = 'Instances', | 236 new HeadingElement.h2()..text = 'Instances', |
238 new DivElement() | 237 new DivElement() |
239 ..children = _cls.hasAllocations ? [_classInstances] : const [], | 238 ..children = _cls.hasAllocations ? [_classInstances] : const [], |
240 new HRElement(), | 239 new HRElement(), |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 ? [ | 274 ? [ |
276 new ClassAllocationProfileElement(_isolate, _cls, _profiles, | 275 new ClassAllocationProfileElement(_isolate, _cls, _profiles, |
277 queue: _r.queue) | 276 queue: _r.queue) |
278 ] | 277 ] |
279 : const [], | 278 : const [], |
280 new DivElement() | 279 new DivElement() |
281 ..children = _cls.location != null | 280 ..children = _cls.location != null |
282 ? [ | 281 ? [ |
283 new HRElement(), | 282 new HRElement(), |
284 new SourceInsetElement( | 283 new SourceInsetElement( |
285 _isolate, _cls.location, _scripts, _instances, _events, | 284 _isolate, _cls.location, _scripts, _objects, _events, |
286 queue: _r.queue) | 285 queue: _r.queue) |
287 ] | 286 ] |
288 : const [], | 287 : const [], |
289 new HRElement(), | 288 new HRElement(), |
290 new ViewFooterElement(queue: _r.queue) | 289 new ViewFooterElement(queue: _r.queue) |
291 ] | 290 ] |
292 ]; | 291 ]; |
293 } | 292 } |
294 | 293 |
295 bool _fieldsExpanded; | 294 bool _fieldsExpanded; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 if (_cls.superType != null) { | 342 if (_cls.superType != null) { |
344 members.add(new DivElement() | 343 members.add(new DivElement() |
345 ..classes = ['memberItem'] | 344 ..classes = ['memberItem'] |
346 ..children = [ | 345 ..children = [ |
347 new DivElement() | 346 new DivElement() |
348 ..classes = ['memberName'] | 347 ..classes = ['memberName'] |
349 ..text = 'supertype', | 348 ..text = 'supertype', |
350 new DivElement() | 349 new DivElement() |
351 ..classes = ['memberValue'] | 350 ..classes = ['memberValue'] |
352 ..children = [ | 351 ..children = [ |
353 new InstanceRefElement(_isolate, _cls.superType, _instances, | 352 new InstanceRefElement(_isolate, _cls.superType, _objects, |
354 queue: _r.queue) | 353 queue: _r.queue) |
355 ] | 354 ] |
356 ]); | 355 ]); |
357 } | 356 } |
358 if (cls.mixin != null) { | 357 if (cls.mixin != null) { |
359 members.add(new DivElement() | 358 members.add(new DivElement() |
360 ..classes = ['memberItem'] | 359 ..classes = ['memberItem'] |
361 ..children = [ | 360 ..children = [ |
362 new DivElement() | 361 new DivElement() |
363 ..classes = ['memberName'] | 362 ..classes = ['memberName'] |
364 ..text = 'mixin', | 363 ..text = 'mixin', |
365 new DivElement() | 364 new DivElement() |
366 ..classes = ['memberValue'] | 365 ..classes = ['memberValue'] |
367 ..children = [ | 366 ..children = [ |
368 new InstanceRefElement(_isolate, _cls.mixin, _instances, | 367 new InstanceRefElement(_isolate, _cls.mixin, _objects, |
369 queue: _r.queue) | 368 queue: _r.queue) |
370 ] | 369 ] |
371 ]); | 370 ]); |
372 } | 371 } |
373 if (_cls.subclasses.length > 0) { | 372 if (_cls.subclasses.length > 0) { |
374 members.add(new DivElement() | 373 members.add(new DivElement() |
375 ..classes = ['memberItem'] | 374 ..classes = ['memberItem'] |
376 ..children = [ | 375 ..children = [ |
377 new DivElement() | 376 new DivElement() |
378 ..classes = ['memberName'] | 377 ..classes = ['memberName'] |
(...skipping 16 matching lines...) Expand all Loading... |
395 members.add(new DivElement() | 394 members.add(new DivElement() |
396 ..classes = ['memberItem'] | 395 ..classes = ['memberItem'] |
397 ..children = [ | 396 ..children = [ |
398 new DivElement() | 397 new DivElement() |
399 ..classes = ['memberName'] | 398 ..classes = ['memberName'] |
400 ..text = 'implements', | 399 ..text = 'implements', |
401 new DivElement() | 400 new DivElement() |
402 ..classes = ['memberValue'] | 401 ..classes = ['memberValue'] |
403 ..children = (_cls.interfaces | 402 ..children = (_cls.interfaces |
404 .expand((interf) => [ | 403 .expand((interf) => [ |
405 new InstanceRefElement(_isolate, interf, _instances, | 404 new InstanceRefElement(_isolate, interf, _objects, |
406 queue: _r.queue), | 405 queue: _r.queue), |
407 new SpanElement()..text = ', ' | 406 new SpanElement()..text = ', ' |
408 ]) | 407 ]) |
409 .toList() | 408 .toList() |
410 ..removeLast()) | 409 ..removeLast()) |
411 ]); | 410 ]); |
412 } | 411 } |
413 if (_cls.name != _cls.vmName) { | 412 if (_cls.name != _cls.vmName) { |
414 members.add(new DivElement() | 413 members.add(new DivElement() |
415 ..classes = ['memberItem'] | 414 ..classes = ['memberItem'] |
(...skipping 28 matching lines...) Expand all Loading... |
444 ..content = [ | 443 ..content = [ |
445 new DivElement() | 444 new DivElement() |
446 ..classes = ['memberList'] | 445 ..classes = ['memberList'] |
447 ..children = (fields | 446 ..children = (fields |
448 .map((f) => new DivElement() | 447 .map((f) => new DivElement() |
449 ..classes = ['memberItem'] | 448 ..classes = ['memberItem'] |
450 ..children = [ | 449 ..children = [ |
451 new DivElement() | 450 new DivElement() |
452 ..classes = ['memberName'] | 451 ..classes = ['memberName'] |
453 ..children = [ | 452 ..children = [ |
454 new FieldRefElement(_isolate, f, _instances, | 453 new FieldRefElement(_isolate, f, _objects, |
455 queue: _r.queue) | 454 queue: _r.queue) |
456 ], | 455 ], |
457 new DivElement() | 456 new DivElement() |
458 ..classes = ['memberValue'] | 457 ..classes = ['memberValue'] |
459 ..children = f.staticValue == null | 458 ..children = f.staticValue == null |
460 ? const [] | 459 ? const [] |
461 : [ | 460 : [ |
462 anyRef( | 461 anyRef(_isolate, f.staticValue, _objects, |
463 _isolate, f.staticValue, _instances, | |
464 queue: _r.queue) | 462 queue: _r.queue) |
465 ] | 463 ] |
466 ]) | 464 ]) |
467 .toList()) | 465 .toList()) |
468 ] | 466 ] |
469 ] | 467 ] |
470 ]); | 468 ]); |
471 } | 469 } |
472 | 470 |
473 if (_cls.functions.isNotEmpty) { | 471 if (_cls.functions.isNotEmpty) { |
(...skipping 29 matching lines...) Expand all Loading... |
503 await _loadAdditionalData(); | 501 await _loadAdditionalData(); |
504 _r.dirty(); | 502 _r.dirty(); |
505 } | 503 } |
506 | 504 |
507 Future _loadAdditionalData() async { | 505 Future _loadAdditionalData() async { |
508 _classFields = | 506 _classFields = |
509 await Future.wait(_cls.fields.map((f) => _fields.get(_isolate, f.id))); | 507 await Future.wait(_cls.fields.map((f) => _fields.get(_isolate, f.id))); |
510 _r.dirty(); | 508 _r.dirty(); |
511 } | 509 } |
512 } | 510 } |
OLD | NEW |