From 2a9bcb43d17b99eb49482c770b622d22488da0cf Mon Sep 17 00:00:00 2001 From: Zachary Anderson Date: Mon, 21 Nov 2022 09:45:26 -0800 Subject: [PATCH] [Impeller] Present Impeller contents in a transaction when there is a platform view (flutter/engine#37809) --- .../shell/platform/darwin/ios/ios_surface_metal_impeller.mm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/engine/src/flutter/shell/platform/darwin/ios/ios_surface_metal_impeller.mm b/engine/src/flutter/shell/platform/darwin/ios/ios_surface_metal_impeller.mm index 1aba7895cb2..31dcd7a5e99 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/ios_surface_metal_impeller.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/ios_surface_metal_impeller.mm @@ -48,6 +48,12 @@ GPUCAMetalLayerHandle IOSSurfaceMetalImpeller::GetCAMetalLayer(const SkISize& fr if (!CGSizeEqualToSize(drawable_size, layer.drawableSize)) { layer.drawableSize = drawable_size; } + + // When there are platform views in the scene, the drawable needs to be presented in the same + // transaction as the one created for platform views. When the drawable are being presented from + // the raster thread, there is no such transaction. + layer.presentsWithTransaction = [[NSThread currentThread] isMainThread]; + return layer; }