From f3dfcc438b8d9bef28243e1ff38fc40c557e86f2 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Tue, 9 Apr 2024 00:05:06 -0700 Subject: [PATCH 1/2] Migrate ios_surface files to ARC --- shell/platform/darwin/ios/BUILD.gn | 16 ++++++++-------- shell/platform/darwin/ios/ios_surface.mm | 12 ++++++------ .../darwin/ios/ios_surface_metal_impeller.mm | 4 +++- .../darwin/ios/ios_surface_metal_skia.mm | 17 +++++++++-------- .../platform/darwin/ios/ios_surface_software.mm | 4 +++- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/shell/platform/darwin/ios/BUILD.gn b/shell/platform/darwin/ios/BUILD.gn index 4135ff9ecab4b..0664940544a9d 100644 --- a/shell/platform/darwin/ios/BUILD.gn +++ b/shell/platform/darwin/ios/BUILD.gn @@ -109,6 +109,14 @@ source_set("flutter_framework_source_arc") { "ios_context_software.mm", "ios_external_texture_metal.h", "ios_external_texture_metal.mm", + "ios_surface.h", + "ios_surface.mm", + "ios_surface_metal_impeller.h", + "ios_surface_metal_impeller.mm", + "ios_surface_metal_skia.h", + "ios_surface_metal_skia.mm", + "ios_surface_software.h", + "ios_surface_software.mm", "rendering_api_selection.h", "rendering_api_selection.mm", ] @@ -172,14 +180,6 @@ source_set("flutter_framework_source") { "framework/Source/accessibility_text_entry.mm", "ios_external_view_embedder.h", "ios_external_view_embedder.mm", - "ios_surface.h", - "ios_surface.mm", - "ios_surface_metal_impeller.h", - "ios_surface_metal_impeller.mm", - "ios_surface_metal_skia.h", - "ios_surface_metal_skia.mm", - "ios_surface_software.h", - "ios_surface_software.mm", "platform_message_handler_ios.h", "platform_message_handler_ios.mm", "platform_view_ios.h", diff --git a/shell/platform/darwin/ios/ios_surface.mm b/shell/platform/darwin/ios/ios_surface.mm index d09778c6001c3..3e7050b77e4a4 100644 --- a/shell/platform/darwin/ios/ios_surface.mm +++ b/shell/platform/darwin/ios/ios_surface.mm @@ -9,6 +9,8 @@ #import "flutter/shell/platform/darwin/ios/ios_surface_software.h" #include "flutter/shell/platform/darwin/ios/rendering_api_selection.h" +FLUTTER_ASSERT_ARC + namespace flutter { std::unique_ptr IOSSurface::Create(std::shared_ptr context, @@ -21,16 +23,14 @@ switch (context->GetBackend()) { case IOSRenderingBackend::kSkia: return std::make_unique( - fml::scoped_nsobject( - reinterpret_cast([layer.get() retain])), // Metal layer - std::move(context) // context + fml::scoped_nsobject((CAMetalLayer*)layer.get()), // Metal layer + std::move(context) // context ); break; case IOSRenderingBackend::kImpeller: return std::make_unique( - fml::scoped_nsobject( - reinterpret_cast([layer.get() retain])), // Metal layer - std::move(context) // context + fml::scoped_nsobject((CAMetalLayer*)layer.get()), // Metal layer + std::move(context) // context ); } } diff --git a/shell/platform/darwin/ios/ios_surface_metal_impeller.mm b/shell/platform/darwin/ios/ios_surface_metal_impeller.mm index 3800646e7b14c..edf0e6c886192 100644 --- a/shell/platform/darwin/ios/ios_surface_metal_impeller.mm +++ b/shell/platform/darwin/ios/ios_surface_metal_impeller.mm @@ -8,6 +8,8 @@ #include "flutter/impeller/renderer/context.h" #include "flutter/shell/gpu/gpu_surface_metal_impeller.h" +FLUTTER_ASSERT_ARC + namespace flutter { IOSSurfaceMetalImpeller::IOSSurfaceMetalImpeller(const fml::scoped_nsobject& layer, @@ -64,7 +66,7 @@ // exit the app. layer.presentsWithTransaction = [[NSThread currentThread] isMainThread]; - return layer; + return (__bridge GPUCAMetalLayerHandle)layer; } // |GPUSurfaceMetalDelegate| diff --git a/shell/platform/darwin/ios/ios_surface_metal_skia.mm b/shell/platform/darwin/ios/ios_surface_metal_skia.mm index f33788deb59ba..efbc29c21f79a 100644 --- a/shell/platform/darwin/ios/ios_surface_metal_skia.mm +++ b/shell/platform/darwin/ios/ios_surface_metal_skia.mm @@ -8,6 +8,8 @@ #include "flutter/shell/gpu/gpu_surface_metal_skia.h" #include "flutter/shell/platform/darwin/ios/ios_context_metal_skia.h" +FLUTTER_ASSERT_ARC + @protocol FlutterMetalDrawable - (void)flutterPrepareForPresent:(nonnull id)commandBuffer; @end @@ -15,7 +17,7 @@ - (void)flutterPrepareForPresent:(nonnull id)commandBuffer; namespace flutter { static IOSContextMetalSkia* CastToMetalContext(const std::shared_ptr& context) { - return reinterpret_cast(context.get()); + return (IOSContextMetalSkia*)context.get(); } IOSSurfaceMetalSkia::IOSSurfaceMetalSkia(const fml::scoped_nsobject& layer, @@ -72,7 +74,7 @@ - (void)flutterPrepareForPresent:(nonnull id)commandBuffer; // the raster thread, there is no such transaction. layer.presentsWithTransaction = [[NSThread currentThread] isMainThread]; - return layer; + return (__bridge GPUCAMetalLayerHandle)layer; } // |GPUSurfaceMetalDelegate| @@ -82,16 +84,15 @@ - (void)flutterPrepareForPresent:(nonnull id)commandBuffer; return false; } - auto command_buffer = - fml::scoped_nsprotocol>([[command_queue_ commandBuffer] retain]); + id command_buffer = [command_queue_ commandBuffer]; - id metal_drawable = reinterpret_cast>(drawable); + id metal_drawable = (__bridge id)drawable; if ([metal_drawable conformsToProtocol:@protocol(FlutterMetalDrawable)]) { - [(id)metal_drawable flutterPrepareForPresent:command_buffer.get()]; + [(id)metal_drawable flutterPrepareForPresent:command_buffer]; } - [command_buffer.get() commit]; - [command_buffer.get() waitUntilScheduled]; + [command_buffer commit]; + [command_buffer waitUntilScheduled]; [metal_drawable present]; return true; diff --git a/shell/platform/darwin/ios/ios_surface_software.mm b/shell/platform/darwin/ios/ios_surface_software.mm index 736d8dc488127..c67facb1931c2 100644 --- a/shell/platform/darwin/ios/ios_surface_software.mm +++ b/shell/platform/darwin/ios/ios_surface_software.mm @@ -15,6 +15,8 @@ #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/utils/mac/SkCGUtils.h" +FLUTTER_ASSERT_ARC + namespace flutter { IOSSurfaceSoftware::IOSSurfaceSoftware(const fml::scoped_nsobject& layer, @@ -118,7 +120,7 @@ return false; } - layer_.get().contents = reinterpret_cast(static_cast(pixmap_image)); + layer_.get().contents = (__bridge id)(static_cast(pixmap_image)); return true; } From a42cc1ae925d5f4b1eb850d0fe92547d9cce0c3a Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Mon, 22 Apr 2024 16:14:03 -0700 Subject: [PATCH 2/2] cf_audited_transfer --- .../platform/darwin/ios/ios_surface_metal_impeller.h | 11 +++++++---- shell/platform/darwin/ios/ios_surface_metal_skia.h | 11 +++++++---- shell/platform/darwin/ios/ios_surface_metal_skia.mm | 3 ++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/shell/platform/darwin/ios/ios_surface_metal_impeller.h b/shell/platform/darwin/ios/ios_surface_metal_impeller.h index 6c3615318a9ca..888f3935355e3 100644 --- a/shell/platform/darwin/ios/ios_surface_metal_impeller.h +++ b/shell/platform/darwin/ios/ios_surface_metal_impeller.h @@ -42,16 +42,19 @@ class SK_API_AVAILABLE_CA_METAL_LAYER IOSSurfaceMetalImpeller final std::unique_ptr CreateGPUSurface(GrDirectContext* gr_context) override; // |GPUSurfaceMetalDelegate| - GPUCAMetalLayerHandle GetCAMetalLayer(const SkISize& frame_info) const override; + GPUCAMetalLayerHandle GetCAMetalLayer(const SkISize& frame_info) const override + __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| - bool PresentDrawable(GrMTLHandle drawable) const override; + bool PresentDrawable(GrMTLHandle drawable) const override __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| - GPUMTLTextureInfo GetMTLTexture(const SkISize& frame_info) const override; + GPUMTLTextureInfo GetMTLTexture(const SkISize& frame_info) const override + __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| - bool PresentTexture(GPUMTLTextureInfo texture) const override; + bool PresentTexture(GPUMTLTextureInfo texture) const override + __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| bool AllowsDrawingWhenGpuDisabled() const override; diff --git a/shell/platform/darwin/ios/ios_surface_metal_skia.h b/shell/platform/darwin/ios/ios_surface_metal_skia.h index ed2468654abfc..685be041e39ea 100644 --- a/shell/platform/darwin/ios/ios_surface_metal_skia.h +++ b/shell/platform/darwin/ios/ios_surface_metal_skia.h @@ -39,16 +39,19 @@ class SK_API_AVAILABLE_CA_METAL_LAYER IOSSurfaceMetalSkia final : public IOSSurf std::unique_ptr CreateGPUSurface(GrDirectContext* gr_context) override; // |GPUSurfaceMetalDelegate| - GPUCAMetalLayerHandle GetCAMetalLayer(const SkISize& frame_info) const override; + GPUCAMetalLayerHandle GetCAMetalLayer(const SkISize& frame_info) const override + __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| - bool PresentDrawable(GrMTLHandle drawable) const override; + bool PresentDrawable(GrMTLHandle drawable) const override __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| - GPUMTLTextureInfo GetMTLTexture(const SkISize& frame_info) const override; + GPUMTLTextureInfo GetMTLTexture(const SkISize& frame_info) const override + __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| - bool PresentTexture(GPUMTLTextureInfo texture) const override; + bool PresentTexture(GPUMTLTextureInfo texture) const override + __attribute__((cf_audited_transfer)); // |GPUSurfaceMetalDelegate| bool AllowsDrawingWhenGpuDisabled() const override; diff --git a/shell/platform/darwin/ios/ios_surface_metal_skia.mm b/shell/platform/darwin/ios/ios_surface_metal_skia.mm index efbc29c21f79a..cb9d30e136303 100644 --- a/shell/platform/darwin/ios/ios_surface_metal_skia.mm +++ b/shell/platform/darwin/ios/ios_surface_metal_skia.mm @@ -16,7 +16,8 @@ - (void)flutterPrepareForPresent:(nonnull id)commandBuffer; namespace flutter { -static IOSContextMetalSkia* CastToMetalContext(const std::shared_ptr& context) { +static IOSContextMetalSkia* CastToMetalContext(const std::shared_ptr& context) + __attribute__((cf_audited_transfer)) { return (IOSContextMetalSkia*)context.get(); }