| Index: runtime/bin/vmservice/observatory/lib/src/app/application.dart
|
| diff --git a/runtime/bin/vmservice/observatory/lib/src/app/application.dart b/runtime/bin/vmservice/observatory/lib/src/app/application.dart
|
| deleted file mode 100644
|
| index 54a01181dd24724d14decba0a3cecf99cc5d6180..0000000000000000000000000000000000000000
|
| --- a/runtime/bin/vmservice/observatory/lib/src/app/application.dart
|
| +++ /dev/null
|
| @@ -1,227 +0,0 @@
|
| -// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -part of app;
|
| -
|
| -/// The observatory application. Instances of this are created and owned
|
| -/// by the observatory_application custom element.
|
| -class ObservatoryApplication extends Observable {
|
| - static ObservatoryApplication app;
|
| - final _pageRegistry = new List<Page>();
|
| - @observable Page currentPage;
|
| - @observable final LocationManager locationManager;
|
| - VM _vm;
|
| - VM get vm => _vm;
|
| - set vm(VM vm) {
|
| - if (_vm == vm) {
|
| - // Do nothing.
|
| - return;
|
| - }
|
| - if (_vm != null) {
|
| - // Disconnect from current VM.
|
| - notifications.clear();
|
| - _vm.disconnect();
|
| - }
|
| - if (vm != null) {
|
| - Logger.root.info('Registering new VM callbacks');
|
| - vm.onConnect.then(_vmConnected);
|
| - vm.onDisconnect.then(_vmDisconnected);
|
| - vm.errors.stream.listen(_onError);
|
| - vm.events.stream.listen(_onEvent);
|
| - vm.exceptions.stream.listen(_onException);
|
| - }
|
| - _vm = vm;
|
| - }
|
| - final TargetManager targets;
|
| - @reflectable final ObservatoryApplicationElement rootElement;
|
| -
|
| - TraceViewElement _traceView = null;
|
| -
|
| - @reflectable ServiceObject lastErrorOrException;
|
| - @observable ObservableList<ServiceEvent> notifications =
|
| - new ObservableList<ServiceEvent>();
|
| -
|
| - void _initOnce(bool chromium) {
|
| - assert(app == null);
|
| - app = this;
|
| - _registerPages();
|
| - locationManager._init(this);
|
| - }
|
| -
|
| - void removePauseEvents(Isolate isolate) {
|
| - bool isPauseEvent(var event) {
|
| - return (event.eventType == 'IsolateInterrupted' ||
|
| - event.eventType == 'BreakpointReached' ||
|
| - event.eventType == 'ExceptionThrown');
|
| - }
|
| -
|
| - notifications.removeWhere((oldEvent) {
|
| - return (oldEvent.isolate == isolate &&
|
| - isPauseEvent(oldEvent));
|
| - });
|
| - }
|
| -
|
| - void _onEvent(ServiceEvent event) {
|
| - switch(event.eventType) {
|
| - case 'IsolateCreated':
|
| - // vm.reload();
|
| - break;
|
| -
|
| - case 'IsolateShutdown':
|
| - // TODO(turnidge): Should we show the user isolate shutdown events?
|
| - // What if there are hundreds of them? Coalesce multiple
|
| - // shutdown events into one notification?
|
| - removePauseEvents(event.isolate);
|
| - // vm.reload();
|
| - break;
|
| -
|
| - case 'BreakpointResolved':
|
| - event.isolate.reloadBreakpoints();
|
| - break;
|
| -
|
| - case 'BreakpointReached':
|
| - case 'IsolateInterrupted':
|
| - case 'ExceptionThrown':
|
| - removePauseEvents(event.isolate);
|
| - notifications.add(event);
|
| - break;
|
| -
|
| -
|
| - case 'GC':
|
| - // Ignore GC events for now.
|
| - break;
|
| -
|
| - default:
|
| - // Ignore unrecognized events.
|
| - Logger.root.severe('Unrecognized event: $event');
|
| - break;
|
| - }
|
| - }
|
| -
|
| - void _registerPages() {
|
| - _pageRegistry.add(new ClassTreePage(this));
|
| - _pageRegistry.add(new DebuggerPage(this));
|
| - _pageRegistry.add(new VMConnectPage(this));
|
| - _pageRegistry.add(new ErrorViewPage(this));
|
| - _pageRegistry.add(new MetricsPage(this));
|
| - // Note that ServiceObjectPage must be the last entry in the list as it is
|
| - // the catch all.
|
| - _pageRegistry.add(new ServiceObjectPage(this));
|
| - }
|
| -
|
| - void _onError(ServiceError error) {
|
| - lastErrorOrException = error;
|
| - _visit('error/', null);
|
| - }
|
| -
|
| - void _onException(ServiceException exception) {
|
| - lastErrorOrException = exception;
|
| - if (exception.kind == 'NetworkException') {
|
| - // Got a network exception, visit the vm-connect page.
|
| - this.vm = null;
|
| - locationManager.go(locationManager.makeLink('/vm-connect/'));
|
| - } else {
|
| - _visit('error/', null);
|
| - }
|
| - }
|
| -
|
| - void _visit(String url, String args) {
|
| - var argsMap;
|
| - if (args == null) {
|
| - argsMap = {};
|
| - } else {
|
| - argsMap = Uri.splitQueryString(args);
|
| - }
|
| - if (argsMap['trace'] != null) {
|
| - var traceArg = argsMap['trace'];
|
| - if (traceArg == 'on') {
|
| - Tracer.start();
|
| - } else if (traceArg == 'off') {
|
| - Tracer.stop();
|
| - }
|
| - }
|
| - if (Tracer.current != null) {
|
| - Tracer.current.reset();
|
| - }
|
| - if (_traceView != null) {
|
| - _traceView.tracer = Tracer.current;
|
| - }
|
| - for (var i = 0; i < _pageRegistry.length; i++) {
|
| - var page = _pageRegistry[i];
|
| - if (page.canVisit(url)) {
|
| - _installPage(page);
|
| - page.visit(url, argsMap);
|
| - return;
|
| - }
|
| - }
|
| - throw new FallThroughError();
|
| - }
|
| -
|
| - /// Set the Observatory application page.
|
| - void _installPage(Page page) {
|
| - assert(page != null);
|
| - if (currentPage == page) {
|
| - // Already isntalled.
|
| - return;
|
| - }
|
| - if (currentPage != null) {
|
| - Logger.root.info('Uninstalling page: $currentPage');
|
| - currentPage.onUninstall();
|
| - // Clear children.
|
| - rootElement.children.clear();
|
| - }
|
| - Logger.root.info('Installing page: $page');
|
| - try {
|
| - page.onInstall();
|
| - } catch (e) {
|
| - Logger.root.severe('Failed to install page: $e');
|
| - }
|
| - // Add new page.
|
| - rootElement.children.add(page.element);
|
| -
|
| - // Add tracing support.
|
| - _traceView = new Element.tag('trace-view');
|
| - _traceView.tracer = Tracer.current;
|
| - rootElement.children.add(_traceView);
|
| -
|
| - // Remember page.
|
| - currentPage = page;
|
| - }
|
| -
|
| - ObservatoryApplication.devtools(this.rootElement) :
|
| - locationManager = new HashLocationManager(),
|
| - targets = null {
|
| - vm = new PostMessageVM();
|
| - _initOnce(true);
|
| - }
|
| -
|
| - ObservatoryApplication(this.rootElement) :
|
| - locationManager = new HashLocationManager(),
|
| - targets = new TargetManager() {
|
| - vm = new WebSocketVM(targets.defaultTarget);
|
| - _initOnce(false);
|
| - }
|
| -
|
| - void _removeDisconnectEvents() {
|
| - notifications.removeWhere((oldEvent) {
|
| - return (oldEvent.eventType == 'VMDisconnected');
|
| - });
|
| - }
|
| -
|
| - _vmConnected(VM vm) {
|
| - if (vm is WebSocketVM) {
|
| - targets.add(vm.target);
|
| - }
|
| - _removeDisconnectEvents();
|
| - }
|
| -
|
| - _vmDisconnected(VM vm) {
|
| - if (this.vm != vm) {
|
| - // This disconnect event occured *after* a new VM was installed.
|
| - return;
|
| - }
|
| - this.vm = null;
|
| - notifications.add(new ServiceEvent.vmDisconencted());
|
| - }
|
| -}
|
|
|