Chromium Code Reviews| Index: runtime/observatory/lib/src/elements/class_instances.dart |
| diff --git a/runtime/observatory/lib/src/elements/object_common.dart b/runtime/observatory/lib/src/elements/class_instances.dart |
| similarity index 61% |
| copy from runtime/observatory/lib/src/elements/object_common.dart |
| copy to runtime/observatory/lib/src/elements/class_instances.dart |
| index 3e40ca2b04716b04241f17e429e165f7d1f1bf04..b4fae439d5ad304d47fae8276b1616b04642e666 100644 |
| --- a/runtime/observatory/lib/src/elements/object_common.dart |
| +++ b/runtime/observatory/lib/src/elements/class_instances.dart |
| @@ -11,27 +11,29 @@ import 'package:observatory/src/elements/helpers/tag.dart'; |
| import 'package:observatory/src/elements/inbound_references.dart'; |
| import 'package:observatory/src/elements/retaining_path.dart'; |
| import 'package:observatory/src/elements/sentinel_value.dart'; |
| +import 'package:observatory/src/elements/strongly_reachable_instances.dart'; |
| +import 'package:observatory/src/elements/top_retaining_instances.dart'; |
| import 'package:observatory/utils.dart'; |
| -class ObjectCommonElement extends HtmlElement implements Renderable { |
| - static const tag = const Tag<ObjectCommonElement>('object-common-wrapped', |
| +class ClassInstancesElement extends HtmlElement implements Renderable { |
| + static const tag = const Tag<ClassInstancesElement>('class-instances', |
| dependencies: const [ |
| ClassRefElement.tag, |
| InboundReferencesElement.tag, |
| RetainingPathElement.tag, |
| - SentinelValueElement.tag |
| + TopRetainingInstancesElement.tag |
| ]); |
| - RenderingScheduler<ObjectCommonElement> _r; |
| + RenderingScheduler<ClassInstancesElement> _r; |
| - Stream<RenderedEvent<ObjectCommonElement>> get onRendered => _r.onRendered; |
| + Stream<RenderedEvent<ClassInstancesElement>> get onRendered => _r.onRendered; |
| M.IsolateRef _isolate; |
| - M.Object _object; |
| + M.Class _cls; |
| M.RetainedSizeRepository _retainedSizes; |
| M.ReachableSizeRepository _reachableSizes; |
| - M.InboundReferencesRepository _references; |
| - M.RetainingPathRepository _retainingPaths; |
| + M.StronglyReachableInstancesRepository _stronglyReachableInstances; |
| + M.TopRetainingInstancesRepository _topRetainingInstances; |
| M.InstanceRepository _instances; |
| M.Guarded<M.Instance> _retainedSize = null; |
| bool _loadingRetainedBytes = false; |
| @@ -39,35 +41,35 @@ class ObjectCommonElement extends HtmlElement implements Renderable { |
| bool _loadingReachableBytes = false; |
| M.IsolateRef get isolate => _isolate; |
| - M.Object get object => _object; |
| + M.Class get cls => _cls; |
| - factory ObjectCommonElement(M.IsolateRef isolate, M.Object object, |
| - M.RetainedSizeRepository retainedSizes, |
| - M.ReachableSizeRepository reachableSizes, |
| - M.InboundReferencesRepository references, |
| - M.RetainingPathRepository retainingPaths, |
| - M.InstanceRepository instances, |
| - {RenderingQueue queue}) { |
| + factory ClassInstancesElement(M.IsolateRef isolate, M.Class cls, |
| + M.RetainedSizeRepository retainedSizes, |
| + M.ReachableSizeRepository reachableSizes, |
| + M.StronglyReachableInstancesRepository stronglyReachableInstances, |
| + M.TopRetainingInstancesRepository topRetainingInstances, |
| + M.InstanceRepository instances, |
| + {RenderingQueue queue}) { |
| assert(isolate != null); |
| - assert(object != null); |
| + assert(cls != null); |
| assert(retainedSizes != null); |
| assert(reachableSizes != null); |
| - assert(references != null); |
| - assert(retainingPaths != null); |
| + assert(stronglyReachableInstances != null); |
| + assert(topRetainingInstances != null); |
| assert(instances != null); |
| - ObjectCommonElement e = document.createElement(tag.name); |
| + ClassInstancesElement e = document.createElement(tag.name); |
| e._r = new RenderingScheduler(e, queue: queue); |
| e._isolate = isolate; |
| - e._object = object; |
| + e._cls = cls; |
| e._retainedSizes = retainedSizes; |
| e._reachableSizes = reachableSizes; |
| - e._references = references; |
| + e._stronglyReachableInstances = stronglyReachableInstances; |
| + e._topRetainingInstances = topRetainingInstances; |
| e._instances = instances; |
| - e._retainingPaths = retainingPaths; |
| return e; |
| } |
| - ObjectCommonElement.created() : super.created(); |
| + ClassInstancesElement.created() : super.created(); |
| @override |
| void attached() { |
| @@ -82,39 +84,34 @@ class ObjectCommonElement extends HtmlElement implements Renderable { |
| children = []; |
| } |
| - RetainingPathElement _path; |
| - InboundReferencesElement _inbounds; |
| + StronglyReachableInstancesElement _strong; |
| + TopRetainingInstancesElement _topRetainig; |
| void render() { |
| - _path = _path ?? new RetainingPathElement(_isolate, _object, |
| - _retainingPaths, _instances, |
| - queue: _r.queue); |
| - _inbounds = _inbounds ?? new InboundReferencesElement(_isolate, _object, |
| - _references, |
| - _instances, |
| - queue: _r.queue); |
| + _strong = _strong ?? new StronglyReachableInstancesElement(_isolate, |
| + _cls, _stronglyReachableInstances, _instances, queue: _r.queue); |
| + _topRetainig = _topRetainig ?? new TopRetainingInstancesElement(_isolate, |
| + _cls, _topRetainingInstances, _instances, queue: _r.queue); |
| + final instanceNumber = _cls.newSpace.current.instances + |
|
rmacnak
2016/08/31 23:51:39
instanceCount
cbernaschina
2016/09/01 00:04:07
Done.
|
| + _cls.oldSpace.current.instances; |
| + final size = Utils.formatSize(_cls.newSpace.current.bytes + |
| + _cls.oldSpace.current.bytes); |
| children = [ |
| new DivElement()..classes = ['memberList'] |
| ..children = [ |
| - new DivElement()..classes = ['memberItem'] |
| + new DivElement()..classes = const ['memberItem'] |
| ..children = [ |
| - new DivElement()..classes = ['memberName'] |
| - ..text = 'Class ', |
| - new DivElement()..classes = ['memberValue'] |
| - ..children = [ |
| - _object.clazz == null |
| - ? (new SpanElement()..text = '...') |
| - : new ClassRefElement(_isolate, _object.clazz, |
| - queue: _r.queue) |
| - ] |
| + new DivElement()..classes = const ['memberName'] |
| + ..text = 'currently allocated', |
| + new DivElement()..classes = const ['memberValue'] |
| + ..text = 'count ${instanceNumber} (shallow size ${size})' |
| ], |
| new DivElement()..classes = ['memberItem'] |
| - ..title = 'Space for this object in memory' |
| ..children = [ |
| new DivElement()..classes = ['memberName'] |
| - ..text = 'Shallow size ', |
| + ..text = 'strongly reachable ', |
| new DivElement()..classes = ['memberValue'] |
| - ..text = Utils.formatSize(_object.size ?? 0) |
| + ..children = [_strong] |
| ], |
| new DivElement()..classes = ['memberItem'] |
| ..title = 'Space reachable from this object, ' |
| @@ -137,17 +134,9 @@ class ObjectCommonElement extends HtmlElement implements Renderable { |
| new DivElement()..classes = ['memberItem'] |
| ..children = [ |
| new DivElement()..classes = ['memberName'] |
| - ..text = 'Retaining path ', |
| - new DivElement()..classes = ['memberValue'] |
| - ..children = [_path] |
| - ], |
| - new DivElement()..classes = ['memberItem'] |
| - ..title = 'Objects which directly reference this object' |
| - ..children = [ |
| - new DivElement()..classes = ['memberName'] |
| - ..text = 'Inbound references ', |
| + ..text = 'toplist by retained memory ', |
| new DivElement()..classes = ['memberValue'] |
| - ..children = [_inbounds] |
| + ..children = [_topRetainig] |
| ] |
| ] |
| ]; |
| @@ -177,7 +166,7 @@ class ObjectCommonElement extends HtmlElement implements Renderable { |
| button.onClick.listen((_) async { |
| button.disabled = true; |
| _loadingReachableBytes = true; |
| - _reachableSize = await _reachableSizes.get(_isolate, _object.id); |
| + _reachableSize = await _reachableSizes.get(_isolate, _cls.id); |
| _r.dirty(); |
| }); |
| content.add(button); |
| @@ -208,7 +197,7 @@ class ObjectCommonElement extends HtmlElement implements Renderable { |
| button.onClick.listen((_) async { |
| button.disabled = true; |
| _loadingRetainedBytes = true; |
| - _retainedSize = await _retainedSizes.get(_isolate, _object.id); |
| + _retainedSize = await _retainedSizes.get(_isolate, _cls.id); |
| _r.dirty(); |
| }); |
| content.add(button); |