| 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..f7d4db88e26b5acc8bc228abeab540168292eef8 100644
|
| --- a/runtime/observatory/lib/src/service/object.dart
|
| +++ b/runtime/observatory/lib/src/service/object.dart
|
| @@ -316,6 +316,30 @@ abstract class Coverage {
|
| return this;
|
| });
|
| }
|
| +
|
| + /// Default handler for coverage data.
|
| + void processCallSiteData(List coverageData) {
|
| + coverageData.forEach((scriptCoverage) {
|
| + assert(scriptCoverage['script'] != null);
|
| + scriptCoverage['script']._processCallSites(scriptCoverage['callSites']);
|
| + });
|
| + }
|
| +
|
| + Future refreshCallSiteData() {
|
| + Map params = {};
|
| + if (this is! Isolate) {
|
| + params['targetId'] = id;
|
| + }
|
| + 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);
|
| + processCallSiteData(coverageList);
|
| + return this;
|
| + });
|
| + }
|
| }
|
|
|
| abstract class ServiceObjectOwner extends ServiceObject {
|
| @@ -1950,31 +1974,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,7 +2108,6 @@ class CallSite {
|
| int get line => script.tokenToLine(tokenPos);
|
| int get column => script.tokenToCol(tokenPos);
|
|
|
| -
|
| factory CallSite.fromMap(Map siteMap, Script script) {
|
| var name = siteMap['name'];
|
| var tokenPos = siteMap['tokenPos'];
|
| @@ -2131,12 +2129,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,15 +2228,6 @@ 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 _processHits(List scriptHits) {
|
| // Update hits table.
|
| for (var i = 0; i < scriptHits.length; i += 2) {
|
| @@ -2254,6 +2245,19 @@ class Script extends ServiceObject with Coverage {
|
| notifyChange(null);
|
| }
|
|
|
| +
|
| + void _processCallSites(List newCallSiteMaps) {
|
| + var mergedCallSites = new Set<CallSite>();
|
| + for (var callSiteMap in newCallSiteMaps) {
|
| + mergedCallSites.add(new CallSite.fromMap(callSiteMap, this));
|
| + }
|
| +
|
| + mergedCallSites.addAll(callSites);
|
| + callSites = mergedCallSites;
|
| + // Notify any Observers that this Script's state has changed.
|
| + notifyChange(null);
|
| + }
|
| +
|
| void _processSource(String source) {
|
| // Preemptyively mark that this is not loaded.
|
| _loaded = false;
|
|
|