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

Unified Diff: runtime/observatory/lib/src/elements/timeline_page.dart

Issue 1972523003: Improve Observatory Timeline UI (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « no previous file | runtime/observatory/lib/src/elements/timeline_page.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/observatory/lib/src/elements/timeline_page.dart
diff --git a/runtime/observatory/lib/src/elements/timeline_page.dart b/runtime/observatory/lib/src/elements/timeline_page.dart
index cc66f9a313a51ad08226fee421916a3c44e7bf53..099d81c9e46be2eb9fb6b1b78442d7c5d27414b4 100644
--- a/runtime/observatory/lib/src/elements/timeline_page.dart
+++ b/runtime/observatory/lib/src/elements/timeline_page.dart
@@ -15,15 +15,14 @@ import 'package:polymer/polymer.dart';
@CustomTag('timeline-page')
class TimelinePageElement extends ObservatoryElement {
- TimelinePageElement.created() : super.created();
+ TimelinePageElement.created() : super.created() {
+ }
attached() {
super.attached();
_resizeSubscription = window.onResize.listen((_) => _updateSize());
_updateSize();
- // Click refresh button.
- NavRefreshElement refreshButton = $['refresh'];
- refreshButton.buttonClick(null, null, null);
+ _setupInitialState();
}
detached() {
@@ -50,6 +49,72 @@ class TimelinePageElement extends ObservatoryElement {
return null;
}
+ void _processFlags(ServiceMap response) {
+ // Grab the recorder name.
+ recorderName = response['recorderName'];
+ // Update the set of available streams.
+ _availableStreams.clear();
+ response['availableStreams'].forEach(
+ (String streamName) => _availableStreams.add(streamName));
+ // Update the set of recorded streams.
+ _recordedStreams.clear();
+ response['recordedStreams'].forEach(
+ (String streamName) => _recordedStreams.add(streamName));
+ }
+
+ Future _applyStreamChanges() {
+ return app.vm.invokeRpc('_setVMTimelineFlags', {
+ 'recordedStreams': '[${_recordedStreams.join(', ')}]',
+ });
+ }
+
+ HtmlElement _makeStreamToggle(String streamName) {
+ LabelElement label = new LabelElement();
+ label.style.paddingLeft = '8px';
+ SpanElement span = new SpanElement();
+ span.text = streamName;
+ InputElement checkbox = new InputElement();
+ checkbox.onChange.listen((_) {
+ if (checkbox.checked) {
+ _recordedStreams.add(streamName);
+ } else {
+ _recordedStreams.remove(streamName);
+ }
+ _applyStreamChanges();
+ _updateRecorderUI();
+ });
+ checkbox.type = 'checkbox';
+ checkbox.checked = _recordedStreams.contains(streamName);
+ label.children.add(checkbox);
+ label.children.add(span);
+ return label;
+ }
+
+ void _refreshRecorderUI() {
+ DivElement e = $['streamList'];
+ e.children.clear();
+
+ for (String streamName in _availableStreams) {
+ e.children.add(_makeStreamToggle(streamName));
+ }
+ }
+
+ Future _updateRecorderUI() async {
+ // Grab the current timeline flags.
+ ServiceMap response = await app.vm.invokeRpc('_getVMTimelineFlags', {});
+ assert(response['type'] == 'TimelineFlags');
+ // Process them so we know available streams.
+ _processFlags(response);
+ // Refresh the UI.
+ _refreshRecorderUI();
+ }
+
+ Future _setupInitialState() async {
+ await _updateRecorderUI();
+ // Finally, trigger a reload so we start with the latest timeline.
+ await refresh();
+ }
+
Future refresh() async {
await app.vm.reload();
await app.vm.reloadIsolates();
@@ -61,18 +126,6 @@ class TimelinePageElement extends ObservatoryElement {
return postMessage('clear');
}
- Future recordOn() async {
- return app.vm.invokeRpc('_setVMTimelineFlags', {
- 'recordedStreams': ['all'],
- });
- }
-
- Future recordOff() async {
- return app.vm.invokeRpc('_setVMTimelineFlags', {
- 'recordedStreams': [],
- });
- }
-
Future saveTimeline() async {
return postMessage('save');
}
@@ -93,4 +146,7 @@ class TimelinePageElement extends ObservatoryElement {
StreamSubscription _resizeSubscription;
+ @observable String recorderName;
+ final Set<String> _availableStreams = new Set<String>();
+ final Set<String> _recordedStreams = new Set<String>();
}
« no previous file with comments | « no previous file | runtime/observatory/lib/src/elements/timeline_page.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698