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

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

Issue 1100583006: Add crash dumps to service protocol and Observatory (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 0459a5a982e9d23d137a7bae13a2e0c7350e83dc..25d2cfa8a5ee7fb36b2f1cc24ecfa220d34e32b0 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -593,6 +593,73 @@ abstract class VM extends ServiceObjectOwner {
}
}
+class FakeVM extends VM {
turnidge 2015/04/23 17:03:33 Lovely. This is so slick.
+ final Map _responses = {};
+ FakeVM(Map responses) {
+ if (responses == null) {
+ return;
+ }
+ responses.forEach((uri, response) {
+ // Encode as string.
+ _responses[_canonicalizeUri(Uri.parse(uri))] = JSON.encode(response);
+ });
+ }
+
+ String _canonicalizeUri(Uri uri) {
turnidge 2015/04/23 17:03:33 Add comment to this function: Canonicalize urls,
Cutch 2015/04/24 00:05:32 Done.
+ var method = uri.path;
+ // Create a map sorted on insertion order.
+ var parameters = new Map();
+ // Sort keys.
+ var sortedKeys = uri.queryParameters.keys.toList();
+ sortedKeys.sort();
+ // Filter keys.
+ if (method == 'getStack') {
+ // Remove the 'full' parameter.
+ sortedKeys.remove('full');
+ }
+ // Insert parameters in sorted order.
+ for (var key in sortedKeys) {
+ parameters[key] = uri.queryParameters[key];
+ }
+ return new Uri(path: method, queryParameters: parameters).toString();
+ }
+
+ /// Force the VM to disconnect.
+ void disconnect() {
+ _onDisconnect.complete(this);
+ }
+
+ // Always connected.
+ Future _onConnect;
+ Future get onConnect {
+ if (_onConnect != null) {
+ return _onConnect;
+ }
+ _onConnect = new Future.value(this);
+ return _onConnect;
+ }
+ // Only complete when requested.
+ Completer _onDisconnect = new Completer();
+ Future get onDisconnect => _onDisconnect.future;
+
+ Future<String> invokeRpcRaw(String method, Map params) {
+ if (params.isEmpty) {
+ params = null;
+ }
+ var key = _canonicalizeUri(new Uri(path: method, queryParameters: params));
+ var response = _responses[key];
+ if (response == null) {
+ return new Future.error(JSON.encode({
+ 'type': 'ServiceException',
+ 'kind': 'NotContainedInResponses',
+ 'key': key
+ }));
+ }
+ return new Future.value(response);
+ }
+}
+
+
/// Snapshot in time of tag counters.
class TagProfileSnapshot {
final double seconds;

Powered by Google App Engine
This is Rietveld 408576698