diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index a27860f806fa6..6d0de14a71cfa 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -29,6 +29,16 @@ 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. */ @@ -76,6 +86,12 @@ - (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. + */ +- (UniqueAotDataPtr)loadAOTData:(NSString*)assetsDir; + @end #pragma mark - @@ -163,16 +179,6 @@ static bool OnAcquireExternalTexture(FlutterEngine* engine, #pragma mark - -namespace { - -struct AotDataDeleter { - void operator()(FlutterEngineAOTData aot_data) { FlutterEngineCollectAOTData(aot_data); } -}; - -using UniqueAotDataPtr = std::unique_ptr<_FlutterEngineAOTData, AotDataDeleter>; - -} - @implementation FlutterEngine { // The embedding-API-level engine object. FLUTTER_API_SYMBOL(FlutterEngine) _engine; @@ -289,7 +295,7 @@ - (BOOL)runWithEntrypoint:(NSString*)entrypoint { }; flutterArguments.custom_task_runners = &custom_task_runners; - _aotData = [self loadAotData:flutterArguments.assets_path]; + _aotData = [self loadAOTData:_project.assetsPath]; if (_aotData) { flutterArguments.aot_data = _aotData.get(); } @@ -313,12 +319,14 @@ - (BOOL)runWithEntrypoint:(NSString*)entrypoint { return YES; } -- (UniqueAotDataPtr)loadAotData:(std::string)assetsDir { +- (UniqueAotDataPtr)loadAOTData:(NSString*)assetsDir { if (!FlutterEngineRunsAOTCompiledDartCode()) { return nullptr; } - std::filesystem::path assetsFsDir(assetsDir); + // This is the location where the test fixture places the snapshot file. + // For applications built by Flutter tool, this is in "App.framework". + std::filesystem::path assetsFsDir(assetsDir.UTF8String); std::filesystem::path elfFile("app_elf_snapshot.so"); auto fullElfPath = assetsFsDir / elfFile;