From 015cdfd1574da2c4d9320408717e51298fb46652 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 8 Oct 2020 15:51:26 -0700 Subject: [PATCH 1/9] Switch macOS to proc table --- shell/platform/darwin/macos/BUILD.gn | 5 ++- .../macos/framework/Source/FlutterEngine.mm | 36 ++++++++++--------- .../framework/Source/FlutterEngine_Internal.h | 5 +++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/shell/platform/darwin/macos/BUILD.gn b/shell/platform/darwin/macos/BUILD.gn index c844d92413f3c..5ef8d0989efb0 100644 --- a/shell/platform/darwin/macos/BUILD.gn +++ b/shell/platform/darwin/macos/BUILD.gn @@ -82,7 +82,10 @@ source_set("flutter_framework_source") { public_configs = [ "//flutter:config" ] - defines = [ "FLUTTER_FRAMEWORK" ] + defines = [ + "FLUTTER_FRAMEWORK", + "FLUTTER_ENGINE_NO_PROTOTYPES", + ] cflags_objcc = [ "-fobjc-arc" ] diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 0ef5ad9654ef6..6ba04a7a9720f 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -218,6 +218,8 @@ - (instancetype)initWithName:(NSString*)labelPrefix _messageHandlers = [[NSMutableDictionary alloc] init]; _textures = [[NSMutableDictionary alloc] init]; _allowHeadlessExecution = allowHeadlessExecution; + _embedderAPI.struct_size = sizeof(FlutterEngineProcTable); + FlutterEngineGetProcAddresses(&_embedderAPI); NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver:self @@ -306,14 +308,14 @@ - (BOOL)runWithEntrypoint:(NSString*)entrypoint { flutterArguments.aot_data = _aotData.get(); } - FlutterEngineResult result = FlutterEngineInitialize( + FlutterEngineResult result = _embedderAPI.Initialize( FLUTTER_ENGINE_VERSION, &rendererConfig, &flutterArguments, (__bridge void*)(self), &_engine); if (result != kSuccess) { NSLog(@"Failed to initialize Flutter engine: error %d", result); return NO; } - result = FlutterEngineRunInitialized(_engine); + result = _embedderAPI.RunInitialized(_engine); if (result != kSuccess) { NSLog(@"Failed to run an initialized engine: error %d", result); return NO; @@ -409,7 +411,7 @@ - (void)updateDisplayConfig { display.refresh_rate = round(refreshRate); std::vector displays = {display}; - FlutterEngineNotifyDisplayUpdate(_engine, kFlutterEngineDisplaysUpdateTypeStartup, + _embedderAPI.NotifyDisplayUpdate(_engine, kFlutterEngineDisplaysUpdateTypeStartup, displays.data(), displays.size()); } @@ -433,11 +435,11 @@ - (void)updateWindowMetrics { .left = static_cast(scaledBounds.origin.x), .top = static_cast(scaledBounds.origin.y), }; - FlutterEngineSendWindowMetricsEvent(_engine, &windowMetricsEvent); + _embedderAPI.SendWindowMetricsEvent(_engine, &windowMetricsEvent); } - (void)sendPointerEvent:(const FlutterPointerEvent&)event { - FlutterEngineSendPointerEvent(_engine, &event, 1); + _embedderAPI.SendPointerEvent(_engine, &event, 1); } #pragma mark - Private methods @@ -462,7 +464,7 @@ - (void)sendUserLocales { std::transform( flutterLocales.begin(), flutterLocales.end(), std::back_inserter(flutterLocaleList), [](const auto& arg) -> const auto* { return &arg; }); - FlutterEngineUpdateLocales(_engine, flutterLocaleList.data(), flutterLocaleList.size()); + _embedderAPI.UpdateLocales(_engine, flutterLocaleList.data(), flutterLocaleList.size()); } - (bool)engineCallbackOnMakeCurrent { @@ -500,7 +502,7 @@ - (void)engineCallbackOnPlatformMessage:(const FlutterPlatformMessage*)message { FlutterBinaryReply binaryResponseHandler = ^(NSData* response) { if (responseHandle) { - FlutterEngineSendPlatformMessageResponse(self->_engine, responseHandle, + _embedderAPI.SendPlatformMessageResponse(self->_engine, responseHandle, static_cast(response.bytes), response.length); responseHandle = NULL; @@ -527,7 +529,7 @@ - (void)shutDownEngine { return; } - FlutterEngineResult result = FlutterEngineDeinitialize(_engine); + FlutterEngineResult result = _embedderAPI.Deinitialize(_engine); if (result != kSuccess) { NSLog(@"Could not de-initialize the Flutter engine: error %d", result); } @@ -535,7 +537,7 @@ - (void)shutDownEngine { // Balancing release for the retain in the task runner dispatch table. CFRelease((CFTypeRef)self); - result = FlutterEngineShutdown(_engine); + result = _embedderAPI.Shutdown(_engine); if (result != kSuccess) { NSLog(@"Failed to shut down Flutter engine: error %d", result); } @@ -568,7 +570,7 @@ - (void)sendOnChannel:(NSString*)channel delete captures; }; - FlutterEngineResult create_result = FlutterPlatformMessageCreateResponseHandle( + FlutterEngineResult create_result = _embedderAPI.PlatformMessageCreateResponseHandle( _engine, message_reply, captures.get(), &response_handle); if (create_result != kSuccess) { NSLog(@"Failed to create a FlutterPlatformMessageResponseHandle (%d)", create_result); @@ -585,7 +587,7 @@ - (void)sendOnChannel:(NSString*)channel .response_handle = response_handle, }; - FlutterEngineResult message_result = FlutterEngineSendPlatformMessage(_engine, &platformMessage); + FlutterEngineResult message_result = _embedderAPI.SendPlatformMessage(_engine, &platformMessage); if (message_result != kSuccess) { NSLog(@"Failed to send message to Flutter engine on channel '%@' (%d).", channel, message_result); @@ -593,7 +595,7 @@ - (void)sendOnChannel:(NSString*)channel if (response_handle != nullptr) { FlutterEngineResult release_result = - FlutterPlatformMessageReleaseResponseHandle(_engine, response_handle); + _embedderAPI.PlatformMessageReleaseResponseHandle(_engine, response_handle); if (release_result != kSuccess) { NSLog(@"Failed to release the response handle (%d).", release_result); }; @@ -628,30 +630,30 @@ - (int64_t)registerTexture:(id)texture { FlutterExternalTextureGL* FlutterTexture = [[FlutterExternalTextureGL alloc] initWithFlutterTexture:texture]; int64_t textureID = [FlutterTexture textureID]; - FlutterEngineRegisterExternalTexture(_engine, textureID); + _embedderAPI.RegisterExternalTexture(_engine, textureID); _textures[@(textureID)] = FlutterTexture; return textureID; } - (void)textureFrameAvailable:(int64_t)textureID { - FlutterEngineMarkExternalTextureFrameAvailable(_engine, textureID); + _embedderAPI.MarkExternalTextureFrameAvailable(_engine, textureID); } - (void)unregisterTexture:(int64_t)textureID { - FlutterEngineUnregisterExternalTexture(_engine, textureID); + _embedderAPI.UnregisterExternalTexture(_engine, textureID); [_textures removeObjectForKey:@(textureID)]; } #pragma mark - Task runner integration - (void)postMainThreadTask:(FlutterTask)task targetTimeInNanoseconds:(uint64_t)targetTime { - const auto engine_time = FlutterEngineGetCurrentTime(); + const auto engine_time = _embedderAPI.GetCurrentTime(); __weak FlutterEngine* weak_self = self; auto worker = ^{ FlutterEngine* strong_self = weak_self; if (strong_self && strong_self->_engine) { - auto result = FlutterEngineRunTask(strong_self->_engine, &task); + auto result = _embedderAPI.RunTask(strong_self->_engine, &task); if (result != kSuccess) { NSLog(@"Could not post a task to the Flutter engine."); } diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h index 2a01586efa27e..c8fbd4341db42 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h @@ -21,6 +21,11 @@ */ @property(nonatomic, readonly, nullable) NSOpenGLContext* resourceContext; +/** + * Function pointers for interacting with the embedder.h API. + */ +@property(nonatomic) FlutterEngineProcTable embedderAPI; + /** * Informs the engine that the associated view controller's view size has changed. */ From f35bb1423dc9cb9e9c3530e15ba07daef0b4d300 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 8 Oct 2020 17:52:04 -0700 Subject: [PATCH 2/9] Standardize unit test file name for macOS to match iOS --- shell/platform/darwin/macos/BUILD.gn | 2 +- .../Source/{FlutterEngineUnittests.mm => FlutterEngineTest.mm} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename shell/platform/darwin/macos/framework/Source/{FlutterEngineUnittests.mm => FlutterEngineTest.mm} (100%) diff --git a/shell/platform/darwin/macos/BUILD.gn b/shell/platform/darwin/macos/BUILD.gn index 5ef8d0989efb0..0fe32a31da12c 100644 --- a/shell/platform/darwin/macos/BUILD.gn +++ b/shell/platform/darwin/macos/BUILD.gn @@ -116,7 +116,7 @@ executable("flutter_desktop_darwin_unittests") { testonly = true sources = [ - "framework/Source/FlutterEngineUnittests.mm", + "framework/Source/FlutterEngineTest.mm", "framework/Source/FlutterViewControllerTest.mm", ] diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineUnittests.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm similarity index 100% rename from shell/platform/darwin/macos/framework/Source/FlutterEngineUnittests.mm rename to shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm From baa598a5349f7fdc673f88bc12df94b3ecd5bff3 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 8 Oct 2020 17:56:05 -0700 Subject: [PATCH 3/9] Standardize test naming to be less redundant --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 2 +- .../macos/framework/Source/FlutterViewControllerTest.mm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 1ad6c564e7daf..2aecdf075fae5 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -9,7 +9,7 @@ namespace flutter::testing { -TEST(FlutterEngineTest, FlutterEngineCanLaunch) { +TEST(FlutterEngine, CanLaunch) { NSString* fixtures = @(testing::GetFixturesPath()); FlutterDartProject* project = [[FlutterDartProject alloc] initWithAssetsPath:fixtures diff --git a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm index e696393b56bf7..bb4844406adb8 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm @@ -34,7 +34,7 @@ id mockViewController(NSString* pasteboardString) { return viewControllerMock; } -TEST(FlutterViewControllerTest, HasStringsWhenPasteboardEmpty) { +TEST(FlutterViewController, HasStringsWhenPasteboardEmpty) { // Mock FlutterViewController so that it behaves like the pasteboard is empty. id viewControllerMock = mockViewController(nil); @@ -53,7 +53,7 @@ id mockViewController(NSString* pasteboardString) { ASSERT_FALSE(valueAfterClear); } -TEST(FlutterViewControllerTest, HasStringsWhenPasteboardFull) { +TEST(FlutterViewController, HasStringsWhenPasteboardFull) { // Mock FlutterViewController so that it behaves like the pasteboard has a // valid string. id viewControllerMock = mockViewController(@"some string"); From cbfb035daa8b433c906e4a42ed0fb5ede5d4bc83 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 8 Oct 2020 17:58:51 -0700 Subject: [PATCH 4/9] Fix overuse of ASSERT --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 4 ++-- .../macos/framework/Source/FlutterViewControllerTest.mm | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 2aecdf075fae5..9c27cac179ee8 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -17,8 +17,8 @@ FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"test" project:project allowHeadlessExecution:true]; - ASSERT_TRUE([engine runWithEntrypoint:@"main"]); - ASSERT_TRUE(engine.running); + EXPECT_TRUE([engine runWithEntrypoint:@"main"]); + EXPECT_TRUE(engine.running); [engine shutDownEngine]; } diff --git a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm index bb4844406adb8..ab73278d9c5bf 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm @@ -49,8 +49,8 @@ id mockViewController(NSString* pasteboardString) { FlutterMethodCall* methodCallAfterClear = [FlutterMethodCall methodCallWithMethodName:@"Clipboard.hasStrings" arguments:nil]; [viewControllerMock handleMethodCall:methodCallAfterClear result:resultAfterClear]; - ASSERT_TRUE(calledAfterClear); - ASSERT_FALSE(valueAfterClear); + EXPECT_TRUE(calledAfterClear); + EXPECT_FALSE(valueAfterClear); } TEST(FlutterViewController, HasStringsWhenPasteboardFull) { @@ -69,8 +69,8 @@ id mockViewController(NSString* pasteboardString) { FlutterMethodCall* methodCall = [FlutterMethodCall methodCallWithMethodName:@"Clipboard.hasStrings" arguments:nil]; [viewControllerMock handleMethodCall:methodCall result:result]; - ASSERT_TRUE(called); - ASSERT_TRUE(value); + EXPECT_TRUE(called); + EXPECT_TRUE(value); } } // flutter::testing From 08e701b38ae54956743d91f1916d0f3a9bbcb1ee Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 12 Oct 2020 11:39:40 -0700 Subject: [PATCH 5/9] PoC test, with supporting macro --- shell/platform/darwin/macos/BUILD.gn | 1 + .../macos/framework/Source/FlutterEngine.mm | 5 +++ .../framework/Source/FlutterEngineTest.mm | 37 +++++++++++++++++-- .../framework/Source/FlutterEngine_Internal.h | 4 +- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/shell/platform/darwin/macos/BUILD.gn b/shell/platform/darwin/macos/BUILD.gn index 0fe32a31da12c..36dd46512deaa 100644 --- a/shell/platform/darwin/macos/BUILD.gn +++ b/shell/platform/darwin/macos/BUILD.gn @@ -129,6 +129,7 @@ executable("flutter_desktop_darwin_unittests") { ":flutter_framework_source", "//flutter/shell/platform/darwin/common:framework_shared", "//flutter/shell/platform/embedder:embedder_as_internal_library", + "//flutter/shell/platform/embedder:embedder_test_utils", "//flutter/testing", "//flutter/testing:dart", "//flutter/testing:skia", diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 6ba04a7a9720f..bdd639e45e932 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -105,6 +105,7 @@ - (instancetype)initWithPlugin:(nonnull NSString*)pluginKey @implementation FlutterEngineRegistrar { NSString* _pluginKey; FlutterEngine* _flutterEngine; + FlutterEngineProcTable _embedderAPI; } - (instancetype)initWithPlugin:(NSString*)pluginKey flutterEngine:(FlutterEngine*)flutterEngine { @@ -418,6 +419,10 @@ - (void)updateDisplayConfig { CVDisplayLinkRelease(displayLinkRef); } +- (FlutterEngineProcTable&)embedderAPI { + return _embedderAPI; +} + - (void)updateWindowMetrics { if (!_engine) { return; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 9c27cac179ee8..2071194329bcb 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -5,21 +5,50 @@ #import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h" #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h" +#include "flutter/shell/platform/embedder/embedder.h" +#include "flutter/shell/platform/embedder/test_utils/proc_table_replacement.h" #include "flutter/testing/testing.h" namespace flutter::testing { -TEST(FlutterEngine, CanLaunch) { +namespace { +// Returns an engine configured for the text fixture resource configuration. +FlutterEngine* CreateTestEngine() { NSString* fixtures = @(testing::GetFixturesPath()); FlutterDartProject* project = [[FlutterDartProject alloc] initWithAssetsPath:fixtures ICUDataPath:[fixtures stringByAppendingString:@"/icudtl.dat"]]; - FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"test" - project:project - allowHeadlessExecution:true]; + return [[FlutterEngine alloc] initWithName:@"test" project:project allowHeadlessExecution:true]; +} +} // namespace + +TEST(FlutterEngine, CanLaunch) { + FlutterEngine* engine = CreateTestEngine(); EXPECT_TRUE([engine runWithEntrypoint:@"main"]); EXPECT_TRUE(engine.running); [engine shutDownEngine]; } +TEST(FlutterEngine, MessengerSend) { + FlutterEngine* engine = CreateTestEngine(); + EXPECT_TRUE([engine runWithEntrypoint:@"main"]); + + NSData* test_message = [@"a message" dataUsingEncoding:NSUTF8StringEncoding]; + bool called = false; + + engine.embedderAPI.send_platform_message = MOCK_ENGINE_PROC( + send_platform_message, ([&called, test_message](auto engine, auto message) { + called = true; + EXPECT_STREQ(message->channel, "test"); + EXPECT_EQ(memcmp(message->message, test_message.bytes, message->message_size), 0); + return kSuccess; + })); + + [engine.binaryMessenger sendOnChannel:@"test" message:test_message]; + EXPECT_TRUE(called); + + // s_send_platform_message_validator = nullptr; + [engine shutDownEngine]; +} + } // flutter::testing diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h index c8fbd4341db42..48a27da52c5c7 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h @@ -6,7 +6,7 @@ #import -#import "flutter/shell/platform/embedder/embedder.h" +#include "flutter/shell/platform/embedder/embedder.h" @interface FlutterEngine () @@ -24,7 +24,7 @@ /** * Function pointers for interacting with the embedder.h API. */ -@property(nonatomic) FlutterEngineProcTable embedderAPI; +@property(nonatomic) FlutterEngineProcTable& embedderAPI; /** * Informs the engine that the associated view controller's view size has changed. From dd5c64431201d2037f8938675ea6e81b2001e26c Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Tue, 13 Oct 2020 09:22:50 -0700 Subject: [PATCH 6/9] Remove cruft --- .../platform/darwin/macos/framework/Source/FlutterEngineTest.mm | 1 - 1 file changed, 1 deletion(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 2071194329bcb..c7f543e8681b8 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -47,7 +47,6 @@ [engine.binaryMessenger sendOnChannel:@"test" message:test_message]; EXPECT_TRUE(called); - // s_send_platform_message_validator = nullptr; [engine shutDownEngine]; } From e9822214b9349fc7457a8567b1c32b141add57a8 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Tue, 13 Oct 2020 09:33:11 -0700 Subject: [PATCH 7/9] License file updates --- ci/licenses_golden/licenses_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index f13271aa91373..d4b2c65b71969 100755 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1048,7 +1048,7 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterAppDe FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm -FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEngineUnittests.mm +FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterExternalTextureGL.h FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterExternalTextureGL.mm From 5f9ff2d19e5efd85e46b8a12d9a059138f45cd7b Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 2 Nov 2020 11:10:32 -0800 Subject: [PATCH 8/9] Update recently added code to use the proc table --- .../macos/framework/Source/FlutterEngine.mm | 39 +++++++------------ 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index bdd639e45e932..23794ed354da9 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -27,16 +27,6 @@ static FlutterLocale FlutterLocaleFromNSLocale(NSLocale* locale) { return flutterLocale; } -namespace { - -struct AotDataDeleter { - void operator()(FlutterEngineAOTData aot_data) { FlutterEngineCollectAOTData(aot_data); } -}; - -using UniqueAotDataPtr = std::unique_ptr<_FlutterEngineAOTData, AotDataDeleter>; - -} - /** * Private interface declaration for FlutterEngine. */ @@ -85,10 +75,10 @@ - (BOOL)populateTextureWithIdentifier:(int64_t)textureID - (void)postMainThreadTask:(FlutterTask)task targetTimeInNanoseconds:(uint64_t)targetTime; /** - * Loads the AOT snapshots and instructions from the elf bundle (app_elf_snapshot.so) if it is - * present in the assets directory. + * Loads the AOT snapshots and instructions from the elf bundle (app_elf_snapshot.so) into _aotData, + * if it is present in the assets directory. */ -- (UniqueAotDataPtr)loadAOTData:(NSString*)assetsDir; +- (void)loadAOTData:(NSString*)assetsDir; @end @@ -202,7 +192,7 @@ @implementation FlutterEngine { NSMutableDictionary* _textures; // Pointer to the Dart AOT snapshot and instruction data. - UniqueAotDataPtr _aotData; + _FlutterEngineAOTData* _aotData; } - (instancetype)initWithName:(NSString*)labelPrefix project:(FlutterDartProject*)project { @@ -233,6 +223,9 @@ - (instancetype)initWithName:(NSString*)labelPrefix - (void)dealloc { [self shutDownEngine]; + if (_aotData) { + _embedderAPI.CollectAOTData(_aotData); + } } - (BOOL)runWithEntrypoint:(NSString*)entrypoint { @@ -304,9 +297,9 @@ - (BOOL)runWithEntrypoint:(NSString*)entrypoint { }; flutterArguments.custom_task_runners = &custom_task_runners; - _aotData = [self loadAOTData:_project.assetsPath]; + [self loadAOTData:_project.assetsPath]; if (_aotData) { - flutterArguments.aot_data = _aotData.get(); + flutterArguments.aot_data = _aotData; } FlutterEngineResult result = _embedderAPI.Initialize( @@ -329,9 +322,9 @@ - (BOOL)runWithEntrypoint:(NSString*)entrypoint { return YES; } -- (UniqueAotDataPtr)loadAOTData:(NSString*)assetsDir { - if (!FlutterEngineRunsAOTCompiledDartCode()) { - return nullptr; +- (void)loadAOTData:(NSString*)assetsDir { + if (!_embedderAPI.RunsAOTCompiledDartCode()) { + return; } BOOL isDirOut = false; // required for NSFileManager fileExistsAtPath. @@ -342,21 +335,17 @@ - (UniqueAotDataPtr)loadAOTData:(NSString*)assetsDir { NSString* elfPath = [NSString pathWithComponents:@[ assetsDir, @"app_elf_snapshot.so" ]]; if (![fileManager fileExistsAtPath:elfPath isDirectory:&isDirOut]) { - return nullptr; + return; } FlutterEngineAOTDataSource source = {}; source.type = kFlutterEngineAOTDataSourceTypeElfPath; source.elf_path = [elfPath cStringUsingEncoding:NSUTF8StringEncoding]; - FlutterEngineAOTData data = nullptr; - auto result = FlutterEngineCreateAOTData(&source, &data); + auto result = _embedderAPI.CreateAOTData(&source, &_aotData); if (result != kSuccess) { NSLog(@"Failed to load AOT data from: %@", elfPath); - return nullptr; } - - return UniqueAotDataPtr(data); } - (void)setViewController:(FlutterViewController*)controller { From 87d18d988601ca165adcebf80d7512b852d61299 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 2 Nov 2020 13:14:54 -0800 Subject: [PATCH 9/9] Update function names in test --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index c7f543e8681b8..a3f602a18432a 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -36,8 +36,8 @@ NSData* test_message = [@"a message" dataUsingEncoding:NSUTF8StringEncoding]; bool called = false; - engine.embedderAPI.send_platform_message = MOCK_ENGINE_PROC( - send_platform_message, ([&called, test_message](auto engine, auto message) { + engine.embedderAPI.SendPlatformMessage = MOCK_ENGINE_PROC( + SendPlatformMessage, ([&called, test_message](auto engine, auto message) { called = true; EXPECT_STREQ(message->channel, "test"); EXPECT_EQ(memcmp(message->message, test_message.bytes, message->message_size), 0);