| 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 |