From b95548e31c208e911fccb251285647518b1131fd Mon Sep 17 00:00:00 2001 From: Jackson Gardner Date: Wed, 28 Aug 2024 13:19:48 -0700 Subject: [PATCH] Don't remove `toString` implementations while in debug mode. (#154216) This matches the behavior of AOT/VM compilation. --- .../lib/src/build_system/targets/web.dart | 40 +++++++++++++++---- .../build_system/targets/web_test.dart | 10 +++-- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart index aaf3a26ae2f..61789ffee62 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/web.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart @@ -284,6 +284,36 @@ class Dart2WasmTarget extends Dart2WebTarget { @override final WasmCompilerConfig compilerConfig; + /// List the preconfigured build options for a given build mode. + List buildModeOptions(BuildMode mode, List dartDefines) => + switch (mode) { + BuildMode.debug => [ + // These checks allow the CLI to override the value of this define for unit + // testing the framework. + if (!dartDefines.any((String define) => define.startsWith('dart.vm.profile'))) + '-Ddart.vm.profile=false', + if (!dartDefines.any((String define) => define.startsWith('dart.vm.product'))) + '-Ddart.vm.product=false', + ], + BuildMode.profile => [ + // These checks allow the CLI to override the value of this define for + // benchmarks with most timeline traces disabled. + if (!dartDefines.any((String define) => define.startsWith('dart.vm.profile'))) + '-Ddart.vm.profile=true', + if (!dartDefines.any((String define) => define.startsWith('dart.vm.product'))) + '-Ddart.vm.product=false', + '--extra-compiler-option=--delete-tostring-package-uri=dart:ui', + '--extra-compiler-option=--delete-tostring-package-uri=package:flutter', + ], + BuildMode.release => [ + '-Ddart.vm.profile=false', + '-Ddart.vm.product=true', + '--extra-compiler-option=--delete-tostring-package-uri=dart:ui', + '--extra-compiler-option=--delete-tostring-package-uri=package:flutter', + ], + _ => throw Exception('Unknown BuildMode: $mode') + }; + @override Future build(Environment environment) async { final String? buildModeEnvironment = environment.defines[kBuildMode]; @@ -297,6 +327,7 @@ class Dart2WasmTarget extends Dart2WebTarget { final File depFile = environment.buildDir.childFile('dart2wasm.d'); final String platformBinariesPath = artifacts.getHostArtifact(HostArtifact.webPlatformKernelFolder).path; final String platformFilePath = environment.fileSystem.path.join(platformBinariesPath, 'dart2wasm_platform.dill'); + final List dartDefines = computeDartDefines(environment); final List compilationArgs = [ artifacts.getArtifactPath(Artifact.engineDartBinary, platform: TargetPlatform.web_javascript), @@ -304,18 +335,13 @@ class Dart2WasmTarget extends Dart2WebTarget { 'wasm', '--packages=${findPackageConfigFileOrDefault(environment.projectDir).path}', '--extra-compiler-option=--platform=$platformFilePath', - '--extra-compiler-option=--delete-tostring-package-uri=dart:ui', - '--extra-compiler-option=--delete-tostring-package-uri=package:flutter', + ...buildModeOptions(buildMode, dartDefines), if (compilerConfig.renderer == WebRendererMode.skwasm) ...[ '--extra-compiler-option=--import-shared-memory', '--extra-compiler-option=--shared-memory-max-pages=32768', ], - if (buildMode == BuildMode.profile) - '-Ddart.vm.profile=true' - else if (buildMode == BuildMode.release) - '-Ddart.vm.product=true', ...decodeCommaSeparated(environment.defines, kExtraFrontEndOptions), - for (final String dartDefine in computeDartDefines(environment)) + for (final String dartDefine in dartDefines) '-D$dartDefine', '--extra-compiler-option=--depfile=${depFile.path}', diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart index d5c9a5a7e58..2408cbf2a80 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart @@ -35,8 +35,6 @@ const List _kDart2WasmLinuxArgs = [ 'wasm', '--packages=/.dart_tool/package_config.json', '--extra-compiler-option=--platform=HostArtifact.webPlatformKernelFolder/dart2wasm_platform.dill', - '--extra-compiler-option=--delete-tostring-package-uri=dart:ui', - '--extra-compiler-option=--delete-tostring-package-uri=package:flutter', ]; void main() { @@ -1034,12 +1032,16 @@ void main() { processManager.addCommand(FakeCommand( command: [ ..._kDart2WasmLinuxArgs, + '-Ddart.vm.profile=${buildMode == 'profile'}', + '-Ddart.vm.product=${buildMode == 'release'}', + if (buildMode != 'debug') ...[ + '--extra-compiler-option=--delete-tostring-package-uri=dart:ui', + '--extra-compiler-option=--delete-tostring-package-uri=package:flutter', + ], if (renderer == WebRendererMode.skwasm) ...[ '--extra-compiler-option=--import-shared-memory', '--extra-compiler-option=--shared-memory-max-pages=32768', ], - if (buildMode != 'debug') - '-Ddart.vm.${buildMode == 'release' ? 'product' : 'profile' }=true', ...defines.map((String define) => '-D$define'), if (renderer == WebRendererMode.skwasm) ...[ '-DFLUTTER_WEB_AUTO_DETECT=false',