Index: runtime/observatory/lib/src/elements/cpu_profile.dart |
diff --git a/runtime/observatory/lib/src/elements/cpu_profile.dart b/runtime/observatory/lib/src/elements/cpu_profile.dart |
index 0da1ee5569e2bfa50c68e86c8d2cd02e3f84edf1..13e7c21e5ae673888add34fa7eecf07d26d1e0ea 100644 |
--- a/runtime/observatory/lib/src/elements/cpu_profile.dart |
+++ b/runtime/observatory/lib/src/elements/cpu_profile.dart |
@@ -465,11 +465,11 @@ class CpuProfileElement extends ObservatoryElement { |
} |
void isolateChanged(oldValue) { |
- _getCpuProfile(); |
+ _getCpuProfile().catchError(app.handleException); |
} |
void tagSelectorChanged(oldValue) { |
- _getCpuProfile(); |
+ _getCpuProfile().catchError(app.handleException); |
} |
void modeSelectorChanged(oldValue) { |
@@ -480,11 +480,7 @@ class CpuProfileElement extends ObservatoryElement { |
_updateView(); |
} |
- void clear(var done) { |
- _clearCpuProfile().whenComplete(done); |
- } |
- |
- Future _clearCpuProfile() { |
+ Future clearCpuProfile() { |
profile.clear(); |
if (isolate == null) { |
return new Future.value(null); |
@@ -495,8 +491,8 @@ class CpuProfileElement extends ObservatoryElement { |
}); |
} |
- void refresh(var done) { |
- _getCpuProfile().whenComplete(done); |
+ Future refresh() { |
+ return _getCpuProfile(); |
} |
_onFetchStarted() { |
@@ -523,7 +519,7 @@ class CpuProfileElement extends ObservatoryElement { |
state = 'Loaded'; |
} |
- Future _getCpuProfile() { |
+ Future _getCpuProfile() async { |
profile.clear(); |
if (functionTree != null) { |
functionTree.clear(); |
@@ -537,24 +533,30 @@ class CpuProfileElement extends ObservatoryElement { |
return new Future.value(null); |
} |
_onFetchStarted(); |
- return isolate.invokeRpc('getCpuProfile', { 'tags': tagSelector }) |
- .then((response) async { |
+ try { |
+ var params = { 'tags': tagSelector }; |
+ var response = await isolate.invokeRpc('getCpuProfile', params); |
_onFetchFinished(); |
await _onLoadStarted(); |
- try { |
- profile.load(isolate, response); |
- _onLoadFinished(); |
- _updateView(); |
- } catch (e, st) { |
+ profile.load(isolate, response); |
+ _onLoadFinished(); |
+ _updateView(); |
+ } catch (e, st) { |
+ bool handled = false; |
+ if (e is ServerRpcException) { |
+ ServerRpcException se = e; |
+ if (se.code == ServerRpcException.kProfilingDisabled) { |
+ state = 'Disabled'; |
+ handled = true; |
+ } |
+ } |
+ if (!handled) { |
state = 'Exception'; |
exception = e; |
stackTrace = st; |
+ rethrow; |
} |
- }).catchError((e, st) { |
- state = 'Exception'; |
- exception = e; |
- stackTrace = st; |
- }); |
+ } |
} |
void _updateView() { |
@@ -794,7 +796,9 @@ class CpuProfileTableElement extends ObservatoryElement { |
} |
isolateChanged() { |
- _getCpuProfile().whenComplete(checkParameters); |
+ _getCpuProfile() |
+ .catchError(app.handleException) |
+ .whenComplete(checkParameters); |
} |
checkParameters() { |
@@ -813,12 +817,8 @@ class CpuProfileTableElement extends ObservatoryElement { |
_updateFunctionTreeView(); |
} |
- void refresh(var done) { |
- _getCpuProfile().whenComplete(done); |
- } |
- |
- void clear(var done) { |
- _clearCpuProfile().whenComplete(done); |
+ Future refresh() { |
+ return _getCpuProfile(); |
} |
_onFetchStarted() { |
@@ -844,7 +844,7 @@ class CpuProfileTableElement extends ObservatoryElement { |
state = 'Loaded'; |
} |
- Future _clearCpuProfile() { |
+ Future clearCpuProfile() { |
profile.clear(); |
_clearView(); |
if (isolate == null) { |
@@ -856,32 +856,38 @@ class CpuProfileTableElement extends ObservatoryElement { |
}); |
} |
- Future _getCpuProfile() { |
+ Future _getCpuProfile() async { |
profile.clear(); |
_clearView(); |
if (isolate == null) { |
return new Future.value(null); |
} |
_onFetchStarted(); |
- return isolate.invokeRpc('getCpuProfile', { 'tags': 'None' }) |
- .then((response) { |
+ try { |
+ var params = { 'tags': 'None' }; |
+ var response = await isolate.invokeRpc('getCpuProfile', params); |
_onFetchFinished(); |
_onLoadStarted(); |
- try { |
- profile.load(isolate, response); |
- profile.buildFunctionCallerAndCallees(); |
- _onLoadFinished(); |
- _updateView(); |
- } catch (e, st) { |
+ profile.load(isolate, response); |
+ profile.buildFunctionCallerAndCallees(); |
+ _onLoadFinished(); |
+ _updateView(); |
+ } catch (e, st) { |
+ bool handled = false; |
+ if (e is ServerRpcException) { |
+ ServerRpcException se = e; |
+ if (se.code == ServerRpcException.kProfilingDisabled) { |
+ state = 'Disabled'; |
+ handled = true; |
+ } |
+ } |
+ if (!handled) { |
state = 'Exception'; |
exception = e; |
stackTrace = st; |
+ rethrow; |
} |
- }).catchError((e, st) { |
- state = 'Exception'; |
- exception = e; |
- stackTrace = st; |
- }); |
+ } |
} |
_clearView() { |