From b81b1e28a33ef7f82cf0391171ad8f74ad858fe8 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 3 Mar 2023 13:13:54 -0800 Subject: [PATCH] [flutter_tool] add enable-embedder-api flag (#121895) [flutter_tool] add enable-embedder-api flag --- packages/flutter_tools/lib/src/commands/run.dart | 4 ++++ packages/flutter_tools/lib/src/device.dart | 7 +++++++ packages/flutter_tools/lib/src/runner/flutter_command.dart | 7 +++++++ .../test/commands.shard/hermetic/drive_test.dart | 1 + .../test/commands.shard/hermetic/run_test.dart | 1 + packages/flutter_tools/test/general.shard/device_test.dart | 2 ++ .../general.shard/ios/ios_device_start_prebuilt_test.dart | 2 ++ 7 files changed, 24 insertions(+) diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index b137b0b100..2fd7a88bd9 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart @@ -183,6 +183,7 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment addAndroidSpecificBuildOptions(hide: !verboseHelp); usesFatalWarningsOption(verboseHelp: verboseHelp); addEnableImpellerFlag(verboseHelp: verboseHelp); + addEnableEmbedderApiFlag(verboseHelp: verboseHelp); } bool get traceStartup => boolArgDeprecated('trace-startup'); @@ -196,6 +197,7 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment bool get trackWidgetCreation => boolArgDeprecated('track-widget-creation'); bool get enableImpeller => boolArgDeprecated('enable-impeller'); bool get uninstallFirst => boolArgDeprecated('uninstall-first'); + bool get enableEmbedderApi => boolArgDeprecated('enable-embedder-api'); @override bool get reportNullSafety => true; @@ -234,6 +236,7 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment enableImpeller: enableImpeller, uninstallFirst: uninstallFirst, enableDartProfiling: enableDartProfiling, + enableEmbedderApi: enableEmbedderApi, ); } else { return DebuggingOptions.enabled( @@ -282,6 +285,7 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment uninstallFirst: uninstallFirst, serveObservatory: boolArgDeprecated('serve-observatory'), enableDartProfiling: enableDartProfiling, + enableEmbedderApi: enableEmbedderApi, ); } } diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index deb3761fa0..484f447fbd 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart @@ -967,6 +967,7 @@ class DebuggingOptions { this.uninstallFirst = false, this.serveObservatory = true, this.enableDartProfiling = true, + this.enableEmbedderApi = false, }) : debuggingEnabled = true; DebuggingOptions.disabled(this.buildInfo, { @@ -986,6 +987,7 @@ class DebuggingOptions { this.enableImpeller = false, this.uninstallFirst = false, this.enableDartProfiling = true, + this.enableEmbedderApi = false, }) : debuggingEnabled = false, useTestFonts = false, startPaused = false, @@ -1059,6 +1061,7 @@ class DebuggingOptions { required this.uninstallFirst, required this.serveObservatory, required this.enableDartProfiling, + required this.enableEmbedderApi, }); final bool debuggingEnabled; @@ -1096,6 +1099,7 @@ class DebuggingOptions { final bool enableImpeller; final bool serveObservatory; final bool enableDartProfiling; + final bool enableEmbedderApi; /// Whether the tool should try to uninstall a previously installed version of the app. /// @@ -1179,6 +1183,7 @@ class DebuggingOptions { // Tell the VM service to listen on all interfaces, don't restrict to the loopback. if (interfaceType == IOSDeviceConnectionInterface.network) '--vm-service-host=${ipv6 ? '::0' : '0.0.0.0'}', + if (enableEmbedderApi) '--enable-embedder-api', ]; } @@ -1225,6 +1230,7 @@ class DebuggingOptions { 'enableImpeller': enableImpeller, 'serveObservatory': serveObservatory, 'enableDartProfiling': enableDartProfiling, + 'enableEmbedderApi': enableEmbedderApi, }; static DebuggingOptions fromJson(Map json, BuildInfo buildInfo) => @@ -1273,6 +1279,7 @@ class DebuggingOptions { uninstallFirst: (json['uninstallFirst'] as bool?) ?? false, serveObservatory: (json['serveObservatory'] as bool?) ?? false, enableDartProfiling: (json['enableDartProfiling'] as bool?) ?? true, + enableEmbedderApi: (json['enableEmbedderApi'] as bool?) ?? false, ); } diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 08378e0627..b1fac417f2 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -1043,6 +1043,13 @@ abstract class FlutterCommand extends Command { ); } + void addEnableEmbedderApiFlag({required bool verboseHelp}) { + argParser.addFlag('enable-embedder-api', + hide: !verboseHelp, + help: 'Whether to enable the experimental embedder API on iOS.', + ); + } + /// Compute the [BuildInfo] for the current flutter command. /// Commands that build multiple build modes can pass in a [forcedBuildMode] /// to be used instead of parsing flags. diff --git a/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart index 04cf404149..ade6283275 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart @@ -388,6 +388,7 @@ void main() { '--trace-systrace', '--enable-software-rendering', '--skia-deterministic-rendering', + '--enable-embedder-api', ]), throwsToolExit()); final DebuggingOptions options = await command.createDebuggingOptions(false); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart index 9df39cd3b9..4aa6cfcf46 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart @@ -938,6 +938,7 @@ void main() { '--trace-systrace', '--enable-software-rendering', '--skia-deterministic-rendering', + '--enable-embedder-api', ]), throwsToolExit()); final DebuggingOptions options = await command.createDebuggingOptions(false); diff --git a/packages/flutter_tools/test/general.shard/device_test.dart b/packages/flutter_tools/test/general.shard/device_test.dart index dcd6b2bc23..757a3ecee3 100644 --- a/packages/flutter_tools/test/general.shard/device_test.dart +++ b/packages/flutter_tools/test/general.shard/device_test.dart @@ -737,6 +737,7 @@ void main() { deviceVmServicePort: 1234, enableImpeller: true, enableDartProfiling: false, + enableEmbedderApi: true, ); final String jsonString = json.encode(original.toJson()); final Map decoded = castStringKeyedMap(json.decode(jsonString))!; @@ -749,6 +750,7 @@ void main() { expect(deserialized.deviceVmServicePort, original.deviceVmServicePort); expect(deserialized.enableImpeller, original.enableImpeller); expect(deserialized.enableDartProfiling, original.enableDartProfiling); + expect(deserialized.enableEmbedderApi, original.enableEmbedderApi); }); }); diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart index 916c3e2d0a..7f069bcccb 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart @@ -353,6 +353,7 @@ void main() { '--cache-sksl', '--purge-persistent-cache', '--enable-impeller', + '--enable-embedder-api', ].join(' '), ], environment: const { @@ -405,6 +406,7 @@ void main() { verboseSystemLogs: true, nullAssertions: true, enableImpeller: true, + enableEmbedderApi: true, ), platformArgs: {}, );