Skip to content

Commit 259373d

Browse files
authored
[flutter_tools] Add --dump-info, --no-frequency-based-minification flags (#115862)
* [flutter_tools] Add --dump-info, --no-frequency-based-minification flags Also some cleanup to named arguments to the buildWeb function Fixes flutter/flutter#115854 * fix tests
1 parent 73024eb commit 259373d

File tree

6 files changed

+103
-10
lines changed

6 files changed

+103
-10
lines changed

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

+10
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ const String kHasWebPlugins = 'HasWebPlugins';
3636
/// Valid values are O1 (lowest, profile default) to O4 (highest, release default).
3737
const String kDart2jsOptimization = 'Dart2jsOptimization';
3838

39+
/// If `--dump-info` should be passed to dart2js.
40+
const String kDart2jsDumpInfo = 'Dart2jsDumpInfo';
41+
42+
// If `--no-frequency-based-minification` should be based to dart2js
43+
const String kDart2jsNoFrequencyBasedMinification = 'Dart2jsNoFrequencyBasedMinification';
44+
3945
/// Whether to disable dynamic generation code to satisfy csp policies.
4046
const String kCspMode = 'cspMode';
4147

@@ -217,13 +223,17 @@ class Dart2JSTarget extends Target {
217223
}
218224

219225
final String? dart2jsOptimization = environment.defines[kDart2jsOptimization];
226+
final bool dumpInfo = environment.defines[kDart2jsDumpInfo] == 'true';
227+
final bool noFrequencyBasedMinification = environment.defines[kDart2jsNoFrequencyBasedMinification] == 'true';
220228
final File outputJSFile = environment.buildDir.childFile('main.dart.js');
221229
final bool csp = environment.defines[kCspMode] == 'true';
222230

223231
final ProcessResult javaScriptResult = await environment.processManager.run(<String>[
224232
...sharedCommandOptions,
225233
if (dart2jsOptimization != null) '-$dart2jsOptimization' else '-O4',
226234
if (buildMode == BuildMode.profile) '--no-minify',
235+
if (dumpInfo) '--dump-info',
236+
if (noFrequencyBasedMinification) '--no-frequency-based-minification',
227237
if (csp) '--csp',
228238
'-o',
229239
outputJSFile.path,

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

+12-2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ class BuildWebCommand extends BuildSubCommand {
7070
help: 'Sets the optimization level used for Dart compilation to JavaScript. '
7171
'Valid values range from O0 to O4.'
7272
);
73+
argParser.addFlag('dump-info', negatable: false,
74+
help: 'Passes "--dump-info" to the Javascript compiler which generates '
75+
'information about the generated code is a .js.info.json file.'
76+
);
77+
argParser.addFlag('no-frequency-based-minification', negatable: false,
78+
help: 'Disables the frequency based minifier. '
79+
'Useful for comparing the output between builds.'
80+
);
7381
}
7482

7583
final FileSystem _fileSystem;
@@ -132,9 +140,11 @@ class BuildWebCommand extends BuildSubCommand {
132140
stringArgDeprecated('pwa-strategy')!,
133141
boolArgDeprecated('source-maps'),
134142
boolArgDeprecated('native-null-assertions'),
135-
baseHref,
136-
stringArgDeprecated('dart2js-optimization'),
143+
baseHref: baseHref,
144+
dart2jsOptimization: stringArgDeprecated('dart2js-optimization'),
137145
outputDirectoryPath: outputDirectoryPath,
146+
dumpInfo: boolArgDeprecated('dump-info'),
147+
noFrequencyBasedMinification: boolArgDeprecated('no-frequency-based-minification'),
138148
);
139149
return FlutterCommandResult.success();
140150
}

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

+1-4
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,6 @@ class ResidentWebRunner extends ResidentRunner {
298298
kNoneWorker,
299299
true,
300300
debuggingOptions.nativeNullAssertions,
301-
null,
302-
null,
303301
);
304302
}
305303
await device!.device!.startApp(
@@ -372,8 +370,7 @@ class ResidentWebRunner extends ResidentRunner {
372370
kNoneWorker,
373371
true,
374372
debuggingOptions.nativeNullAssertions,
375-
kBaseHref,
376-
null,
373+
baseHref: kBaseHref,
377374
);
378375
} on ToolExit {
379376
return OperationResult(1, 'Failed to recompile application.');

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

+8-4
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ Future<void> buildWeb(
2525
bool csp,
2626
String serviceWorkerStrategy,
2727
bool sourceMaps,
28-
bool nativeNullAssertions,
29-
String? baseHref,
28+
bool nativeNullAssertions, {
3029
String? dart2jsOptimization,
31-
{String? outputDirectoryPath}
32-
) async {
30+
String? baseHref,
31+
bool dumpInfo = false,
32+
bool noFrequencyBasedMinification = false,
33+
String? outputDirectoryPath,
34+
}) async {
3335
final bool hasWebPlugins = (await findPlugins(flutterProject))
3436
.any((Plugin p) => p.platforms.containsKey(WebPlugin.kConfigKey));
3537
final Directory outputDirectory = outputDirectoryPath == null
@@ -66,6 +68,8 @@ Future<void> buildWeb(
6668
kServiceWorkerStrategy: serviceWorkerStrategy,
6769
if (dart2jsOptimization != null)
6870
kDart2jsOptimization: dart2jsOptimization,
71+
kDart2jsDumpInfo: dumpInfo.toString(),
72+
kDart2jsNoFrequencyBasedMinification: noFrequencyBasedMinification.toString(),
6973
...buildInfo.toBuildSystemEnvironment(),
7074
},
7175
artifacts: globals.artifacts!,

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

+4
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ void main() {
130130
'SourceMaps': 'false',
131131
'NativeNullAssertions': 'true',
132132
'ServiceWorkerStrategy': 'offline-first',
133+
'Dart2jsDumpInfo': 'false',
134+
'Dart2jsNoFrequencyBasedMinification': 'false',
133135
'Dart2jsOptimization': 'O3',
134136
'BuildMode': 'release',
135137
'DartDefines': 'Zm9vPWE=,RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==',
@@ -179,6 +181,8 @@ void main() {
179181
'SourceMaps': 'false',
180182
'NativeNullAssertions': 'true',
181183
'ServiceWorkerStrategy': 'offline-first',
184+
'Dart2jsDumpInfo': 'false',
185+
'Dart2jsNoFrequencyBasedMinification': 'false',
182186
'BuildMode': 'release',
183187
'DartDefines': 'RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==',
184188
'DartObfuscation': 'false',

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

+68
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,74 @@ void main() {
659659
ProcessManager: () => processManager,
660660
}));
661661

662+
test('Dart2JSTarget calls dart2js with expected args with dump-info', () => testbed.run(() async {
663+
environment.defines[kBuildMode] = 'profile';
664+
environment.defines[kDart2jsDumpInfo] = 'true';
665+
processManager.addCommand(FakeCommand(
666+
command: <String>[
667+
...kDart2jsLinuxArgs,
668+
'-Ddart.vm.profile=true',
669+
'--no-source-maps',
670+
'-o',
671+
environment.buildDir.childFile('app.dill').absolute.path,
672+
'--packages=.dart_tool/package_config.json',
673+
'--cfe-only',
674+
environment.buildDir.childFile('main.dart').absolute.path,
675+
]
676+
));
677+
processManager.addCommand(FakeCommand(
678+
command: <String>[
679+
...kDart2jsLinuxArgs,
680+
'-Ddart.vm.profile=true',
681+
'--no-source-maps',
682+
'-O4',
683+
'--no-minify',
684+
'--dump-info',
685+
'-o',
686+
environment.buildDir.childFile('main.dart.js').absolute.path,
687+
environment.buildDir.childFile('app.dill').absolute.path,
688+
]
689+
));
690+
691+
await const Dart2JSTarget().build(environment);
692+
}, overrides: <Type, Generator>{
693+
ProcessManager: () => processManager,
694+
}));
695+
696+
test('Dart2JSTarget calls dart2js with expected args with no-frequency-based-minification', () => testbed.run(() async {
697+
environment.defines[kBuildMode] = 'profile';
698+
environment.defines[kDart2jsNoFrequencyBasedMinification] = 'true';
699+
processManager.addCommand(FakeCommand(
700+
command: <String>[
701+
...kDart2jsLinuxArgs,
702+
'-Ddart.vm.profile=true',
703+
'--no-source-maps',
704+
'-o',
705+
environment.buildDir.childFile('app.dill').absolute.path,
706+
'--packages=.dart_tool/package_config.json',
707+
'--cfe-only',
708+
environment.buildDir.childFile('main.dart').absolute.path,
709+
]
710+
));
711+
processManager.addCommand(FakeCommand(
712+
command: <String>[
713+
...kDart2jsLinuxArgs,
714+
'-Ddart.vm.profile=true',
715+
'--no-source-maps',
716+
'-O4',
717+
'--no-minify',
718+
'--no-frequency-based-minification',
719+
'-o',
720+
environment.buildDir.childFile('main.dart.js').absolute.path,
721+
environment.buildDir.childFile('app.dill').absolute.path,
722+
]
723+
));
724+
725+
await const Dart2JSTarget().build(environment);
726+
}, overrides: <Type, Generator>{
727+
ProcessManager: () => processManager,
728+
}));
729+
662730
test('Generated service worker is empty with none-strategy', () {
663731
final String result = generateServiceWorker(<String, String>{'/foo': 'abcd'}, <String>[], serviceWorkerStrategy: ServiceWorkerStrategy.none);
664732

0 commit comments

Comments
 (0)