@@ -27,7 +27,6 @@ Animator::Animator(Delegate& delegate,
2727 : delegate_(delegate),
2828 task_runners_ (std::move(task_runners)),
2929 waiter_(std::move(waiter)),
30- dart_frame_deadline_(0 ),
3130#if SHELL_ENABLE_METAL
3231 layer_tree_pipeline_ (std::make_shared<LayerTreePipeline>(2 )),
3332#else // SHELL_ENABLE_METAL
@@ -41,11 +40,6 @@ Animator::Animator(Delegate& delegate,
4140 : 2)),
4241#endif // SHELL_ENABLE_METAL
4342 pending_frame_semaphore_ (1 ),
44- paused_(false ),
45- regenerate_layer_tree_(false ),
46- frame_scheduled_(false ),
47- notify_idle_task_id_(0 ),
48- dimension_change_pending_(false ),
4943 weak_factory_(this ) {
5044}
5145
@@ -92,10 +86,10 @@ const char* Animator::FrameParity() {
9286 return (frame_number % 2 ) ? " even" : " odd" ;
9387}
9488
95- static int64_t FxlToDartOrEarlier (fml::TimePoint time) {
96- int64_t dart_now = Dart_TimelineGetMicros ();
89+ static fml::TimePoint FxlToDartOrEarlier (fml::TimePoint time) {
90+ auto dart_now = fml::TimeDelta::FromMicroseconds ( Dart_TimelineGetMicros () );
9791 fml::TimePoint fxl_now = fml::TimePoint::Now ();
98- return (time - fxl_now). ToMicroseconds () + dart_now;
92+ return fml::TimePoint::FromEpochDelta (time - fxl_now + dart_now) ;
9993}
10094
10195void Animator::BeginFrame (
@@ -153,7 +147,7 @@ void Animator::BeginFrame(
153147 delegate_.OnAnimatorBeginFrame (frame_target_time, frame_number);
154148 }
155149
156- if (!frame_scheduled_) {
150+ if (!frame_scheduled_ && has_rendered_ ) {
157151 // Under certain workloads (such as our parent view resizing us, which is
158152 // communicated to us by repeat viewport metrics events), we won't
159153 // actually have a frame scheduled yet, despite the fact that we *will* be
@@ -183,6 +177,7 @@ void Animator::BeginFrame(
183177}
184178
185179void Animator::Render (std::unique_ptr<flutter::LayerTree> layer_tree) {
180+ has_rendered_ = true ;
186181 if (dimension_change_pending_ &&
187182 layer_tree->frame_size () != last_layer_tree_size_) {
188183 dimension_change_pending_ = false ;
@@ -275,7 +270,10 @@ void Animator::AwaitVSync() {
275270 }
276271 });
277272
278- delegate_.OnAnimatorNotifyIdle (dart_frame_deadline_);
273+ if (has_rendered_) {
274+ delegate_.OnAnimatorNotifyIdle (
275+ dart_frame_deadline_.ToEpochDelta ().ToMicroseconds ());
276+ }
279277}
280278
281279void Animator::ScheduleSecondaryVsyncCallback (uintptr_t id,
0 commit comments