@@ -21,15 +21,9 @@ sealed class WebCompilerConfig {
21
21
/// Build environment flag for [sourceMaps] .
22
22
static const String kSourceMapsEnabled = 'SourceMaps' ;
23
23
24
- /// Calculates the optimization level for dart2js/dart2wasm for the given
24
+ /// Calculates the optimization level for the compiler for the given
25
25
/// build mode.
26
- int optimizationLevelForBuildMode (BuildMode mode) =>
27
- optimizationLevel ??
28
- switch (mode) {
29
- BuildMode .debug => 0 ,
30
- BuildMode .profile || BuildMode .release => 4 ,
31
- BuildMode .jitRelease => throw ArgumentError ('Invalid build mode for web' ),
32
- };
26
+ int optimizationLevelForBuildMode (BuildMode mode);
33
27
34
28
/// The compiler optimization level specified by the user.
35
29
///
@@ -111,13 +105,15 @@ class JsCompilerConfig extends WebCompilerConfig {
111
105
];
112
106
113
107
@override
114
- int optimizationLevelForBuildMode (BuildMode mode) {
115
- final int level = super .optimizationLevelForBuildMode (mode);
116
-
117
- // dart2js optimization level 0 is not well supported. Use
118
- // 1 instead.
119
- return level == 0 ? 1 : level;
120
- }
108
+ int optimizationLevelForBuildMode (BuildMode mode) =>
109
+ optimizationLevel ??
110
+ switch (mode) {
111
+ // dart2js optimization level 0 is not well supported. Use
112
+ // 1 instead.
113
+ BuildMode .debug => 1 ,
114
+ BuildMode .profile || BuildMode .release => 4 ,
115
+ BuildMode .jitRelease => throw ArgumentError ('Invalid build mode for web' ),
116
+ };
121
117
122
118
/// Arguments to use in the full JS compile, but not CFE-only.
123
119
///
@@ -163,6 +159,19 @@ class WasmCompilerConfig extends WebCompilerConfig {
163
159
@override
164
160
CompileTarget get compileTarget => CompileTarget .wasm;
165
161
162
+ @override
163
+ int optimizationLevelForBuildMode (BuildMode mode) =>
164
+ optimizationLevel ??
165
+ switch (mode) {
166
+ BuildMode .debug => 0 ,
167
+
168
+ // The optimization level of O2 uses only sound optimizations. We default
169
+ // to this level because our web benchmarks have shown that the difference
170
+ // between O2 and O4 is marginal enough that we would prefer soundness here.
171
+ BuildMode .profile || BuildMode .release => 2 ,
172
+ BuildMode .jitRelease => throw ArgumentError ('Invalid build mode for web' ),
173
+ };
174
+
166
175
List <String > toCommandOptions (BuildMode buildMode) {
167
176
final bool stripSymbols = buildMode == BuildMode .release && stripWasm;
168
177
return < String > [
0 commit comments