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

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

Issue 2211603002: Centralized event streams (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Merged with master 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 IsolateRef, IsolateUpdateEvent; 8 show IsolateRef, 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 NavIsolateMenuElement extends HtmlElement implements Renderable { 15 class NavIsolateMenuElement extends HtmlElement implements Renderable {
16 static const tag = const Tag<NavIsolateMenuElement>('nav-isolate-menu', 16 static const tag = const Tag<NavIsolateMenuElement>('nav-isolate-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<NavIsolateMenuElement>> get onRendered => _r.onRendered; 22 Stream<RenderedEvent<NavIsolateMenuElement>> get onRendered => _r.onRendered;
23 23
24 Stream<M.IsolateUpdateEvent> _updates; 24 bool _last;
25 M.IsolateRef _isolate;
26 M.EventRepository _events;
25 StreamSubscription _updatesSubscription; 27 StreamSubscription _updatesSubscription;
26 28
27 bool _last;
28 M.IsolateRef _isolate;
29 bool get last => _last; 29 bool get last => _last;
30 M.IsolateRef get isolate => _isolate; 30 M.IsolateRef get isolate => _isolate;
31
31 set last(bool value) => _last = _r.checkAndReact(_last, value); 32 set last(bool value) => _last = _r.checkAndReact(_last, value);
32 33
33 factory NavIsolateMenuElement(M.IsolateRef isolate, 34 factory NavIsolateMenuElement(M.IsolateRef isolate,
34 Stream<M.IsolateUpdateEvent> updates, {bool last: false, 35 M.EventRepository events, {bool last: false,
35 RenderingQueue queue}) { 36 RenderingQueue queue}) {
36 assert(isolate != null); 37 assert(isolate != null);
38 assert(events != null);
37 assert(last != null); 39 assert(last != null);
38 NavIsolateMenuElement e = document.createElement(tag.name); 40 NavIsolateMenuElement e = document.createElement(tag.name);
39 e._r = new RenderingScheduler(e, queue: queue); 41 e._r = new RenderingScheduler(e, queue: queue);
40 e._isolate = isolate; 42 e._isolate = isolate;
41 e._last = last; 43 e._last = last;
42 e._updates = updates; 44 e._events = events;
43 return e; 45 return e;
44 } 46 }
45 47
46 NavIsolateMenuElement.created() : super.created() { 48 NavIsolateMenuElement.created() : super.created() {
47 _r = new RenderingScheduler(this); 49 _r = new RenderingScheduler(this);
48 createShadowRoot(); 50 createShadowRoot();
49 } 51 }
50 52
51 @override 53 @override
52 void attached() { 54 void attached() {
53 super.attached(); 55 super.attached();
54 assert(_isolate != null); 56 _updatesSubscription = _events.onIsolateUpdate
55 assert(_updates != null); 57 .where((e) => e.isolate.id == isolate.id)
58 .listen((e) { _isolate = e.isolate; _r.dirty(); });
56 _r.enable(); 59 _r.enable();
57 _updatesSubscription = _updates
58 .where((M.IsolateUpdateEvent e) => e.isolate.id == isolate.id)
59 .listen((M.IsolateUpdateEvent e) { _isolate = e.isolate; _r.dirty(); });
60 } 60 }
61 61
62 @override 62 @override
63 void detached() { 63 void detached() {
64 super.detached(); 64 super.detached();
65 _r.disable(notify: true); 65 _r.disable(notify: true);
66 shadowRoot.children = []; 66 shadowRoot.children = [];
67 assert(_updatesSubscription != null); 67 assert(_updatesSubscription != null);
68 _updatesSubscription.cancel(); 68 _updatesSubscription.cancel();
69 _updatesSubscription = null; 69 _updatesSubscription = null;
(...skipping 24 matching lines...) Expand all
94 link: Uris.persistentHandles(isolate)), 94 link: Uris.persistentHandles(isolate)),
95 new NavMenuItemElement('ports', queue: _r.queue, 95 new NavMenuItemElement('ports', queue: _r.queue,
96 link: Uris.ports(isolate)), 96 link: Uris.ports(isolate)),
97 new NavMenuItemElement('logging', queue: _r.queue, 97 new NavMenuItemElement('logging', queue: _r.queue,
98 link: Uris.logging(isolate)), 98 link: Uris.logging(isolate)),
99 new ContentElement() 99 new ContentElement()
100 ] 100 ]
101 ]; 101 ];
102 } 102 }
103 } 103 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698