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

Unified Diff: runtime/bin/vmservice/client/lib/src/service/object.dart

Issue 201213004: Use VM tag in profile and add stack trace trie (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 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
Index: runtime/bin/vmservice/client/lib/src/service/object.dart
diff --git a/runtime/bin/vmservice/client/lib/src/service/object.dart b/runtime/bin/vmservice/client/lib/src/service/object.dart
index ea21d2849c01c59d720bceb9c997e5f328a2388d..fd379ffe7ee5d916a6233d0785b58a764e09f245 100644
--- a/runtime/bin/vmservice/client/lib/src/service/object.dart
+++ b/runtime/bin/vmservice/client/lib/src/service/object.dart
@@ -61,6 +61,10 @@ class Isolate extends ServiceObject {
}
_codes._resetProfileData();
_codes._updateProfileData(profile, codeTable);
+ var exclusiveTrie = profile['exclusive_trie'];
+ if (exclusiveTrie != null) {
+ profileTrieRoot = _processProfileTrie(exclusiveTrie, codeTable);
+ }
}
Future<ServiceObject> getDirect(String serviceId) {
@@ -142,6 +146,35 @@ class Isolate extends ServiceObject {
newHeapUsed = map['heap']['usedNew'];
oldHeapUsed = map['heap']['usedOld'];
}
+
+ @reflectable CodeTrieNode profileTrieRoot;
+ int _trieDataCursor;
+ List<int> _trieData;
+ CodeTrieNode _readTrieNode(List<Code> codeTable) {
+ var index = _trieData[_trieDataCursor++];
+ var code = codeTable[index];
+ var count = _trieData[_trieDataCursor++];
+ var children = _trieData[_trieDataCursor++];
+ var node = new CodeTrieNode(code, count);
+ for (var i = 0; i < children; i++) {
+ var child = _readTrieNode(codeTable);
+ node.children.add(child);
+ node.summedChildCount += child.count;
+ }
+ return node;
+ }
+
+ CodeTrieNode _processProfileTrie(List<int> data, List<Code> codeTable) {
+ _trieDataCursor = 0;
+ _trieData = data;
+ if (_trieData == null) {
+ return null;
+ }
+ if (_trieData.length < 3) {
+ return null;
+ }
+ return _readTrieNode(codeTable);
+ }
}
// TODO(johnmccutchan): Make this into an IsolateCache.
@@ -450,6 +483,8 @@ class CodeKind {
return Collected;
} else if (s == 'Reused') {
return Reused;
+ } else if (s == 'Tag') {
+ return Tag;
}
Logger.root.warning('Unknown code kind $s');
throw new FallThroughError();
@@ -458,6 +493,7 @@ class CodeKind {
static const Dart = const CodeKind._internal('Dart');
static const Collected = const CodeKind._internal('Collected');
static const Reused = const CodeKind._internal('Reused');
+ static const Tag = const CodeKind._internal('Tag');
}
class CodeCallCount {
@@ -466,6 +502,14 @@ class CodeCallCount {
CodeCallCount(this.code, this.count);
}
+class CodeTrieNode {
+ final Code code;
+ final int count;
+ final children = new List<CodeTrieNode>();
+ int summedChildCount = 0;
+ CodeTrieNode(this.code, this.count);
+}
+
class Code extends ServiceObject {
@observable CodeKind kind;
@observable int totalSamplesInProfile = 0;

Powered by Google App Engine
This is Rietveld 408576698