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

Side by Side Diff: runtime/observatory/lib/src/elements/helpers/rendering_scheduler.dart

Issue 2995923002: Restore "Speedup Observatory elements first time rendering" (Closed)
Patch Set: Created 3 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:async'; 5 import 'dart:async';
6 6
7 import 'package:observatory/src/elements/helpers/rendering_queue.dart'; 7 import 'package:observatory/src/elements/helpers/rendering_queue.dart';
8 export 'package:observatory/src/elements/helpers/rendering_queue.dart'; 8 export 'package:observatory/src/elements/helpers/rendering_queue.dart';
9 9
10 /// A generic renderable object. 10 /// A generic renderable object.
(...skipping 14 matching lines...) Expand all
25 assert(otherRenderScheduled != null); 25 assert(otherRenderScheduled != null);
26 } 26 }
27 } 27 }
28 28
29 /// Scheduler for rendering operations. 29 /// Scheduler for rendering operations.
30 class RenderingScheduler<T extends Renderable> implements RenderingTask { 30 class RenderingScheduler<T extends Renderable> implements RenderingTask {
31 bool _enabled = false; 31 bool _enabled = false;
32 bool _dirty = false; 32 bool _dirty = false;
33 bool _renderingScheduled = false; 33 bool _renderingScheduled = false;
34 bool _notificationScheduled = false; 34 bool _notificationScheduled = false;
35 bool _waitForBarrier = false;
35 36
36 /// Element managed by this scheduler. 37 /// Element managed by this scheduler.
37 final T element; 38 final T element;
38 39
39 /// Queue used for rendering operations. 40 /// Queue used for rendering operations.
40 final RenderingQueue queue; 41 final RenderingQueue queue;
41 42
42 final List<Future> _wait = <Future>[]; 43 final List<Future> _wait = <Future>[];
43 44
44 /// Does the element need a new rendering cycle. 45 /// Does the element need a new rendering cycle.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 dirty(); 97 dirty();
97 else 98 else
98 scheduleNotification(); 99 scheduleNotification();
99 return newValue; 100 return newValue;
100 } 101 }
101 102
102 /// Schedules a new rendering phase. 103 /// Schedules a new rendering phase.
103 void scheduleRendering() { 104 void scheduleRendering() {
104 if (_renderingScheduled) return; 105 if (_renderingScheduled) return;
105 if (!_enabled) return; 106 if (!_enabled) return;
106 queue.enqueue(this); 107 queue.enqueue(this, waitForBarrier: _waitForBarrier);
108 _waitForBarrier = true;
107 _renderingScheduled = true; 109 _renderingScheduled = true;
108 } 110 }
109 111
110 /// Renders the element (if the scheduler is enabled). 112 /// Renders the element (if the scheduler is enabled).
111 /// It will clear the dirty flag. 113 /// It will clear the dirty flag.
112 void render() { 114 void render() {
113 if (!_enabled) return; 115 if (!_enabled) return;
114 _dirty = false; 116 _dirty = false;
115 _wait.clear(); 117 _wait.clear();
116 element.render(); 118 element.render();
(...skipping 13 matching lines...) Expand all
130 _wait.addAll(it); 132 _wait.addAll(it);
131 } 133 }
132 134
133 Future _notify() async { 135 Future _notify() async {
134 await Future.wait(_wait); 136 await Future.wait(_wait);
135 _wait.clear(); 137 _wait.clear();
136 _onRendered.add(new RenderedEvent<T>(element, _dirty)); 138 _onRendered.add(new RenderedEvent<T>(element, _dirty));
137 _notificationScheduled = false; 139 _notificationScheduled = false;
138 } 140 }
139 } 141 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698