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

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

Issue 1000933004: Display ICData entries at call sites, with links to the targets and guarded classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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/observatory/lib/src/service/object.dart
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 6abd38a62e33c9f8ce208fc1c4018cd68e1c7b0e..4a006d2e11cfd2880bf4157df1aaff0eaee2dedd 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -293,26 +293,30 @@ abstract class Coverage {
String get id;
Isolate get isolate;
+ Future refreshCoverage() {
+ return refreshCallSiteData();
+ }
+
/// Default handler for coverage data.
- void processCoverageData(List coverageData) {
+ void processCallSiteData(List coverageData) {
coverageData.forEach((scriptCoverage) {
assert(scriptCoverage['script'] != null);
- scriptCoverage['script']._processHits(scriptCoverage['hits']);
+ scriptCoverage['script']._processCallSites(scriptCoverage['callSites']);
});
}
- Future refreshCoverage() {
+ Future refreshCallSiteData() {
Map params = {};
if (this is! Isolate) {
params['targetId'] = id;
}
- return isolate.invokeRpcNoUpgrade('getCoverage', params).then(
+ return isolate.invokeRpcNoUpgrade('getCallSiteData', params).then(
(ObservableMap map) {
var coverage = new ServiceObject._fromMap(isolate, map);
assert(coverage.type == 'CodeCoverage');
var coverageList = coverage['coverage'];
assert(coverageList != null);
- processCoverageData(coverageList);
+ processCallSiteData(coverageList);
return this;
});
}
@@ -1950,31 +1954,6 @@ class ServiceFunction extends ServiceObject with Coverage {
deoptimizations = map['deoptimizations'];
usageCounter = map['usageCounter'];
}
-
- // TODO(rmacnak): Generalize and move to Coverage.
- void processCallSiteData(List callSiteMaps) {
- var callSites = new List();
- for (var callSiteMap in callSiteMaps) {
- callSites.add(new CallSite.fromMap(callSiteMap, script));
- }
- script._processCallSites(callSites);
- }
-
- Future refreshCallSiteData() {
- Map params = {};
- if (this is! Isolate) {
- params['targetId'] = id;
- }
- return isolate.invokeRpcNoUpgrade('getCallSiteData', params).then(
- (ObservableMap map) {
- var data = new ServiceObject._fromMap(isolate, map);
- assert(data.type == '_CallSiteData');
- var callSites = data['callSites'];
- assert(callSites != null);
- processCallSiteData(callSites);
- return this;
- });
- }
}
@@ -2109,6 +2088,13 @@ class CallSite {
int get line => script.tokenToLine(tokenPos);
int get column => script.tokenToCol(tokenPos);
+ int get aggregateCount {
+ var count = 0;
+ for (var entry in entries) {
+ count += entry.count;
+ }
+ return count;
+ }
factory CallSite.fromMap(Map siteMap, Script script) {
var name = siteMap['name'];
@@ -2131,12 +2117,14 @@ class CallSite {
class CallSiteEntry {
final /* Class | Library */ receiverContainer;
final int count;
+ final ServiceFunction target;
- CallSiteEntry(this.receiverContainer, this.count);
+ CallSiteEntry(this.receiverContainer, this.count, this.target);
factory CallSiteEntry.fromMap(Map entryMap) {
return new CallSiteEntry(entryMap['receiverContainer'],
- entryMap['count']);
+ entryMap['count'],
+ entryMap['target']);
}
String toString() => "CallSiteEntry(${receiverContainer.name}, $count)";
@@ -2228,20 +2216,14 @@ class Script extends ServiceObject with Coverage {
}
}
- void _processCallSites(List newCallSites) {
- var mergedCallSites = new Set();
- mergedCallSites.addAll(newCallSites);
- mergedCallSites.addAll(callSites);
- callSites = mergedCallSites;
- // Notify any Observers that this Script's state has changed.
- notifyChange(null);
- }
+ void _processCallSites(List newCallSiteMaps) {
+ var mergedCallSites = new Set<CallSite>();
+ for (var callSiteMap in newCallSiteMaps) {
+ var newSite = new CallSite.fromMap(callSiteMap, this);
+ mergedCallSites.add(newSite);
- void _processHits(List scriptHits) {
- // Update hits table.
- for (var i = 0; i < scriptHits.length; i += 2) {
- var line = scriptHits[i];
- var hit = scriptHits[i + 1]; // hit status.
+ var line = newSite.line;
+ var hit = newSite.aggregateCount;
assert(line >= 1); // Lines start at 1.
var oldHits = _hits[line];
if (oldHits != null) {
@@ -2249,6 +2231,9 @@ class Script extends ServiceObject with Coverage {
}
_hits[line] = hit;
}
+
+ mergedCallSites.addAll(callSites);
+ callSites = mergedCallSites;
_applyHitsToLines();
// Notify any Observers that this Script's state has changed.
notifyChange(null);
« no previous file with comments | « runtime/observatory/lib/src/elements/script_inset.dart ('k') | runtime/observatory/test/call_site_data_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698