diff --git a/shell/platform/darwin/ios/ios_external_view_embedder.mm b/shell/platform/darwin/ios/ios_external_view_embedder.mm index a4921af254af9..2c0a23507c820 100644 --- a/shell/platform/darwin/ios/ios_external_view_embedder.mm +++ b/shell/platform/darwin/ios/ios_external_view_embedder.mm @@ -27,6 +27,7 @@ TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::CancelFrame"); FML_CHECK(platform_views_controller_); platform_views_controller_->CancelFrame(); + [CATransaction commit]; } // |ExternalViewEmbedder| @@ -38,6 +39,7 @@ TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::BeginFrame"); FML_CHECK(platform_views_controller_); platform_views_controller_->BeginFrame(frame_size); + [CATransaction begin]; } // |ExternalViewEmbedder| @@ -55,6 +57,9 @@ TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::PostPrerollAction"); FML_CHECK(platform_views_controller_); PostPrerollResult result = platform_views_controller_->PostPrerollAction(raster_thread_merger); + if (result == PostPrerollResult::kSkipAndRetryFrame) { + [CATransaction commit]; + } return result; } @@ -76,7 +81,11 @@ std::unique_ptr frame) { TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::SubmitFrame"); FML_CHECK(platform_views_controller_); - platform_views_controller_->SubmitFrame(std::move(context), ios_context_, std::move(frame)); + bool submitted = + platform_views_controller_->SubmitFrame(std::move(context), ios_context_, std::move(frame)); + if (submitted) { + [CATransaction commit]; + } TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::DidSubmitFrame"); }