Skip to content

Commit 7c89ec8

Browse files
authored
Remove toString() overrides in dart:ui/package:flutter in profile/release mode on wasm/vm targets (flutter#144763)
The flutter engine & framework can opt out of this optimization for individual classes / class hierarchies via: * `@pragma(flutter:keep-to-string)` * `@pragma(flutter:keep-to-string-in-subtypes)` Or by using the convenience constant `@keepToString` from `dart:ui`. => This aligns the build process more with g3 (which already does this) Closes flutter#52759
1 parent 7018685 commit 7c89ec8

File tree

5 files changed

+17
-0
lines changed

5 files changed

+17
-0
lines changed

packages/flutter_tools/lib/src/build_system/targets/web.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,16 @@ class Dart2WasmTarget extends Dart2WebTarget {
258258
decodeDartDefines(environment.defines, kDartDefines),
259259
);
260260

261+
assert(buildMode == BuildMode.release || buildMode == BuildMode.profile);
261262
final List<String> compilationArgs = <String>[
262263
artifacts.getArtifactPath(Artifact.engineDartBinary, platform: TargetPlatform.web_javascript),
263264
'compile',
264265
'wasm',
265266
'--packages=.dart_tool/package_config.json',
266267
'--extra-compiler-option=--dart-sdk=$dartSdkPath',
267268
'--extra-compiler-option=--platform=$platformFilePath',
269+
'--extra-compiler-option=--delete-tostring-package-uri=dart:ui',
270+
'--extra-compiler-option=--delete-tostring-package-uri=package:flutter',
268271
if (compilerConfig.renderer == WebRendererMode.skwasm) ...<String>[
269272
'--extra-compiler-option=--import-shared-memory',
270273
'--extra-compiler-option=--shared-memory-max-pages=32768',

packages/flutter_tools/lib/src/compile.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,15 @@ List<String> buildModeOptions(BuildMode mode, List<String> dartDefines) =>
183183
'-Ddart.vm.profile=true',
184184
if (!dartDefines.any((String define) => define.startsWith('dart.vm.product')))
185185
'-Ddart.vm.product=false',
186+
'--delete-tostring-package-uri=dart:ui',
187+
'--delete-tostring-package-uri=package:flutter',
186188
...kDartCompilerExperiments,
187189
],
188190
BuildMode.release => <String>[
189191
'-Ddart.vm.profile=false',
190192
'-Ddart.vm.product=true',
193+
'--delete-tostring-package-uri=dart:ui',
194+
'--delete-tostring-package-uri=package:flutter',
191195
...kDartCompilerExperiments,
192196
],
193197
_ => throw Exception('Unknown BuildMode: $mode')

packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ const List<String> _kDart2WasmLinuxArgs = <String> [
3636
'--packages=.dart_tool/package_config.json',
3737
'--extra-compiler-option=--dart-sdk=Artifact.engineDartSdkPath.TargetPlatform.web_javascript',
3838
'--extra-compiler-option=--platform=HostArtifact.webPlatformKernelFolder/dart2wasm_platform.dill',
39+
'--extra-compiler-option=--delete-tostring-package-uri=dart:ui',
40+
'--extra-compiler-option=--delete-tostring-package-uri=package:flutter',
3941
];
4042

4143
void main() {

packages/flutter_tools/test/general.shard/compile_batch_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,8 @@ void main() {
200200
'--no-print-incremental-dependencies',
201201
'-Ddart.vm.profile=true',
202202
'-Ddart.vm.product=false',
203+
'--delete-tostring-package-uri=dart:ui',
204+
'--delete-tostring-package-uri=package:flutter',
203205
'--no-link-platform',
204206
'--aot',
205207
'--tfa',
@@ -248,6 +250,8 @@ void main() {
248250
'--no-print-incremental-dependencies',
249251
'-Ddart.vm.profile=false',
250252
'-Ddart.vm.product=true',
253+
'--delete-tostring-package-uri=dart:ui',
254+
'--delete-tostring-package-uri=package:flutter',
251255
'--no-link-platform',
252256
'--aot',
253257
'--tfa',

packages/flutter_tools/test/general.shard/compile_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,15 @@ void main() {
105105
testWithoutContext('buildModeOptions removes matching profile define in profile mode', () {
106106
expect(buildModeOptions(BuildMode.profile, <String>['dart.vm.profile=true']), <String>[
107107
'-Ddart.vm.product=false',
108+
'--delete-tostring-package-uri=dart:ui',
109+
'--delete-tostring-package-uri=package:flutter',
108110
]);
109111
});
110112

111113
testWithoutContext('buildModeOptions removes both matching profile and release define in profile mode', () {
112114
expect(buildModeOptions(BuildMode.profile, <String>['dart.vm.profile=false', 'dart.vm.product=true']), <String>[
115+
'--delete-tostring-package-uri=dart:ui',
116+
'--delete-tostring-package-uri=package:flutter',
113117
]);
114118
});
115119
}

0 commit comments

Comments
 (0)