Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit a644d4d

Browse files
committed
Move build() off microtasks
Rather than using a microtask to schedule component build functions, instead use the scheduler. We now tread building just like layout and painting as a visual update.
1 parent f92e594 commit a644d4d

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

sky/packages/sky/lib/rendering/sky_binding.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class SkyBinding {
4747
_renderView = renderViewOverride;
4848
}
4949
assert(_renderView != null);
50-
scheduler.addPersistentFrameCallback(_beginFrame);
50+
scheduler.addPersistentFrameCallback(beginFrame);
5151

5252
assert(_instance == this);
5353
}
@@ -69,7 +69,7 @@ class SkyBinding {
6969
void set root(RenderBox value) {
7070
_renderView.child = value;
7171
}
72-
void _beginFrame(double timeStamp) {
72+
void beginFrame(double timeStamp) {
7373
RenderObject.flushLayout();
7474
RenderObject.flushPaint();
7575
_renderView.paintFrame();

sky/packages/sky/lib/widgets/widget.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'dart:collection';
77
import 'dart:sky' as sky;
88

99
import 'package:sky/base/hit_test.dart';
10+
import 'package:sky/base/scheduler.dart' as scheduler;
1011
import 'package:sky/mojo/activity.dart' as activity;
1112
import 'package:sky/rendering/box.dart';
1213
import 'package:sky/rendering/object.dart';
@@ -759,6 +760,9 @@ void _absorbDirtyComponents(List<Component> list) {
759760
}
760761

761762
void _buildDirtyComponents() {
763+
if (_dirtyComponents.isEmpty)
764+
return;
765+
762766
Stopwatch sw;
763767
if (_shouldLogRenderDuration)
764768
sw = new Stopwatch()..start();
@@ -805,11 +809,10 @@ void _scheduleComponentForRender(Component c) {
805809
_dirtyComponents.add(c);
806810
if (!_buildScheduled) {
807811
_buildScheduled = true;
808-
new Future.microtask(_buildDirtyComponents);
812+
scheduler.ensureVisualUpdate();
809813
}
810814
}
811815

812-
813816
// RenderObjectWrappers correspond to a desired state of a RenderObject.
814817
// They are fully immutable, with one exception: A Widget which is a
815818
// Component which lives within an MultiChildRenderObjectWrapper's
@@ -1178,6 +1181,11 @@ class WidgetSkyBinding extends SkyBinding {
11781181
}
11791182
}
11801183

1184+
void beginFrame(double timeStamp) {
1185+
_buildDirtyComponents();
1186+
super.beginFrame(timeStamp);
1187+
}
1188+
11811189
}
11821190

11831191
abstract class App extends StatefulComponent {

0 commit comments

Comments
 (0)