| 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..4b2903233403cb124e192b4ee0ada120150be0a3 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 instanceCount = _cls.newSpace.current.instances +
|
| + _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 ${instanceCount} (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);
|
|
|