From a488d104f28d36785f708118ea5bf57e1c51d6e0 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 24 Feb 2025 11:05:21 -0800 Subject: [PATCH] [iOS] switch iOS to slimpeller variant. (#163808) Now that skia can no longer be used on both iOS devices and Simulators, we can switch the iOS engine to the "slimpeller" variant which removes some (not all!) of the Skia dependencies. This should reduce binary size and build time. I also did some cleanups as some tests we're still opting into Skia behaviors (though not actually running skia) and we now flag these as errors. --- engine/src/flutter/ci/builders/mac_unopt.json | 81 ------- .../src/flutter/lib/ui/compositing/scene.cc | 7 +- .../flutter/lib/ui/painting/image_decoder.cc | 6 +- .../flutter/lib/ui/painting/image_decoder.h | 2 +- .../lib/ui/painting/multi_frame_codec.cc | 15 +- .../lib/ui/painting/multi_frame_codec.h | 8 +- engine/src/flutter/lib/ui/painting/picture.cc | 11 +- engine/src/flutter/lib/ui/snapshot_delegate.h | 2 +- .../framework/Source/FlutterDartProject.mm | 6 +- .../Source/FlutterDartProjectTest.mm | 28 --- .../Source/FlutterDartProject_Internal.h | 1 - .../ios/framework/Source/FlutterEngine.mm | 10 +- .../Source/FlutterPlatformViewsController.h | 6 +- .../Source/FlutterPlatformViewsController.mm | 6 +- .../Source/FlutterPlatformViewsTest.mm | 223 +++++------------- .../darwin/ios/framework/Source/FlutterView.h | 3 - .../ios/framework/Source/FlutterView.mm | 21 +- .../framework/Source/FlutterViewController.mm | 1 - .../ios/framework/Source/FlutterViewTest.mm | 11 - .../shell/platform/darwin/ios/ios_context.h | 2 +- .../darwin/ios/ios_context_metal_impeller.h | 1 - .../darwin/ios/ios_external_view_embedder.mm | 8 +- .../platform/darwin/ios/platform_view_ios.h | 2 +- .../ios_scenario_app/bin/run_ios_tests.dart | 63 +++-- engine/src/flutter/tools/gn | 2 +- 25 files changed, 127 insertions(+), 399 deletions(-) diff --git a/engine/src/flutter/ci/builders/mac_unopt.json b/engine/src/flutter/ci/builders/mac_unopt.json index 746e049acb..9a6c3524e6 100644 --- a/engine/src/flutter/ci/builders/mac_unopt.json +++ b/engine/src/flutter/ci/builders/mac_unopt.json @@ -473,87 +473,6 @@ "script": "flutter/testing/ios_scenario_app/run_ios_tests.sh" } ] - }, - { - "cas_archive": false, - "drone_dimensions": - [ - "os=Mac-13|Mac-14", - "device_type=none" - ], - "gclient_variables": - { - "download_android_deps": false, - "use_rbe": true - }, - "gn": - [ - "--ios", - "--runtime-mode", - "release", - "--no-stripped", - "--no-lto", - "--xcode-symlinks", - "--rbe", - "--no-goma", - "--slimpeller" - ], - "name": "ci/macos/ios_release_slimpeller", - "description": "Builds a Slimpeller release mode engine that targets iOS from a macOS host.", - "ninja": - { - "config": "ios_release_slimpeller", - "targets": - [] - }, - "properties": - { - "$flutter/osx_sdk": - { - "sdk_version": "15a240d" - } - } - }, - { - "cas_archive": false, - "drone_dimensions": - [ - "os=Mac-13|Mac-14", - "device_type=none" - ], - "gclient_variables": - { - "download_android_deps": false, - "use_rbe": true - }, - "gn": - [ - "--ios", - "--runtime-mode", - "debug", - "--unoptimized", - "--no-stripped", - "--no-lto", - "--xcode-symlinks", - "--rbe", - "--no-goma", - "--slimpeller" - ], - "name": "ci/macos/ios_debug_unopt_slimpeller", - "description": "Builds an unoptimized debug mode engine with Slimpeller that targets iOS from a macOS host.", - "ninja": - { - "config": "ios_debug_unopt_slimpeller", - "targets": - [] - }, - "properties": - { - "$flutter/osx_sdk": - { - "sdk_version": "15a240d" - } - } } ] } diff --git a/engine/src/flutter/lib/ui/compositing/scene.cc b/engine/src/flutter/lib/ui/compositing/scene.cc index 2208023274..8bf7c2a869 100644 --- a/engine/src/flutter/lib/ui/compositing/scene.cc +++ b/engine/src/flutter/lib/ui/compositing/scene.cc @@ -76,7 +76,7 @@ static sk_sp CreateDeferredImage( std::unique_ptr layer_tree, fml::TaskRunnerAffineWeakPtr snapshot_delegate, fml::RefPtr raster_task_runner, - fml::RefPtr unref_queue) { + const fml::RefPtr& unref_queue) { #if IMPELLER_SUPPORTS_RENDERING if (impeller) { return DlDeferredImageGPUImpeller::Make(std::move(layer_tree), @@ -95,7 +95,7 @@ static sk_sp CreateDeferredImage( kRGBA_8888_SkColorType, kPremul_SkAlphaType); return DlDeferredImageGPUSkia::MakeFromLayerTree( image_info, std::move(layer_tree), std::move(snapshot_delegate), - raster_task_runner, std::move(unref_queue)); + raster_task_runner, unref_queue); #endif // SLIMPELLER } @@ -113,8 +113,7 @@ void Scene::RasterizeToImage(uint32_t width, auto image = CanvasImage::Create(); auto dl_image = CreateDeferredImage( dart_state->IsImpellerEnabled(), BuildLayerTree(width, height), - std::move(snapshot_delegate), std::move(raster_task_runner), - std::move(unref_queue)); + std::move(snapshot_delegate), std::move(raster_task_runner), unref_queue); image->set_image(dl_image); image->AssociateWithDartWrapper(raw_image_handle); } diff --git a/engine/src/flutter/lib/ui/painting/image_decoder.cc b/engine/src/flutter/lib/ui/painting/image_decoder.cc index 82cd37360f..db2c8dd461 100644 --- a/engine/src/flutter/lib/ui/painting/image_decoder.cc +++ b/engine/src/flutter/lib/ui/painting/image_decoder.cc @@ -16,14 +16,14 @@ std::unique_ptr ImageDecoder::Make( const Settings& settings, const TaskRunners& runners, std::shared_ptr concurrent_task_runner, - fml::WeakPtr io_manager, + const fml::WeakPtr& io_manager, const std::shared_ptr& gpu_disabled_switch) { #if IMPELLER_SUPPORTS_RENDERING if (settings.enable_impeller) { return std::make_unique( runners, // std::move(concurrent_task_runner), // - std::move(io_manager), // + io_manager, // settings.enable_wide_gamut, // gpu_disabled_switch); } @@ -32,7 +32,7 @@ std::unique_ptr ImageDecoder::Make( return std::make_unique( runners, // std::move(concurrent_task_runner), // - std::move(io_manager) // + io_manager // ); #else // !SLIMPELLER FML_LOG(FATAL) << "Could not setup an image decoder."; diff --git a/engine/src/flutter/lib/ui/painting/image_decoder.h b/engine/src/flutter/lib/ui/painting/image_decoder.h index ebb104efd4..ae87dbf092 100644 --- a/engine/src/flutter/lib/ui/painting/image_decoder.h +++ b/engine/src/flutter/lib/ui/painting/image_decoder.h @@ -27,7 +27,7 @@ class ImageDecoder { const Settings& settings, const TaskRunners& runners, std::shared_ptr concurrent_task_runner, - fml::WeakPtr io_manager, + const fml::WeakPtr& io_manager, const std::shared_ptr& gpu_disabled_switch); virtual ~ImageDecoder(); diff --git a/engine/src/flutter/lib/ui/painting/multi_frame_codec.cc b/engine/src/flutter/lib/ui/painting/multi_frame_codec.cc index f05ff11123..73b5550c9e 100644 --- a/engine/src/flutter/lib/ui/painting/multi_frame_codec.cc +++ b/engine/src/flutter/lib/ui/painting/multi_frame_codec.cc @@ -55,10 +55,10 @@ static void InvokeNextFrameCallback( std::pair, std::string> MultiFrameCodec::State::GetNextFrameImage( - fml::WeakPtr resourceContext, + const fml::WeakPtr& resourceContext, const std::shared_ptr& gpu_disable_sync_switch, const std::shared_ptr& impeller_context, - fml::RefPtr unref_queue) { + const fml::RefPtr& unref_queue) { SkBitmap bitmap = SkBitmap(); SkImageInfo info = generator_->GetInfo().makeColorType(kN32_SkColorType); if (info.alphaType() == kUnpremul_SkAlphaType) { @@ -175,7 +175,7 @@ MultiFrameCodec::State::GetNextFrameImage( } })); - return std::make_pair(DlImageGPU::Make({skImage, std::move(unref_queue)}), + return std::make_pair(DlImageGPU::Make({skImage, unref_queue}), std::string()); #else // !SLIMPELLER return std::make_pair(nullptr, "Unsupported backend."); @@ -185,8 +185,8 @@ MultiFrameCodec::State::GetNextFrameImage( void MultiFrameCodec::State::GetNextFrameAndInvokeCallback( std::unique_ptr callback, const fml::RefPtr& ui_task_runner, - fml::WeakPtr resourceContext, - fml::RefPtr unref_queue, + const fml::WeakPtr& resourceContext, + const fml::RefPtr& unref_queue, const std::shared_ptr& gpu_disable_sync_switch, size_t trace_id, const std::shared_ptr& impeller_context) { @@ -205,9 +205,8 @@ void MultiFrameCodec::State::GetNextFrameAndInvokeCallback( int duration = 0; sk_sp dlImage; std::string decode_error; - std::tie(dlImage, decode_error) = - GetNextFrameImage(std::move(resourceContext), gpu_disable_sync_switch, - impeller_context, std::move(unref_queue)); + std::tie(dlImage, decode_error) = GetNextFrameImage( + resourceContext, gpu_disable_sync_switch, impeller_context, unref_queue); if (dlImage) { image = CanvasImage::Create(); image->set_image(dlImage); diff --git a/engine/src/flutter/lib/ui/painting/multi_frame_codec.h b/engine/src/flutter/lib/ui/painting/multi_frame_codec.h index 4a49b84570..413574a7c5 100644 --- a/engine/src/flutter/lib/ui/painting/multi_frame_codec.h +++ b/engine/src/flutter/lib/ui/painting/multi_frame_codec.h @@ -60,16 +60,16 @@ class MultiFrameCodec : public Codec { std::optional restoreBGColorRect_; std::pair, std::string> GetNextFrameImage( - fml::WeakPtr resourceContext, + const fml::WeakPtr& resourceContext, const std::shared_ptr& gpu_disable_sync_switch, const std::shared_ptr& impeller_context, - fml::RefPtr unref_queue); + const fml::RefPtr& unref_queue); void GetNextFrameAndInvokeCallback( std::unique_ptr callback, const fml::RefPtr& ui_task_runner, - fml::WeakPtr resourceContext, - fml::RefPtr unref_queue, + const fml::WeakPtr& resourceContext, + const fml::RefPtr& unref_queue, const std::shared_ptr& gpu_disable_sync_switch, size_t trace_id, const std::shared_ptr& impeller_context); diff --git a/engine/src/flutter/lib/ui/painting/picture.cc b/engine/src/flutter/lib/ui/painting/picture.cc index 6f2a0cd5b6..3eece92e68 100644 --- a/engine/src/flutter/lib/ui/painting/picture.cc +++ b/engine/src/flutter/lib/ui/painting/picture.cc @@ -62,7 +62,7 @@ static sk_sp CreateDeferredImage( uint32_t height, fml::TaskRunnerAffineWeakPtr snapshot_delegate, fml::RefPtr raster_task_runner, - fml::RefPtr unref_queue) { + const fml::RefPtr& unref_queue) { #if IMPELLER_SUPPORTS_RENDERING if (impeller) { return DlDeferredImageGPUImpeller::Make( @@ -77,9 +77,9 @@ static sk_sp CreateDeferredImage( #else // SLIMPELLER const SkImageInfo image_info = SkImageInfo::Make( width, height, kRGBA_8888_SkColorType, kPremul_SkAlphaType); - return DlDeferredImageGPUSkia::Make( - image_info, std::move(display_list), std::move(snapshot_delegate), - raster_task_runner, std::move(unref_queue)); + return DlDeferredImageGPUSkia::Make(image_info, std::move(display_list), + std::move(snapshot_delegate), + raster_task_runner, unref_queue); #endif // !SLIMPELLER } @@ -99,8 +99,7 @@ void Picture::RasterizeToImageSync(sk_sp display_list, auto image = CanvasImage::Create(); auto dl_image = CreateDeferredImage( dart_state->IsImpellerEnabled(), std::move(display_list), width, height, - std::move(snapshot_delegate), std::move(raster_task_runner), - std::move(unref_queue)); + std::move(snapshot_delegate), std::move(raster_task_runner), unref_queue); image->set_image(dl_image); image->AssociateWithDartWrapper(raw_image_handle); } diff --git a/engine/src/flutter/lib/ui/snapshot_delegate.h b/engine/src/flutter/lib/ui/snapshot_delegate.h index 5e2b6c3bee..1a89b5013b 100644 --- a/engine/src/flutter/lib/ui/snapshot_delegate.h +++ b/engine/src/flutter/lib/ui/snapshot_delegate.h @@ -24,7 +24,7 @@ class SnapshotDelegate { /// @brief A data structure used by the Skia implementation of deferred /// GPU based images. struct GpuImageResult { - GpuImageResult( + explicit GpuImageResult( #if !SLIMPELLER const GrBackendTexture& p_texture, #endif // !SLIMPELLER diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm index 3f31c181f3..44459eb55b 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm @@ -48,7 +48,7 @@ flutter::Settings FLTDefaultSettingsForBundle(NSBundle* bundle, NSProcessInfo* p auto command_line = flutter::CommandLineFromNSProcessInfo(processInfoOrNil); // Precedence: - // 1. Settings from the specified NSBundle (except for enable-impeller). + // 1. Settings from the specified NSBundle. // 2. Settings passed explicitly via command-line arguments. // 3. Settings from the NSBundle with the default bundle ID. // 4. Settings from the main NSBundle and default values. @@ -403,8 +403,4 @@ flutter::Settings FLTDefaultSettingsForBundle(NSBundle* bundle, NSProcessInfo* p return _settings.enable_wide_gamut; } -- (BOOL)isImpellerEnabled { - return _settings.enable_impeller; -} - @end diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm index fbb2cbe3c2..414761f9ad 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm @@ -225,34 +225,6 @@ FLUTTER_ASSERT_ARC } } -- (void)testRequestsWarningWhenImpellerOptOut { - auto settings = FLTDefaultSettingsForBundle(); - XCTAssertEqual(settings.warn_on_impeller_opt_out, YES); -} - -- (void)testEnableImpellerSettingIsCorrectlyParsed { - id mockMainBundle = OCMPartialMock([NSBundle mainBundle]); - OCMStub([mockMainBundle objectForInfoDictionaryKey:@"FLTEnableImpeller"]).andReturn(@"YES"); - - auto settings = FLTDefaultSettingsForBundle(); - // Check settings.enable_impeller value is same as the value defined in Info.plist. - XCTAssertEqual(settings.enable_impeller, YES); - [mockMainBundle stopMocking]; -} - -- (void)testEnableImpellerSettingIsCorrectlyOverriddenByCommandLine { - id mockMainBundle = OCMPartialMock([NSBundle mainBundle]); - OCMStub([mockMainBundle objectForInfoDictionaryKey:@"FLTEnableImpeller"]).andReturn(@"NO"); - id mockProcessInfo = OCMPartialMock([NSProcessInfo processInfo]); - NSArray* arguments = @[ @"process_name", @"--enable-impeller" ]; - OCMStub([mockProcessInfo arguments]).andReturn(arguments); - - auto settings = FLTDefaultSettingsForBundle(nil, mockProcessInfo); - // Check settings.enable_impeller value is same as the value on command line. - XCTAssertEqual(settings.enable_impeller, YES); - [mockMainBundle stopMocking]; -} - - (void)testEnableDartAssertsCommandLineArgument { id mockMainBundle = OCMPartialMock([NSBundle mainBundle]); OCMStub([mockMainBundle objectForInfoDictionaryKey:@"FLTEnableDartAsserts"]).andReturn(@"YES"); diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject_Internal.h b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject_Internal.h index f90d44e900..7d3a3d8e5f 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject_Internal.h +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject_Internal.h @@ -19,7 +19,6 @@ flutter::Settings FLTDefaultSettingsForBundle(NSBundle* _Nullable bundle = nil, @interface FlutterDartProject () @property(nonatomic, readonly) BOOL isWideGamutEnabled; -@property(nonatomic, readonly) BOOL isImpellerEnabled; /** * This is currently used for *only for tests* to override settings. diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm index 9b470a8b26..df4b48f8df 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm @@ -264,7 +264,7 @@ static constexpr int kNumProfilerSamplesPerSec = 5; } - (void)recreatePlatformViewsController { - _renderingApi = flutter::GetRenderingAPIForProcess(FlutterView.forceSoftwareRendering); + _renderingApi = flutter::GetRenderingAPIForProcess(/*force_software=*/false); _platformViewsController = [[FlutterPlatformViewsController alloc] init]; } @@ -743,7 +743,7 @@ static flutter::ThreadHost MakeThreadHost(NSString* thread_label, fml::MessageLoop::EnsureInitializedForCurrentThread(); uint32_t threadHostType = flutter::ThreadHost::Type::kRaster | flutter::ThreadHost::Type::kIo; - if (!settings.enable_impeller || !settings.merged_platform_ui_thread) { + if (!settings.merged_platform_ui_thread) { threadHostType |= flutter::ThreadHost::Type::kUi; } @@ -802,8 +802,6 @@ static void SetEntryPoint(flutter::Settings* settings, NSString* entrypoint, NSS self.initialRoute = [NSString stringWithUTF8String:settings.route.c_str()]; } - FlutterView.forceSoftwareRendering = settings.enable_software_rendering; - auto platformData = [self.dartProject defaultPlatformData]; SetEntryPoint(&settings, entrypoint, libraryURI); @@ -1497,10 +1495,6 @@ static void SetEntryPoint(flutter::Settings* settings, NSString* entrypoint, NSS return self.dartProject; } -- (BOOL)isUsingImpeller { - return self.project.isImpellerEnabled; -} - @end @implementation FlutterEngineRegistrar { diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.h b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.h index 165808cc69..ee5623ef89 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.h +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.h @@ -72,16 +72,14 @@ NS_ASSUME_NONNULL_BEGIN /// /// Called from the raster thread. - (flutter::PostPrerollResult)postPrerollActionWithThreadMerger: - (const fml::RefPtr&)rasterThreadMerger - impellerEnabled:(BOOL)impellerEnabled; + (const fml::RefPtr&)rasterThreadMerger; /// @brief Mark the end of a compositor frame. /// /// May determine changes are required to the thread merging state. /// Called from the raster thread. - (void)endFrameWithResubmit:(BOOL)shouldResubmitFrame - threadMerger:(const fml::RefPtr&)rasterThreadMerger - impellerEnabled:(BOOL)impellerEnabled; + threadMerger:(const fml::RefPtr&)rasterThreadMerger; /// @brief Returns the Canvas for the overlay slice for the given platform view. /// diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.mm index 647f68d47a..79625935bc 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsController.mm @@ -448,14 +448,12 @@ static bool ClipRRectContainsPlatformViewBoundingRect(const SkRRect& clip_rrect, } - (flutter::PostPrerollResult)postPrerollActionWithThreadMerger: - (const fml::RefPtr&)rasterThreadMerger - impellerEnabled:(BOOL)impellerEnabled { + (const fml::RefPtr&)rasterThreadMerger { return flutter::PostPrerollResult::kSuccess; } - (void)endFrameWithResubmit:(BOOL)shouldResubmitFrame - threadMerger:(const fml::RefPtr&)rasterThreadMerger - impellerEnabled:(BOOL)impellerEnabled { + threadMerger:(const fml::RefPtr&)rasterThreadMerger { } - (void)pushFilterToVisitedPlatformViews:(const std::shared_ptr&)filter diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm index 78f2d4ce51..7247d15764 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterPlatformViewsTest.mm @@ -324,9 +324,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -388,9 +386,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -485,9 +481,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -571,9 +565,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -657,9 +649,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -744,9 +734,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -876,9 +864,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -1035,9 +1021,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -1339,9 +1323,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -1675,9 +1657,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -1745,9 +1725,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -1858,9 +1836,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -1943,9 +1919,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2024,9 +1998,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2104,9 +2076,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2189,9 +2159,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2294,9 +2262,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2406,9 +2372,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2535,9 +2499,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2648,9 +2610,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2778,9 +2738,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2849,9 +2807,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -2977,9 +2933,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3094,9 +3048,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3162,9 +3114,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3271,9 +3221,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3336,9 +3284,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3401,9 +3347,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3462,9 +3406,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3522,9 +3464,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3607,9 +3547,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3665,9 +3603,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3739,9 +3675,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3793,15 +3727,12 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:1 withParams:std::move(embeddedViewParams2)]; - // SKSurface is required if the root FlutterView is present. - const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); - sk_sp mock_sk_surface = SkSurfaces::Raster(image_info); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; auto mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, /*display_list_fallback=*/true); XCTAssertTrue([flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]); @@ -3826,12 +3757,11 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:0 withParams:std::move(embeddedViewParams1)]; - mock_sk_surface = SkSurfaces::Raster(image_info); mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, /*display_list_fallback=*/true); XCTAssertTrue([flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]); @@ -3855,9 +3785,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -3909,15 +3837,12 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:1 withParams:std::move(embeddedViewParams2)]; - // SKSurface is required if the root FlutterView is present. - const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); - sk_sp mock_sk_surface = SkSurfaces::Raster(image_info); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; auto mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, /*display_list_fallback=*/true); XCTAssertTrue([flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]); @@ -3942,12 +3867,11 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:1 withParams:std::move(embeddedViewParams2)]; - mock_sk_surface = SkSurfaces::Raster(image_info); mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, /*display_list_fallback=*/true); XCTAssertTrue([flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]); @@ -4056,9 +3980,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -4162,9 +4084,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -4255,9 +4175,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -4357,9 +4275,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -4423,14 +4339,13 @@ fml::RefPtr GetDefaultTaskRunner() { result:disposeResult]; [self waitForExpectationsWithTimeout:30 handler:nil]; - const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); - sk_sp mock_sk_surface = SkSurfaces::Raster(image_info); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; auto mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, + /*display_list_fallback=*/true); XCTAssertTrue([flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]); @@ -4452,14 +4367,12 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:1 withParams:std::move(embeddedViewParams1)]; - const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); - sk_sp mock_sk_surface = SkSurfaces::Raster(image_info); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; auto mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, /*display_list_fallback=*/true); XCTAssertTrue([flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]); @@ -4483,9 +4396,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -4529,15 +4440,12 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:2 withParams:std::move(embeddedViewParams)]; - // SKSurface is required if the root FlutterView is present. - const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); - sk_sp mock_sk_surface = SkSurfaces::Raster(image_info); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; auto mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, /*display_list_fallback=*/true); [flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]; @@ -4562,9 +4470,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -4609,15 +4515,12 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:2 withParams:std::move(embeddedViewParams)]; - // SKSurface is required if the root FlutterView is present. - const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); - sk_sp mock_sk_surface = SkSurfaces::Raster(image_info); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; auto mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [](const flutter::SurfaceFrame& surface_frame) { return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, /*display_list_fallback=*/true); [flutterPlatformViewsController submitFrame:std::move(mock_surface) withIosContext:std::make_shared()]; @@ -4669,9 +4572,7 @@ fml::RefPtr GetDefaultTaskRunner() { flutterPlatformViewsController.taskRunner = GetDefaultTaskRunner(); auto platform_view = std::make_unique( /*delegate=*/mock_delegate, - /*rendering_api=*/mock_delegate.settings_.enable_impeller - ? flutter::IOSRenderingAPI::kMetal - : flutter::IOSRenderingAPI::kSoftware, + /*rendering_api=*/flutter::IOSRenderingAPI::kMetal, /*platform_views_controller=*/flutterPlatformViewsController, /*task_runners=*/runners, /*worker_task_runner=*/nil, @@ -4721,19 +4622,17 @@ fml::RefPtr GetDefaultTaskRunner() { [flutterPlatformViewsController prerollCompositeEmbeddedView:1 withParams:std::move(embeddedViewParams2)]; - // SKSurface is required if the root FlutterView is present. - const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); - sk_sp mock_sk_surface = SkSurfaces::Raster(image_info); flutter::SurfaceFrame::FramebufferInfo framebuffer_info; std::optional submit_info; auto mock_surface = std::make_unique( - std::move(mock_sk_surface), framebuffer_info, + nullptr, framebuffer_info, [](const flutter::SurfaceFrame& surface_frame, flutter::DlCanvas* canvas) { return true; }, [&](const flutter::SurfaceFrame& surface_frame) { submit_info = surface_frame.submit_info(); return true; }, - /*frame_size=*/SkISize::Make(800, 600)); + /*frame_size=*/SkISize::Make(800, 600), nullptr, + /*display_list_fallback=*/true); mock_surface->set_submit_info({ .frame_damage = SkIRect::MakeWH(800, 600), .buffer_damage = SkIRect::MakeWH(400, 600), diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.h b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.h index 80619e44b7..7f3a32ed63 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.h +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.h @@ -13,7 +13,6 @@ @protocol FlutterViewEngineDelegate -@property(nonatomic, readonly) BOOL isUsingImpeller; @property(nonatomic, readonly) FlutterPlatformViewsController* platformViewsController; - (flutter::Rasterizer::Screenshot)takeScreenshot:(flutter::Rasterizer::ScreenshotType)type @@ -44,8 +43,6 @@ - (UIScreen*)screen; - (MTLPixelFormat)pixelFormat; -// Set by FlutterEngine or FlutterViewController to override software rendering. -@property(class, nonatomic) BOOL forceSoftwareRendering; @end #endif // FLUTTER_SHELL_PLATFORM_DARWIN_IOS_FRAMEWORK_SOURCE_FLUTTERVIEW_H_ diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm index cab7a67e15..dd37e8a553 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm @@ -51,10 +51,6 @@ FLUTTER_ASSERT_ARC return MTLPixelFormatBGRA8Unorm; } - (BOOL)isWideGamutSupported { - if (!self.delegate.isUsingImpeller) { - return NO; - } - FML_DCHECK(self.screen); // This predicates the decision on the capabilities of the iOS device's @@ -105,12 +101,11 @@ static void PrintWideGamutWarningOnce() { layer.contentsScale = screenScale; layer.rasterizationScale = screenScale; layer.framebufferOnly = flutter::Settings::kSurfaceDataAccessible ? NO : YES; - BOOL isWideGamutSupported = self.isWideGamutSupported; - if (_isWideGamutEnabled && isWideGamutSupported) { + if (_isWideGamutEnabled && self.isWideGamutSupported) { fml::CFRef srgb(CGColorSpaceCreateWithName(kCGColorSpaceExtendedSRGB)); layer.colorspace = srgb; layer.pixelFormat = MTLPixelFormatBGRA10_XR; - } else if (_isWideGamutEnabled && !isWideGamutSupported) { + } else if (_isWideGamutEnabled && !self.isWideGamutSupported) { PrintWideGamutWarningOnce(); } } @@ -118,19 +113,9 @@ static void PrintWideGamutWarningOnce() { [super layoutSubviews]; } -static BOOL _forceSoftwareRendering; - -+ (BOOL)forceSoftwareRendering { - return _forceSoftwareRendering; -} - -+ (void)setForceSoftwareRendering:(BOOL)forceSoftwareRendering { - _forceSoftwareRendering = forceSoftwareRendering; -} - + (Class)layerClass { return flutter::GetCoreAnimationLayerClassForRenderingAPI( - flutter::GetRenderingAPIForProcess(FlutterView.forceSoftwareRendering)); + flutter::GetRenderingAPIForProcess(/*force_software=*/false)); } - (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context { diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index ad6eedc910..36e1a4897c 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -256,7 +256,6 @@ typedef struct MouseState { if (!project) { project = [[FlutterDartProject alloc] init]; } - FlutterView.forceSoftwareRendering = project.settings.enable_software_rendering; FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"io.flutter" project:project allowHeadlessExecution:self.engineAllowHeadlessExecution diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewTest.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewTest.mm index 357c65e4c8..3b686dea82 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewTest.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewTest.mm @@ -10,7 +10,6 @@ FLUTTER_ASSERT_ARC @interface FakeDelegate : NSObject @property(nonatomic) BOOL callbackCalled; -@property(nonatomic, assign) BOOL isUsingImpeller; @end @implementation FakeDelegate @@ -52,16 +51,6 @@ FLUTTER_ASSERT_ARC XCTAssertNil(view.backgroundColor); } -- (void)testIgnoreWideColorWithoutImpeller { - FakeDelegate* delegate = [[FakeDelegate alloc] init]; - delegate.isUsingImpeller = NO; - FlutterView* view = [[FlutterView alloc] initWithDelegate:delegate opaque:NO enableWideGamut:YES]; - [view layoutSubviews]; - XCTAssertTrue([view.layer isKindOfClass:[CAMetalLayer class]]); - CAMetalLayer* layer = (CAMetalLayer*)view.layer; - XCTAssertEqual(layer.pixelFormat, MTLPixelFormatBGRA8Unorm); -} - - (void)testLayerScalesMatchScreenAfterLayoutSubviews { FakeDelegate* delegate = [[FakeDelegate alloc] init]; FlutterView* view = [[FlutterView alloc] initWithDelegate:delegate opaque:NO enableWideGamut:NO]; diff --git a/engine/src/flutter/shell/platform/darwin/ios/ios_context.h b/engine/src/flutter/shell/platform/darwin/ios/ios_context.h index ef9a1a878f..24a887a4d8 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/ios_context.h +++ b/engine/src/flutter/shell/platform/darwin/ios/ios_context.h @@ -39,7 +39,7 @@ class IOSContext { public: //---------------------------------------------------------------------------- /// @brief Create an iOS context object capable of creating the on-screen - /// and off-screen GPU context for use by Skia. + /// and off-screen GPU context for use by Impeller. /// /// In case the engine does not support the specified client /// rendering API, this a `nullptr` may be returned. diff --git a/engine/src/flutter/shell/platform/darwin/ios/ios_context_metal_impeller.h b/engine/src/flutter/shell/platform/darwin/ios/ios_context_metal_impeller.h index a672d83130..debed104dd 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/ios_context_metal_impeller.h +++ b/engine/src/flutter/shell/platform/darwin/ios/ios_context_metal_impeller.h @@ -7,7 +7,6 @@ #include "flutter/fml/macros.h" #include "flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.h" -#include "flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalSkia.h" #include "flutter/shell/platform/darwin/ios/ios_context.h" #include "impeller/display_list/aiks_context.h" diff --git a/engine/src/flutter/shell/platform/darwin/ios/ios_external_view_embedder.mm b/engine/src/flutter/shell/platform/darwin/ios/ios_external_view_embedder.mm index fa274438ba..575071c6a5 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/ios_external_view_embedder.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/ios_external_view_embedder.mm @@ -59,10 +59,8 @@ PostPrerollResult IOSExternalViewEmbedder::PostPrerollAction( const fml::RefPtr& raster_thread_merger) { TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::PostPrerollAction"); FML_CHECK(platform_views_controller_); - BOOL impeller_enabled = ios_context_->GetBackend() != IOSRenderingBackend::kSkia; PostPrerollResult result = - [platform_views_controller_ postPrerollActionWithThreadMerger:raster_thread_merger - impellerEnabled:impeller_enabled]; + [platform_views_controller_ postPrerollActionWithThreadMerger:raster_thread_merger]; return result; } @@ -94,10 +92,8 @@ void IOSExternalViewEmbedder::EndFrame( bool should_resubmit_frame, const fml::RefPtr& raster_thread_merger) { TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::EndFrame"); - BOOL impeller_enabled = ios_context_->GetBackend() != IOSRenderingBackend::kSkia; [platform_views_controller_ endFrameWithResubmit:should_resubmit_frame - threadMerger:raster_thread_merger - impellerEnabled:impeller_enabled]; + threadMerger:raster_thread_merger]; } // |ExternalViewEmbedder| diff --git a/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h b/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h index 74968d5629..1013aca65e 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h +++ b/engine/src/flutter/shell/platform/darwin/ios/platform_view_ios.h @@ -30,7 +30,7 @@ namespace flutter { * The shell provides and requests for UI related data and this PlatformView subclass fulfills * it with iOS specific capabilities. As an example, the iOS embedding (the `FlutterEngine` and the * `FlutterViewController`) sends pointer data to the shell and receives the shell's request for a - * Skia GrDirectContext and supplies it. + * Impeller AiksContext and supplies it. * * Despite the name "view", this class is unrelated to UIViews on iOS and doesn't have the same * lifecycle. It's a long lived bridge owned by the `FlutterEngine` and can be attached and diff --git a/engine/src/flutter/testing/ios_scenario_app/bin/run_ios_tests.dart b/engine/src/flutter/testing/ios_scenario_app/bin/run_ios_tests.dart index 54c4c726fd..c98ff301fe 100644 --- a/engine/src/flutter/testing/ios_scenario_app/bin/run_ios_tests.dart +++ b/engine/src/flutter/testing/ios_scenario_app/bin/run_ios_tests.dart @@ -64,7 +64,6 @@ void main(List args) async { deviceIdentifier: results.option('device-identifier')!, osRuntime: results.option('os-runtime')!, osVersion: results.option('os-version')!, - withImpeller: results.flag('with-impeller'), dumpXcresultOnFailure: dumpXcresultOnFailurePath, ); completer.complete(); @@ -111,7 +110,6 @@ Future _run( required String deviceIdentifier, required String osRuntime, required String osVersion, - required bool withImpeller, required String? dumpXcresultOnFailure, }) async { // Terminate early on SIGINT. @@ -132,37 +130,35 @@ Future _run( cleanup.add(() => _deleteIfPresent(resultBundle)); - if (withImpeller) { - final process = await _runTests( - outScenariosPath: scenarioPath, - resultBundlePath: resultBundle.path, - osVersion: osVersion, - deviceName: deviceName, - iosEngineVariant: iosEngineVariant, - ); - cleanup.add(process.kill); + final process = await _runTests( + outScenariosPath: scenarioPath, + resultBundlePath: resultBundle.path, + osVersion: osVersion, + deviceName: deviceName, + iosEngineVariant: iosEngineVariant, + ); + cleanup.add(process.kill); - // Create a temporary directory, if needed. - var storePath = dumpXcresultOnFailure; - if (storePath == null) { - final dumpDir = io.Directory.systemTemp.createTempSync(); - storePath = dumpDir.path; - cleanup.add(() => dumpDir.delete(recursive: true)); - } - - if (await process.exitCode != 0) { - final String outputPath = _zipAndStoreFailedTestResults( - iosEngineVariant: iosEngineVariant, - resultBundle: resultBundle, - storePath: storePath, - ); - io.stderr.writeln('Failed test results are stored at $outputPath'); - throw _ToolFailure('test failed.'); - } else { - io.stderr.writeln('test succcess.'); - } - _deleteIfPresent(resultBundle); + // Create a temporary directory, if needed. + var storePath = dumpXcresultOnFailure; + if (storePath == null) { + final dumpDir = io.Directory.systemTemp.createTempSync(); + storePath = dumpDir.path; + cleanup.add(() => dumpDir.delete(recursive: true)); } + + if (await process.exitCode != 0) { + final String outputPath = _zipAndStoreFailedTestResults( + iosEngineVariant: iosEngineVariant, + resultBundle: resultBundle, + storePath: storePath, + ); + io.stderr.writeln('Failed test results are stored at $outputPath'); + throw _ToolFailure('test failed.'); + } else { + io.stderr.writeln('test succcess.'); + } + _deleteIfPresent(resultBundle); } /// Exception thrown when the tool should halt execution intentionally. @@ -198,11 +194,6 @@ final _args = help: 'The OS version of the iOS simulator device to use.', defaultsTo: '17.0', ) - ..addFlag( - 'with-impeller', - help: 'Whether to use the Impeller backend to run the tests.', - defaultsTo: true, - ) ..addOption( 'dump-xcresult-on-failure', help: diff --git a/engine/src/flutter/tools/gn b/engine/src/flutter/tools/gn index 34d780f3f3..e8c4524b2e 100755 --- a/engine/src/flutter/tools/gn +++ b/engine/src/flutter/tools/gn @@ -451,7 +451,7 @@ def to_gn_args(args): gn_args['is_clang'] = True else: gn_args['is_clang'] = args.clang - if args.slimpeller: + if args.target_os == 'ios' or args.slimpeller: gn_args['skia_enable_graphite'] = False gn_args['skia_enable_ganesh'] = False gn_args['slimpeller'] = True