Unverified Commit 259373d6 authored by Kevin Moore's avatar Kevin Moore Committed by GitHub

[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 https://github.com/flutter/flutter/issues/115854

* fix tests
parent 73024eb7
...@@ -36,6 +36,12 @@ const String kHasWebPlugins = 'HasWebPlugins'; ...@@ -36,6 +36,12 @@ const String kHasWebPlugins = 'HasWebPlugins';
/// Valid values are O1 (lowest, profile default) to O4 (highest, release default). /// Valid values are O1 (lowest, profile default) to O4 (highest, release default).
const String kDart2jsOptimization = 'Dart2jsOptimization'; const String kDart2jsOptimization = 'Dart2jsOptimization';
/// If `--dump-info` should be passed to dart2js.
const String kDart2jsDumpInfo = 'Dart2jsDumpInfo';
// If `--no-frequency-based-minification` should be based to dart2js
const String kDart2jsNoFrequencyBasedMinification = 'Dart2jsNoFrequencyBasedMinification';
/// Whether to disable dynamic generation code to satisfy csp policies. /// Whether to disable dynamic generation code to satisfy csp policies.
const String kCspMode = 'cspMode'; const String kCspMode = 'cspMode';
...@@ -217,6 +223,8 @@ class Dart2JSTarget extends Target { ...@@ -217,6 +223,8 @@ class Dart2JSTarget extends Target {
} }
final String? dart2jsOptimization = environment.defines[kDart2jsOptimization]; final String? dart2jsOptimization = environment.defines[kDart2jsOptimization];
final bool dumpInfo = environment.defines[kDart2jsDumpInfo] == 'true';
final bool noFrequencyBasedMinification = environment.defines[kDart2jsNoFrequencyBasedMinification] == 'true';
final File outputJSFile = environment.buildDir.childFile('main.dart.js'); final File outputJSFile = environment.buildDir.childFile('main.dart.js');
final bool csp = environment.defines[kCspMode] == 'true'; final bool csp = environment.defines[kCspMode] == 'true';
...@@ -224,6 +232,8 @@ class Dart2JSTarget extends Target { ...@@ -224,6 +232,8 @@ class Dart2JSTarget extends Target {
...sharedCommandOptions, ...sharedCommandOptions,
if (dart2jsOptimization != null) '-$dart2jsOptimization' else '-O4', if (dart2jsOptimization != null) '-$dart2jsOptimization' else '-O4',
if (buildMode == BuildMode.profile) '--no-minify', if (buildMode == BuildMode.profile) '--no-minify',
if (dumpInfo) '--dump-info',
if (noFrequencyBasedMinification) '--no-frequency-based-minification',
if (csp) '--csp', if (csp) '--csp',
'-o', '-o',
outputJSFile.path, outputJSFile.path,
......
...@@ -70,6 +70,14 @@ class BuildWebCommand extends BuildSubCommand { ...@@ -70,6 +70,14 @@ class BuildWebCommand extends BuildSubCommand {
help: 'Sets the optimization level used for Dart compilation to JavaScript. ' help: 'Sets the optimization level used for Dart compilation to JavaScript. '
'Valid values range from O0 to O4.' 'Valid values range from O0 to O4.'
); );
argParser.addFlag('dump-info', negatable: false,
help: 'Passes "--dump-info" to the Javascript compiler which generates '
'information about the generated code is a .js.info.json file.'
);
argParser.addFlag('no-frequency-based-minification', negatable: false,
help: 'Disables the frequency based minifier. '
'Useful for comparing the output between builds.'
);
} }
final FileSystem _fileSystem; final FileSystem _fileSystem;
...@@ -132,9 +140,11 @@ class BuildWebCommand extends BuildSubCommand { ...@@ -132,9 +140,11 @@ class BuildWebCommand extends BuildSubCommand {
stringArgDeprecated('pwa-strategy')!, stringArgDeprecated('pwa-strategy')!,
boolArgDeprecated('source-maps'), boolArgDeprecated('source-maps'),
boolArgDeprecated('native-null-assertions'), boolArgDeprecated('native-null-assertions'),
baseHref, baseHref: baseHref,
stringArgDeprecated('dart2js-optimization'), dart2jsOptimization: stringArgDeprecated('dart2js-optimization'),
outputDirectoryPath: outputDirectoryPath, outputDirectoryPath: outputDirectoryPath,
dumpInfo: boolArgDeprecated('dump-info'),
noFrequencyBasedMinification: boolArgDeprecated('no-frequency-based-minification'),
); );
return FlutterCommandResult.success(); return FlutterCommandResult.success();
} }
......
...@@ -298,8 +298,6 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -298,8 +298,6 @@ class ResidentWebRunner extends ResidentRunner {
kNoneWorker, kNoneWorker,
true, true,
debuggingOptions.nativeNullAssertions, debuggingOptions.nativeNullAssertions,
null,
null,
); );
} }
await device!.device!.startApp( await device!.device!.startApp(
...@@ -372,8 +370,7 @@ class ResidentWebRunner extends ResidentRunner { ...@@ -372,8 +370,7 @@ class ResidentWebRunner extends ResidentRunner {
kNoneWorker, kNoneWorker,
true, true,
debuggingOptions.nativeNullAssertions, debuggingOptions.nativeNullAssertions,
kBaseHref, baseHref: kBaseHref,
null,
); );
} on ToolExit { } on ToolExit {
return OperationResult(1, 'Failed to recompile application.'); return OperationResult(1, 'Failed to recompile application.');
......
...@@ -25,11 +25,13 @@ Future<void> buildWeb( ...@@ -25,11 +25,13 @@ Future<void> buildWeb(
bool csp, bool csp,
String serviceWorkerStrategy, String serviceWorkerStrategy,
bool sourceMaps, bool sourceMaps,
bool nativeNullAssertions, bool nativeNullAssertions, {
String? baseHref,
String? dart2jsOptimization, String? dart2jsOptimization,
{String? outputDirectoryPath} String? baseHref,
) async { bool dumpInfo = false,
bool noFrequencyBasedMinification = false,
String? outputDirectoryPath,
}) async {
final bool hasWebPlugins = (await findPlugins(flutterProject)) final bool hasWebPlugins = (await findPlugins(flutterProject))
.any((Plugin p) => p.platforms.containsKey(WebPlugin.kConfigKey)); .any((Plugin p) => p.platforms.containsKey(WebPlugin.kConfigKey));
final Directory outputDirectory = outputDirectoryPath == null final Directory outputDirectory = outputDirectoryPath == null
...@@ -66,6 +68,8 @@ Future<void> buildWeb( ...@@ -66,6 +68,8 @@ Future<void> buildWeb(
kServiceWorkerStrategy: serviceWorkerStrategy, kServiceWorkerStrategy: serviceWorkerStrategy,
if (dart2jsOptimization != null) if (dart2jsOptimization != null)
kDart2jsOptimization: dart2jsOptimization, kDart2jsOptimization: dart2jsOptimization,
kDart2jsDumpInfo: dumpInfo.toString(),
kDart2jsNoFrequencyBasedMinification: noFrequencyBasedMinification.toString(),
...buildInfo.toBuildSystemEnvironment(), ...buildInfo.toBuildSystemEnvironment(),
}, },
artifacts: globals.artifacts!, artifacts: globals.artifacts!,
......
...@@ -130,6 +130,8 @@ void main() { ...@@ -130,6 +130,8 @@ void main() {
'SourceMaps': 'false', 'SourceMaps': 'false',
'NativeNullAssertions': 'true', 'NativeNullAssertions': 'true',
'ServiceWorkerStrategy': 'offline-first', 'ServiceWorkerStrategy': 'offline-first',
'Dart2jsDumpInfo': 'false',
'Dart2jsNoFrequencyBasedMinification': 'false',
'Dart2jsOptimization': 'O3', 'Dart2jsOptimization': 'O3',
'BuildMode': 'release', 'BuildMode': 'release',
'DartDefines': 'Zm9vPWE=,RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==', 'DartDefines': 'Zm9vPWE=,RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==',
...@@ -179,6 +181,8 @@ void main() { ...@@ -179,6 +181,8 @@ void main() {
'SourceMaps': 'false', 'SourceMaps': 'false',
'NativeNullAssertions': 'true', 'NativeNullAssertions': 'true',
'ServiceWorkerStrategy': 'offline-first', 'ServiceWorkerStrategy': 'offline-first',
'Dart2jsDumpInfo': 'false',
'Dart2jsNoFrequencyBasedMinification': 'false',
'BuildMode': 'release', 'BuildMode': 'release',
'DartDefines': 'RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==', 'DartDefines': 'RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==',
'DartObfuscation': 'false', 'DartObfuscation': 'false',
......
...@@ -659,6 +659,74 @@ void main() { ...@@ -659,6 +659,74 @@ void main() {
ProcessManager: () => processManager, ProcessManager: () => processManager,
})); }));
test('Dart2JSTarget calls dart2js with expected args with dump-info', () => testbed.run(() async {
environment.defines[kBuildMode] = 'profile';
environment.defines[kDart2jsDumpInfo] = 'true';
processManager.addCommand(FakeCommand(
command: <String>[
...kDart2jsLinuxArgs,
'-Ddart.vm.profile=true',
'--no-source-maps',
'-o',
environment.buildDir.childFile('app.dill').absolute.path,
'--packages=.dart_tool/package_config.json',
'--cfe-only',
environment.buildDir.childFile('main.dart').absolute.path,
]
));
processManager.addCommand(FakeCommand(
command: <String>[
...kDart2jsLinuxArgs,
'-Ddart.vm.profile=true',
'--no-source-maps',
'-O4',
'--no-minify',
'--dump-info',
'-o',
environment.buildDir.childFile('main.dart.js').absolute.path,
environment.buildDir.childFile('app.dill').absolute.path,
]
));
await const Dart2JSTarget().build(environment);
}, overrides: <Type, Generator>{
ProcessManager: () => processManager,
}));
test('Dart2JSTarget calls dart2js with expected args with no-frequency-based-minification', () => testbed.run(() async {
environment.defines[kBuildMode] = 'profile';
environment.defines[kDart2jsNoFrequencyBasedMinification] = 'true';
processManager.addCommand(FakeCommand(
command: <String>[
...kDart2jsLinuxArgs,
'-Ddart.vm.profile=true',
'--no-source-maps',
'-o',
environment.buildDir.childFile('app.dill').absolute.path,
'--packages=.dart_tool/package_config.json',
'--cfe-only',
environment.buildDir.childFile('main.dart').absolute.path,
]
));
processManager.addCommand(FakeCommand(
command: <String>[
...kDart2jsLinuxArgs,
'-Ddart.vm.profile=true',
'--no-source-maps',
'-O4',
'--no-minify',
'--no-frequency-based-minification',
'-o',
environment.buildDir.childFile('main.dart.js').absolute.path,
environment.buildDir.childFile('app.dill').absolute.path,
]
));
await const Dart2JSTarget().build(environment);
}, overrides: <Type, Generator>{
ProcessManager: () => processManager,
}));
test('Generated service worker is empty with none-strategy', () { test('Generated service worker is empty with none-strategy', () {
final String result = generateServiceWorker(<String, String>{'/foo': 'abcd'}, <String>[], serviceWorkerStrategy: ServiceWorkerStrategy.none); final String result = generateServiceWorker(<String, String>{'/foo': 'abcd'}, <String>[], serviceWorkerStrategy: ServiceWorkerStrategy.none);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment