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

Unified Diff: runtime/observatory/lib/src/service/object.dart

Issue 818733002: Rank most retaining instances for each class. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/observatory/lib/src/elements/heap_profile.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/observatory/lib/src/service/object.dart
===================================================================
--- runtime/observatory/lib/src/service/object.dart (revision 42649)
+++ runtime/observatory/lib/src/service/object.dart (working copy)
@@ -693,6 +693,32 @@
}
}
+class HeapSnapshot {
+ final ObjectGraph graph;
+ final DateTime timeStamp;
+ final Isolate isolate;
+
+ HeapSnapshot(this.isolate, ByteData data) :
+ graph = new ObjectGraph(new ReadStream(data)),
+ timeStamp = new DateTime.now() {
+ }
+
+ List<Future<ServiceObject>> getMostRetained({int classId, int limit}) {
+ var result = [];
+ for (var v in graph.getMostRetained(classId: classId, limit: limit)) {
+ var address = v.addressForWordSize(isolate.vm.architectureBits ~/ 8);
+ result.add(isolate.get(
+ 'address/${address.toRadixString(16)}?ref=true').then((obj) {
+ obj.retainedSize = v.retainedSize;
+ return new Future(() => obj);
+ }));
+ }
+ return result;
+ }
+
+
+}
+
/// State for a running isolate.
class Isolate extends ServiceObjectOwner with Coverage {
@reflectable VM get vm => owner;
@@ -854,6 +880,21 @@
@observable String fileAndLine;
@observable DartError error;
+ @observable HeapSnapshot latestSnapshot;
+ Completer<HeapSnapshot> _snapshotFetch;
+
+ void loadHeapSnapshot(ServiceEvent event) {
+ latestSnapshot = new HeapSnapshot(this, event.data);
+ _snapshotFetch.complete(latestSnapshot);
+ }
+
+ Future<HeapSnapshot> fetchHeapSnapshot() {
+ if (_snapshotFetch == null || _snapshotFetch.isCompleted) {
+ get('graph');
+ _snapshotFetch = new Completer<HeapSnapshot>();
+ }
+ return _snapshotFetch.future;
+ }
void updateHeapsFromMap(ObservableMap map) {
newSpace.update(map['new']);
@@ -1541,6 +1582,7 @@
class Instance extends ServiceObject {
@observable Class clazz;
@observable int size;
+ @observable int retainedSize;
@observable String valueAsString; // If primitive.
@observable bool valueAsStringIsTruncated;
@observable ServiceFunction closureFunc; // If a closure.
« no previous file with comments | « runtime/observatory/lib/src/elements/heap_profile.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698