From d23be7a07de3bd7f02db367fce52eff79021df24 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Thu, 8 Aug 2024 09:27:21 -0700 Subject: [PATCH] [web] Fix reading of the --local-web-sdk flag and remove the copy of useLocalWebSdk in DebuggingOptions (#152642) --- packages/flutter_tools/lib/src/commands/run.dart | 15 --------------- packages/flutter_tools/lib/src/commands/test.dart | 6 ++++-- packages/flutter_tools/lib/src/device.dart | 12 ++++-------- .../lib/src/drive/web_driver_service.dart | 2 -- .../lib/src/isolated/resident_web_runner.dart | 2 +- .../lib/src/runner/flutter_command.dart | 15 +++++++++++---- .../test/commands.shard/hermetic/run_test.dart | 2 +- .../runner/flutter_command_test.dart | 12 ++++++++++++ 8 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index c8920f2a8c..cc718b4515 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart @@ -235,19 +235,6 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment bool get useWasm => boolArg(FlutterOptions.kWebWasmFlag); - bool get useLocalCanvasKit { - // If we have specified not to use CDN, use local CanvasKit - if (!boolArg(FlutterOptions.kWebResourcesCdnFlag)) { - return true; - } - - // If we are using a locally built web sdk, we should use local CanvasKit - if (stringArg(FlutterGlobalOptions.kLocalWebSDKOption, global: true) != null) { - return true; - } - return false; - } - WebRendererMode get webRenderer => WebRendererMode.fromCliOption( stringArg(FlutterOptions.kWebRendererFlag), useWasm: useWasm @@ -287,7 +274,6 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment webHeaders: webHeaders, webRenderer: webRenderer, webUseWasm: useWasm, - webUseLocalCanvaskit: useLocalCanvasKit, enableImpeller: enableImpeller, enableVulkanValidation: enableVulkanValidation, uninstallFirst: uninstallFirst, @@ -339,7 +325,6 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment webHeaders: webHeaders, webRenderer: webRenderer, webUseWasm: useWasm, - webUseLocalCanvaskit: useLocalCanvasKit, vmserviceOutFile: stringArg('vmservice-out-file'), fastStart: argParser.options.containsKey('fast-start') && boolArg('fast-start') diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart index 459adcc001..e5510193f7 100644 --- a/packages/flutter_tools/lib/src/commands/test.dart +++ b/packages/flutter_tools/lib/src/commands/test.dart @@ -356,7 +356,10 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts { final List plainNames = stringsArg('plain-name'); final String? tags = stringArg('tags'); final String? excludeTags = stringArg('exclude-tags'); - final BuildInfo buildInfo = await getBuildInfo(forcedBuildMode: BuildMode.debug); + final BuildInfo buildInfo = await getBuildInfo( + forcedBuildMode: BuildMode.debug, + forcedUseLocalCanvasKit: true + ); TestTimeRecorder? testTimeRecorder; if (verbose) { @@ -414,7 +417,6 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts { webRenderer: webRenderer, printDtd: boolArg(FlutterGlobalOptions.kPrintDtd, global: true), webUseWasm: useWasm, - webUseLocalCanvaskit: true, ); String? testAssetDirectory; diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 7c4f32dfa5..fa198f535a 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart @@ -994,7 +994,6 @@ class DebuggingOptions { this.webLaunchUrl, WebRendererMode? webRenderer, this.webUseWasm = false, - this.webUseLocalCanvaskit = false, this.vmserviceOutFile, this.fastStart = false, this.nullAssertions = false, @@ -1031,7 +1030,6 @@ class DebuggingOptions { this.webHeaders = const {}, WebRendererMode? webRenderer, this.webUseWasm = false, - this.webUseLocalCanvaskit = false, this.cacheSkSL = false, this.traceAllowlist, this.enableImpeller = ImpellerStatus.platformDefault, @@ -1118,7 +1116,6 @@ class DebuggingOptions { required this.webLaunchUrl, required this.webRenderer, required this.webUseWasm, - required this.webUseLocalCanvaskit, required this.vmserviceOutFile, required this.fastStart, required this.nullAssertions, @@ -1217,9 +1214,6 @@ class DebuggingOptions { /// Whether to compile to webassembly final bool webUseWasm; - /// If true, serve CanvasKit assets locally rather than using the CDN. - final bool webUseLocalCanvaskit; - /// A file where the VM Service URL should be written after the application is started. final String? vmserviceOutFile; final bool fastStart; @@ -1329,7 +1323,6 @@ class DebuggingOptions { 'webHeaders': webHeaders, 'webRenderer': webRenderer.name, 'webUseWasm': webUseWasm, - 'webUseLocalCanvaskit': webUseLocalCanvaskit, 'vmserviceOutFile': vmserviceOutFile, 'fastStart': fastStart, 'nullAssertions': nullAssertions, @@ -1345,6 +1338,10 @@ class DebuggingOptions { 'ipv6': ipv6, 'google3WorkspaceRoot': google3WorkspaceRoot, 'printDtd': printDtd, + // TODO(jsimmons): This field is required for backward compatibility with + // the flutter_tools binary that is currently checked into Google3. + // Remove this when that binary has been updated. + 'webUseLocalCanvaskit': false, }; static DebuggingOptions fromJson(Map json, BuildInfo buildInfo) => @@ -1391,7 +1388,6 @@ class DebuggingOptions { webLaunchUrl: json['webLaunchUrl'] as String?, webRenderer: WebRendererMode.values.byName(json['webRenderer']! as String), webUseWasm: json['webUseWasm']! as bool, - webUseLocalCanvaskit: json['webUseLocalCanvaskit']! as bool, vmserviceOutFile: json['vmserviceOutFile'] as String?, fastStart: json['fastStart']! as bool, nullAssertions: json['nullAssertions']! as bool, diff --git a/packages/flutter_tools/lib/src/drive/web_driver_service.dart b/packages/flutter_tools/lib/src/drive/web_driver_service.dart index de5723414e..4a0c591436 100644 --- a/packages/flutter_tools/lib/src/drive/web_driver_service.dart +++ b/packages/flutter_tools/lib/src/drive/web_driver_service.dart @@ -78,7 +78,6 @@ class WebDriverService extends DriverService { hostname: debuggingOptions.hostname, webRenderer: debuggingOptions.webRenderer, webUseWasm: debuggingOptions.webUseWasm, - webUseLocalCanvaskit: debuggingOptions.webUseLocalCanvaskit, ) : DebuggingOptions.enabled( buildInfo, @@ -87,7 +86,6 @@ class WebDriverService extends DriverService { disablePortPublication: debuggingOptions.disablePortPublication, webRenderer: debuggingOptions.webRenderer, webUseWasm: debuggingOptions.webUseWasm, - webUseLocalCanvaskit: debuggingOptions.webUseLocalCanvaskit, ), stayResident: true, flutterProject: FlutterProject.current(), diff --git a/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart b/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart index c212a0ed63..19077cd6ab 100644 --- a/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart +++ b/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart @@ -319,7 +319,7 @@ Please provide a valid TCP port (an integer between 0 and 65535, inclusive). ddcModuleSystem: debuggingOptions.buildInfo.ddcModuleFormat == DdcModuleFormat.ddc, webRenderer: debuggingOptions.webRenderer, isWasm: debuggingOptions.webUseWasm, - useLocalCanvasKit: debuggingOptions.webUseLocalCanvaskit, + useLocalCanvasKit: debuggingOptions.buildInfo.useLocalCanvasKit, rootDirectory: fileSystem.directory(projectRootPath), ); Uri url = await device!.devFS!.create(); diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 997fdb0311..9be18ca99e 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -1191,7 +1191,11 @@ abstract class FlutterCommand extends Command { /// /// Throws a [ToolExit] if the current set of options is not compatible with /// each other. - Future getBuildInfo({BuildMode? forcedBuildMode, File? forcedTargetFile}) async { + Future getBuildInfo({ + BuildMode? forcedBuildMode, + File? forcedTargetFile, + bool? forcedUseLocalCanvasKit, + }) async { final bool trackWidgetCreation = argParser.options.containsKey('track-widget-creation') && boolArg('track-widget-creation'); @@ -1308,9 +1312,12 @@ abstract class FlutterCommand extends Command { final bool useCdn = !argParser.options.containsKey(FlutterOptions.kWebResourcesCdnFlag) || boolArg(FlutterOptions.kWebResourcesCdnFlag); - final bool useLocalWebSdk = argParser.options.containsKey(FlutterGlobalOptions.kLocalWebSDKOption) - && stringArg(FlutterGlobalOptions.kLocalWebSDKOption, global: true) != null; - final bool useLocalCanvasKit = !useCdn || useLocalWebSdk; + bool useLocalWebSdk = false; + if (globalResults?.wasParsed(FlutterGlobalOptions.kLocalWebSDKOption) ?? false) { + useLocalWebSdk = stringArg(FlutterGlobalOptions.kLocalWebSDKOption, global: true) != null; + } + final bool useLocalCanvasKit = forcedUseLocalCanvasKit + ?? (!useCdn || useLocalWebSdk); final String? defaultFlavor = project.manifest.defaultFlavor; final String? cliFlavor = argParser.options.containsKey('flavor') ? stringArg('flavor') : null; 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 b9550ecd97..ae5e5820d9 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart @@ -1459,7 +1459,7 @@ class TestRunCommandForUsageValues extends RunCommand { } @override - Future getBuildInfo({FlutterProject? project, BuildMode? forcedBuildMode, File? forcedTargetFile}) async { + Future getBuildInfo({FlutterProject? project, BuildMode? forcedBuildMode, File? forcedTargetFile, bool? forcedUseLocalCanvasKit}) async { return const BuildInfo(BuildMode.debug, null, treeShakeIcons: false, packageConfigPath: '.dart_tool/package_config.json'); } } diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart index 42470076a2..47482955fb 100644 --- a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart @@ -700,6 +700,18 @@ void main() { ProcessManager: () => processManager, }); + testUsingContext('sets useLocalCanvasKit in BuildInfo', () async { + final DummyFlutterCommand flutterCommand = DummyFlutterCommand(); + final CommandRunner runner = createTestCommandRunner(flutterCommand); + fileSystem.directory('engine/src/out/wasm_release').createSync(recursive: true); + await runner.run(['--local-web-sdk=wasm_release', '--local-engine-src-path=engine/src', 'dummy']); + final BuildInfo buildInfo = await flutterCommand.getBuildInfo(forcedBuildMode: BuildMode.debug); + expect(buildInfo.useLocalCanvasKit, isTrue); + }, overrides: { + FileSystem: () => fileSystem, + ProcessManager: () => processManager, + }); + testUsingContext('dds options', () async { final FakeDdsCommand ddsCommand = FakeDdsCommand(); final CommandRunner runner = createTestCommandRunner(ddsCommand);