Skip to content

Commit

Permalink
Centralized event streams
Browse files Browse the repository at this point in the history
R=turnidge@google.com

Review URL: https://codereview.chromium.org/2211603002 .
  • Loading branch information
B3rn475 committed Aug 5, 2016
1 parent 70bd623 commit ba0f803
Show file tree
Hide file tree
Showing 126 changed files with 1,361 additions and 838 deletions.
2 changes: 1 addition & 1 deletion runtime/observatory/lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import 'dart:math' as math;
import 'package:logging/logging.dart';
import 'package:observatory/service_html.dart';
import 'package:observatory/elements.dart';
import 'package:observatory/mocks.dart';
import 'package:observatory/models.dart' as M;
import 'package:observatory/repositories.dart';
import 'package:observatory/tracer.dart';
Expand All @@ -23,6 +22,7 @@ import 'package:usage/usage_html.dart';
export 'package:observatory/utils.dart';

part 'src/app/application.dart';
part 'src/app/event.dart';
part 'src/app/location_manager.dart';
part 'src/app/notification.dart';
part 'src/app/page.dart';
Expand Down
31 changes: 0 additions & 31 deletions runtime/observatory/lib/mocks.dart

This file was deleted.

2 changes: 1 addition & 1 deletion runtime/observatory/lib/models.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ part 'src/models/objects/timeline_event.dart';
part 'src/models/objects/vm.dart';

part 'src/models/repository.dart';
part 'src/models/repositories/crash_dump.dart';
part 'src/models/repositories/event.dart';
part 'src/models/repositories/flag.dart';
part 'src/models/repositories/notification.dart';
part 'src/models/repositories/script.dart';
Expand Down
1 change: 1 addition & 0 deletions runtime/observatory/lib/repositories.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'package:observatory/service_common.dart' as SC;
import 'package:observatory/utils.dart';

part 'src/repositories/flag.dart';
part 'src/repositories/event.dart';
part 'src/repositories/notification.dart';
part 'src/repositories/script.dart';
part 'src/repositories/settings.dart';
Expand Down
2 changes: 2 additions & 0 deletions runtime/observatory/lib/service_common.dart
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ abstract class CommonWebSocketVM extends VM {
bool _hasFinishedConnect = false;
Utf8Decoder _utf8Decoder = const Utf8Decoder();

String get displayName => '${name}@${target.name}';

CommonWebSocket _webSocket;

CommonWebSocketVM(this.target, this._webSocket) {
Expand Down
90 changes: 72 additions & 18 deletions runtime/observatory/lib/src/app/application.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class ObservatoryApplication extends Observable {
static ObservatoryApplication app;
final RenderingQueue queue = new RenderingQueue();
final TargetRepository targets = new TargetRepository();
final EventRepository events = new EventRepository();
final NotificationRepository notifications = new NotificationRepository();
final _pageRegistry = new List<Page>();
LocationManager _locationManager;
Expand Down Expand Up @@ -40,11 +41,11 @@ class ObservatoryApplication extends Observable {
// This disconnect event occured *after* a new VM was installed.
return;
}
notifications.add(
new EventNotification.fromServiceEvent(
new ServiceEvent.connectionClosed(reason)));
events.add(new ConnectionClosedEvent(new DateTime.now(), reason));
});

// TODO(cbernaschina) smart connection of streams in the events object.
vm.listenEventStream(VM.kVMStream, _onEvent);
vm.listenEventStream(VM.kIsolateStream, _onEvent);
vm.listenEventStream(VM.kDebugStream, _onEvent);
}
Expand All @@ -65,48 +66,84 @@ class ObservatoryApplication extends Observable {
locationManager._visit();
}

void _deletePauseEvents(e) {
notifications.deletePauseEvents(isolate: e.isolate);
}
void _addNotification(M.Event e) {
notifications.add(new EventNotification(e));
}

void _onEvent(ServiceEvent event) {
assert(event.kind != ServiceEvent.kNone);

M.Event e;

switch(event.kind) {
case ServiceEvent.kVMUpdate:
e = new VMUpdateEvent(event.timestamp, event.vm);
break;
case ServiceEvent.kIsolateStart:
e = new IsolateStartEvent(event.timestamp, event.isolate);
break;
case ServiceEvent.kIsolateRunnable:
e = new IsolateRunnableEvent(event.timestamp, event.isolate);
break;
case ServiceEvent.kIsolateUpdate:
e = new IsolateUpdateEvent(event.timestamp, event.isolate);
break;
case ServiceEvent.kIsolateReload:
e = new IsolateReloadEvent(event.timestamp, event.isolate, event.error);
break;
case ServiceEvent.kIsolateExit:
e = new IsolateExitEvent(event.timestamp, event.isolate);
break;
case ServiceEvent.kBreakpointAdded:
e = new BreakpointAddedEvent(event.timestamp, event.isolate,
event.breakpoint);
break;
case ServiceEvent.kBreakpointResolved:
e = new BreakpointResolvedEvent(event.timestamp, event.isolate,
event.breakpoint);
break;
case ServiceEvent.kBreakpointRemoved:
case ServiceEvent.kDebuggerSettingsUpdate:
// Ignore for now.
e = new BreakpointRemovedEvent(event.timestamp, event.isolate,
event.breakpoint);
break;

case ServiceEvent.kIsolateReload:
notifications.add(new EventNotification.fromServiceEvent(event));
case ServiceEvent.kDebuggerSettingsUpdate:
e = new DebuggerSettingsUpdateEvent(event.timestamp, event.isolate);
break;

case ServiceEvent.kIsolateExit:
case ServiceEvent.kResume:
notifications.deletePauseEvents(isolate: event.isolate);
e = new ResumeEvent(event.timestamp, event.isolate, event.topFrame);
break;

case ServiceEvent.kPauseStart:
e = new PauseStartEvent(event.timestamp, event.isolate);
break;
case ServiceEvent.kPauseExit:
e = new PauseExitEvent(event.timestamp, event.isolate);
break;
case ServiceEvent.kPauseBreakpoint:
e = new PauseBreakpointEvent(event.timestamp, event.isolate,
event.pauseBreakpoints, event.topFrame, event.atAsyncSuspension,
event.breakpoint);
break;
case ServiceEvent.kPauseInterrupted:
e = new PauseInterruptedEvent(event.timestamp, event.isolate,
event.topFrame, event.atAsyncSuspension);
break;
case ServiceEvent.kPauseException:
notifications.deletePauseEvents(isolate: event.isolate);
notifications.add(new EventNotification.fromServiceEvent(event));
e = new PauseExceptionEvent(event.timestamp, event.isolate,
event.topFrame, event.exception);
break;

case ServiceEvent.kInspect:
notifications.add(new EventNotification.fromServiceEvent(event));
e = new InspectEvent(event.timestamp, event.isolate,
event.inspectee);
break;

default:
// Ignore unrecognized events.
Logger.root.severe('Unrecognized event: $event');
break;
return;
}
events.add(e);
}

void _registerPages() {
Expand Down Expand Up @@ -201,6 +238,23 @@ class ObservatoryApplication extends Observable {
});
_setVM(new WebSocketVM(targets.current));
_initOnce();

// delete pause events.
events.onIsolateExit.listen(_deletePauseEvents);
events.onResume.listen(_deletePauseEvents);
events.onPauseStart.listen(_deletePauseEvents);
events.onPauseExit.listen(_deletePauseEvents);
events.onPauseBreakpoint.listen(_deletePauseEvents);
events.onPauseInterrupted.listen(_deletePauseEvents);
events.onPauseException.listen(_deletePauseEvents);

// show notification for an event.
events.onIsolateReload.listen(_addNotification);
events.onPauseExit.listen(_addNotification);
events.onPauseBreakpoint.listen(_addNotification);
events.onPauseInterrupted.listen(_addNotification);
events.onPauseException.listen(_addNotification);
events.onInspect.listen(_addNotification);
}

loadCrashDump(Map crashDump) {
Expand Down
Loading

0 comments on commit ba0f803

Please sign in to comment.