Skip to content

Commit d05d434

Browse files
Provide a flag for controlling the dart2js optimization level when building for web targets (#101945)
1 parent df8d0ea commit d05d434

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

packages/flutter_tools/lib/src/commands/build_web.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ class BuildWebCommand extends BuildSubCommand {
6363
'The value has to start and end with a slash "/". '
6464
'For more information: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base'
6565
);
66-
66+
argParser.addOption('dart2js-optimization',
67+
help: 'Sets the optimization level used for Dart compilation to JavaScript. '
68+
'Valid values range from O0 to O4.'
69+
);
6770
}
6871

6972
@override
@@ -120,6 +123,7 @@ class BuildWebCommand extends BuildSubCommand {
120123
boolArg('source-maps'),
121124
boolArg('native-null-assertions'),
122125
baseHref,
126+
stringArg('dart2js-optimization'),
123127
);
124128
return FlutterCommandResult.success();
125129
}

packages/flutter_tools/lib/src/isolated/resident_web_runner.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ class ResidentWebRunner extends ResidentRunner {
302302
true,
303303
debuggingOptions.nativeNullAssertions,
304304
null,
305+
null,
305306
);
306307
}
307308
await device.device.startApp(
@@ -375,6 +376,7 @@ class ResidentWebRunner extends ResidentRunner {
375376
true,
376377
debuggingOptions.nativeNullAssertions,
377378
kBaseHref,
379+
null,
378380
);
379381
} on ToolExit {
380382
return OperationResult(1, 'Failed to recompile application.');

packages/flutter_tools/lib/src/web/compile.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Future<void> buildWeb(
2525
bool sourceMaps,
2626
bool nativeNullAssertions,
2727
String? baseHref,
28+
String? dart2jsOptimization,
2829
) async {
2930
final bool hasWebPlugins = (await findPlugins(flutterProject))
3031
.any((Plugin p) => p.platforms.containsKey(WebPlugin.kConfigKey));
@@ -51,6 +52,8 @@ Future<void> buildWeb(
5152
kNativeNullAssertions: nativeNullAssertions.toString(),
5253
if (serviceWorkerStrategy != null)
5354
kServiceWorkerStrategy: serviceWorkerStrategy,
55+
if (dart2jsOptimization != null)
56+
kDart2jsOptimization: dart2jsOptimization,
5457
...buildInfo.toBuildSystemEnvironment(),
5558
},
5659
artifacts: globals.artifacts!,

packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ void main() {
9090
final BuildCommand buildCommand = BuildCommand();
9191
final CommandRunner<void> runner = createTestCommandRunner(buildCommand);
9292
setupFileSystemForEndToEndTest(fileSystem);
93-
await runner.run(<String>['build', 'web', '--no-pub', '--dart-define=foo=a']);
93+
await runner.run(<String>['build', 'web', '--no-pub', '--dart-define=foo=a', '--dart2js-optimization=O3']);
9494

9595
expect(fileSystem.file(fileSystem.path.join('lib', 'generated_plugin_registrant.dart')).existsSync(), true);
9696
}, overrides: <Type, Generator>{
@@ -106,6 +106,7 @@ void main() {
106106
'SourceMaps': 'false',
107107
'NativeNullAssertions': 'true',
108108
'ServiceWorkerStrategy': 'offline-first',
109+
'Dart2jsOptimization': 'O3',
109110
'BuildMode': 'release',
110111
'DartDefines': 'Zm9vPWE=,RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==',
111112
'DartObfuscation': 'false',

0 commit comments

Comments
 (0)