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

Unified Diff: runtime/observatory/lib/src/app/page.dart

Issue 897193002: Finish moving service protocol to json rpc. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 5 years, 10 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/app/page.dart
diff --git a/runtime/observatory/lib/src/app/page.dart b/runtime/observatory/lib/src/app/page.dart
index 2942905e98bee4e17e776d2fec3193af08c2bd39..c77757950197eee564a47bbcf9d680a987ec71e9 100644
--- a/runtime/observatory/lib/src/app/page.dart
+++ b/runtime/observatory/lib/src/app/page.dart
@@ -26,88 +26,143 @@ abstract class Page extends Observable {
element = null;
}
- /// Called when the page should update its state based on [url].
+ /// Called when the page should update its state based on [uri].
/// NOTE: Only called when the page is installed.
- void visit(String url, Map argsMap) {
+ void visit(Uri uri, Map argsMap) {
args = toObservable(argsMap);
- _visit(url);
+ _visit(uri);
}
// Overridden by subclasses.
- void _visit(String url);
+ void _visit(Uri uri);
- /// Called to test whether this page can visit [url].
- bool canVisit(String url);
+ /// Called to test whether this page can visit [uri].
+ bool canVisit(Uri uri);
}
-/// A general service object viewer.
-class ServiceObjectPage extends Page {
- ServiceObjectPage(app) : super(app);
+/// A [SimplePage] matches a single uri path and displays a single element.
+class SimplePage extends Page {
+ final String path;
+ final String elementTagName;
+ SimplePage(this.path, this.elementTagName, app) : super(app);
void onInstall() {
if (element == null) {
- /// Lazily create page.
- element = new Element.tag('service-view');
+ element = new Element.tag(elementTagName);
}
}
- void _visit(String url) {
+ void _visit(Uri uri) {
+ assert(uri != null);
+ assert(canVisit(uri));
+ }
+
+ Future<Isolate> getIsolate(Uri uri) {
+ return app.vm.getIsolate(uri.queryParameters['isolateId']).catchError((e) {
+ Logger.root.severe('$path visit error: $e');
+ return e;
+ });
+ }
+
+ bool canVisit(Uri uri) => uri.path == path;
+}
+
+/// Error page for unrecognized paths.
+class ErrorPage extends Page {
+ ErrorPage(app) : super(app);
+
+ void onInstall() {
+ if (element == null) {
+ // Lazily create page.
+ element = new Element.tag('general-error');
+ }
+ }
+
+ void _visit(Uri uri) {
assert(element != null);
- assert(canVisit(url));
- if (url == '') {
+ assert(canVisit(uri));
+
+ /*
+ if (uri.path == '') {
// Nothing requested.
return;
}
- /// Request url from VM and display it.
- app.vm.getDeprecated(url).then((obj) {
- ServiceObjectViewElement serviceElement = element;
- serviceElement.object = obj;
- }).catchError((e) {
- Logger.root.severe('ServiceObjectPage visit error: $e');
- });
+ */
+
+ if (element != null) {
+ GeneralErrorElement serviceElement = element;
+ serviceElement.message = "Path '${uri.path}' not found";
+ }
}
/// Catch all.
- bool canVisit(String url) => true;
+ bool canVisit(Uri uri) => true;
}
-class IsolateSuffixPage extends Page {
- final String pagePrefix;
- final String elementTagName;
- String _isolateId;
- String get isolateId => _isolateId;
- IsolateSuffixPage(this.pagePrefix, this.elementTagName, app) : super(app);
+/// Top-level vm info page.
+class VMPage extends SimplePage {
+ VMPage(app) : super('vm', 'service-view', app);
- void onInstall() {
- if (element == null) {
- element = new Element.tag(elementTagName);
- }
+ void _visit(Uri uri) {
+ super._visit(uri);
+ app.vm.reload().then((vm) {
+ if (element != null) {
+ ServiceObjectViewElement serviceElement = element;
+ serviceElement.object = vm;
+ }
+ }).catchError((e) {
+ Logger.root.severe('VMPage visit error: $e');
+ });
}
+}
- void _visit(String url) {
- assert(url != null);
- assert(canVisit(url));
- _isolateId = url.substring(pagePrefix.length);
+class FlagsPage extends SimplePage {
+ FlagsPage(app) : super('flags', 'flag-list', app);
+
+ void _visit(Uri uri) {
+ super._visit(uri);
+ app.vm.getFlagList().then((flags) {
+ if (element != null) {
+ FlagListElement serviceElement = element;
+ serviceElement.flagList = flags;
+ }
+ }).catchError((e) {
+ Logger.root.severe('FlagsPage visit error: $e');
+ });
}
+}
- Future<Isolate> getIsolate() {
- return app.vm.getIsolate(isolateId).catchError((e) {
- Logger.root.severe('$pagePrefix visit error: $e');
- return e;
+class InspectPage extends SimplePage {
+ InspectPage(app) : super('inspect', 'service-view', app);
+
+ void _visit(Uri uri) {
+ super._visit(uri);
+ getIsolate(uri).then((isolate) {
+ var objectId = uri.queryParameters['objectId'];
+ if (objectId == null) {
+ isolate.reload().then(_visitObject);
+ } else {
+ isolate.getObject(objectId).then(_visitObject);
+ }
});
}
- bool canVisit(String url) => url.startsWith(pagePrefix);
+ void _visitObject(obj) {
+ if (element != null) {
+ ServiceObjectViewElement serviceElement = element;
+ serviceElement.object = obj;
+ }
+ }
}
/// Class tree page.
-class ClassTreePage extends IsolateSuffixPage {
- ClassTreePage(app) : super('class-tree/', 'class-tree', app);
+class ClassTreePage extends SimplePage {
+ ClassTreePage(app) : super('class-tree', 'class-tree', app);
- void _visit(String url) {
- super._visit(url);
- getIsolate().then((isolate) {
+ void _visit(Uri uri) {
+ super._visit(uri);
+ getIsolate(uri).then((isolate) {
if (element != null) {
/// Update the page.
ClassTreeElement page = element;
@@ -117,12 +172,12 @@ class ClassTreePage extends IsolateSuffixPage {
}
}
-class DebuggerPage extends IsolateSuffixPage {
- DebuggerPage(app) : super('debugger/', 'debugger-page', app);
+class DebuggerPage extends SimplePage {
+ DebuggerPage(app) : super('debugger', 'debugger-page', app);
- void _visit(String url) {
- super._visit(url);
- getIsolate().then((isolate) {
+ void _visit(Uri uri) {
+ super._visit(uri);
+ getIsolate(uri).then((isolate) {
if (element != null) {
/// Update the page.
DebuggerPageElement page = element;
@@ -132,12 +187,12 @@ class DebuggerPage extends IsolateSuffixPage {
}
}
-class CpuProfilerPage extends IsolateSuffixPage {
- CpuProfilerPage(app) : super('profiler/', 'cpu-profile', app);
+class CpuProfilerPage extends SimplePage {
+ CpuProfilerPage(app) : super('profiler', 'cpu-profile', app);
- void _visit(String url) {
- super._visit(url);
- getIsolate().then((isolate) {
+ void _visit(Uri uri) {
+ super._visit(uri);
+ getIsolate(uri).then((isolate) {
if (element != null) {
/// Update the page.
CpuProfileElement page = element;
@@ -147,13 +202,13 @@ class CpuProfilerPage extends IsolateSuffixPage {
}
}
-class AllocationProfilerPage extends IsolateSuffixPage {
+class AllocationProfilerPage extends SimplePage {
AllocationProfilerPage(app)
- : super('allocation-profiler/', 'heap-profile', app);
+ : super('allocation-profiler', 'heap-profile', app);
- void _visit(String url) {
- super._visit(url);
- getIsolate().then((isolate) {
+ void _visit(Uri uri) {
+ super._visit(uri);
+ getIsolate(uri).then((isolate) {
if (element != null) {
/// Update the page.
HeapProfileElement page = element;
@@ -163,12 +218,12 @@ class AllocationProfilerPage extends IsolateSuffixPage {
}
}
-class HeapMapPage extends IsolateSuffixPage {
- HeapMapPage(app) : super('heap-map/', 'heap-map', app);
+class HeapMapPage extends SimplePage {
+ HeapMapPage(app) : super('heap-map', 'heap-map', app);
- void _visit(String url) {
- super._visit(url);
- getIsolate().then((isolate) {
+ void _visit(Uri uri) {
+ super._visit(uri);
+ getIsolate(uri).then((isolate) {
if (element != null) {
/// Update the page.
HeapMapElement page = element;
@@ -188,13 +243,14 @@ class ErrorViewPage extends Page {
}
}
- void _visit(String url) {
+ void _visit(Uri uri) {
assert(element != null);
- assert(canVisit(url));
+ assert(canVisit(uri));
(element as ServiceObjectViewElement).object = app.lastErrorOrException;
}
- bool canVisit(String url) => url.startsWith('error/');
+ // TODO(turnidge): How to test this page?
+ bool canVisit(Uri uri) => uri.path.startsWith('error/');
}
class VMConnectPage extends Page {
@@ -207,18 +263,16 @@ class VMConnectPage extends Page {
assert(element != null);
}
- void _visit(String url) {
+ void _visit(Uri uri) {
assert(element != null);
- assert(canVisit(url));
+ assert(canVisit(uri));
}
- bool canVisit(String url) => url.startsWith('vm-connect/');
+ // TODO(turnidge): Update this to not have the trailing slash.
+ bool canVisit(Uri uri) => uri.path.startsWith('vm-connect/');
}
class MetricsPage extends Page {
- static RegExp _matcher = new RegExp(r'isolates/.*/metrics');
- static RegExp _isolateMatcher = new RegExp(r'isolates/.*/');
-
// Page state, retained as long as ObservatoryApplication.
String selectedMetricId;
@@ -266,20 +320,13 @@ class MetricsPage extends Page {
throw new FallThroughError();
}
- String _isolateId(String url) {
- // Grab isolate prefix.
- String isolateId = _isolateMatcher.stringMatch(url);
- // Remove the trailing slash.
- return isolateId.substring(0, isolateId.length - 1);
- }
-
- void _visit(String url) {
+ void _visit(Uri uri) {
assert(element != null);
- assert(canVisit(url));
- app.vm.getIsolate(_isolateId(url)).then((i) {
+ assert(canVisit(uri));
+ app.vm.getIsolate(uri.queryParameters['isolateId']).then((i) {
(element as MetricsPageElement).isolate = i;
});
}
- bool canVisit(String url) => _matcher.hasMatch(url);
+ bool canVisit(Uri uri) => uri.path == 'metrics';
}
« no previous file with comments | « runtime/observatory/lib/src/app/application.dart ('k') | runtime/observatory/lib/src/elements/breakpoint_list.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698