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

Side by Side Diff: runtime/observatory/lib/src/elements/nav/vm_menu.dart

Issue 2211603002: Centralized event streams (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Updated observatory_sources Created 4 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:html'; 5 import 'dart:html';
6 import 'dart:async'; 6 import 'dart:async';
7 import 'package:observatory/models.dart' as M 7 import 'package:observatory/models.dart' as M
8 show VM, IsolateRef, Target, VMUpdateEvent; 8 show VM, EventRepository;
9 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; 9 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
10 import 'package:observatory/src/elements/helpers/tag.dart'; 10 import 'package:observatory/src/elements/helpers/tag.dart';
11 import 'package:observatory/src/elements/helpers/uris.dart'; 11 import 'package:observatory/src/elements/helpers/uris.dart';
12 import 'package:observatory/src/elements/nav/menu.dart'; 12 import 'package:observatory/src/elements/nav/menu.dart';
13 import 'package:observatory/src/elements/nav/menu_item.dart'; 13 import 'package:observatory/src/elements/nav/menu_item.dart';
14 14
15 class NavVMMenuElement extends HtmlElement implements Renderable { 15 class NavVMMenuElement extends HtmlElement implements Renderable {
16 static const tag = const Tag<NavVMMenuElement>('nav-vm-menu', 16 static const tag = const Tag<NavVMMenuElement>('nav-vm-menu',
17 dependencies: const [NavMenuElement.tag, 17 dependencies: const [NavMenuElement.tag,
18 NavMenuItemElement.tag]); 18 NavMenuItemElement.tag]);
19 19
20 RenderingScheduler _r; 20 RenderingScheduler _r;
21 21
22 Stream<RenderedEvent<NavVMMenuElement>> get onRendered => _r.onRendered; 22 Stream<RenderedEvent<NavVMMenuElement>> get onRendered => _r.onRendered;
23 23
24 Stream<M.VMUpdateEvent> _updates; 24
25 StreamSubscription _updatesSubscription;
26 25
27 bool _last; 26 bool _last;
28 M.VM _vm; 27 M.VM _vm;
29 M.Target _target; 28 M.EventRepository _events;
29 StreamSubscription _updatesSubscription;
30
31
30 bool get last => _last; 32 bool get last => _last;
31 M.VM get vm => _vm; 33 M.VM get vm => _vm;
32 M.Target get target => _target; 34
33 set last(bool value) => _last = _r.checkAndReact(_last, value); 35 set last(bool value) => _last = _r.checkAndReact(_last, value);
34 36
35 factory NavVMMenuElement(M.VM vm, Stream<M.VMUpdateEvent> updates, 37 factory NavVMMenuElement(M.VM vm, M.EventRepository events, {bool last: false,
36 {bool last: false, M.Target target, RenderingQueue queue}) { 38 RenderingQueue queue}) {
37 assert(vm != null); 39 assert(vm != null);
38 assert(updates != null); 40 assert(events != null);
39 assert(last != null); 41 assert(last != null);
40 NavVMMenuElement e = document.createElement(tag.name); 42 NavVMMenuElement e = document.createElement(tag.name);
41 e._r = new RenderingScheduler(e, queue: queue); 43 e._r = new RenderingScheduler(e, queue: queue);
42 e._vm = vm; 44 e._vm = vm;
43 e._updates = updates; 45 e._events = events;
44 e._last = last; 46 e._last = last;
45 e._target = target;
46 return e; 47 return e;
47 } 48 }
48 49
49 NavVMMenuElement.created() : super.created() { createShadowRoot(); } 50 NavVMMenuElement.created() : super.created() { createShadowRoot(); }
50 51
51 @override 52 @override
52 void attached() { 53 void attached() {
53 super.attached(); 54 super.attached();
54 _r.enable(); 55 _r.enable();
55 _updatesSubscription = _updates 56 _updatesSubscription = _events.onVMUpdate
56 .listen((M.VMUpdateEvent e) { _vm = e.vm; _r.dirty(); }); 57 .listen((e) { _vm = e.vm; _r.dirty(); });
57 } 58 }
58 59
59 @override 60 @override
60 void detached() { 61 void detached() {
61 super.detached(); 62 super.detached();
62 _r.disable(notify: true); 63 _r.disable(notify: true);
63 shadowRoot.children = []; 64 shadowRoot.children = [];
64 assert(_updatesSubscription != null);
65 _updatesSubscription.cancel(); 65 _updatesSubscription.cancel();
66 _updatesSubscription = null;
67 } 66 }
68 67
69 void render() { 68 void render() {
70 final String name = (target == null) ? vm.name
71 : '${vm.name}@${target.name}';
72 /// TODO(cbernaschina) use the isolate repository.
73 shadowRoot.children = [ 69 shadowRoot.children = [
74 new NavMenuElement(name, link: Uris.vm(), last: last, queue: _r.queue) 70 new NavMenuElement(vm.displayName, link: Uris.vm(), last: last,
71 queue: _r.queue)
75 ..children = ( 72 ..children = (
76 _vm.isolates.map((M.IsolateRef isolate) { 73 _vm.isolates.map((isolate) {
77 return new NavMenuItemElement(isolate.name, queue: _r.queue, 74 return new NavMenuItemElement(isolate.name, queue: _r.queue,
78 link: Uris.inspect(isolate)); 75 link: Uris.inspect(isolate));
79 }).toList() 76 }).toList()
80 ..add(new ContentElement()) 77 ..add(new ContentElement())
81 ) 78 )
82 ]; 79 ];
83 } 80 }
84 } 81 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698