mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
[flutter_tools] Apply --no-causal-async-stacks and --lazy-async-stacks to profile/release builds (#49377)
This commit is contained in:
parent
4964fb62e1
commit
347823234f
@ -49,7 +49,6 @@ class GenSnapshot {
|
|||||||
Iterable<String> additionalArgs = const <String>[],
|
Iterable<String> additionalArgs = const <String>[],
|
||||||
}) {
|
}) {
|
||||||
final List<String> args = <String>[
|
final List<String> args = <String>[
|
||||||
'--causal_async_stacks',
|
|
||||||
...additionalArgs,
|
...additionalArgs,
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -156,6 +155,13 @@ class AOTSnapshotter {
|
|||||||
genSnapshotArgs.add('--no-use-integer-division');
|
genSnapshotArgs.add('--no-use-integer-division');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Optimization arguments.
|
||||||
|
genSnapshotArgs.addAll(<String>[
|
||||||
|
// Faster async/await
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
|
]);
|
||||||
|
|
||||||
genSnapshotArgs.add(mainPath);
|
genSnapshotArgs.add(mainPath);
|
||||||
|
|
||||||
// TODO(jonahwilliams): fully remove input checks once all callers are
|
// TODO(jonahwilliams): fully remove input checks once all callers are
|
||||||
|
@ -95,7 +95,6 @@ class CodeGeneratingKernelCompiler implements KernelCompiler {
|
|||||||
bool linkPlatformKernelIn = false,
|
bool linkPlatformKernelIn = false,
|
||||||
bool aot = false,
|
bool aot = false,
|
||||||
@required BuildMode buildMode,
|
@required BuildMode buildMode,
|
||||||
bool causalAsyncStacks = true,
|
|
||||||
bool trackWidgetCreation,
|
bool trackWidgetCreation,
|
||||||
List<String> extraFrontEndOptions,
|
List<String> extraFrontEndOptions,
|
||||||
// These arguments are currently unused.
|
// These arguments are currently unused.
|
||||||
@ -133,7 +132,6 @@ class CodeGeneratingKernelCompiler implements KernelCompiler {
|
|||||||
linkPlatformKernelIn: linkPlatformKernelIn,
|
linkPlatformKernelIn: linkPlatformKernelIn,
|
||||||
aot: aot,
|
aot: aot,
|
||||||
buildMode: buildMode,
|
buildMode: buildMode,
|
||||||
causalAsyncStacks: causalAsyncStacks,
|
|
||||||
trackWidgetCreation: trackWidgetCreation,
|
trackWidgetCreation: trackWidgetCreation,
|
||||||
extraFrontEndOptions: extraFrontEndOptions,
|
extraFrontEndOptions: extraFrontEndOptions,
|
||||||
sdkRoot: sdkRoot,
|
sdkRoot: sdkRoot,
|
||||||
|
@ -277,7 +277,6 @@ class KernelCompiler {
|
|||||||
@required BuildMode buildMode,
|
@required BuildMode buildMode,
|
||||||
bool linkPlatformKernelIn = false,
|
bool linkPlatformKernelIn = false,
|
||||||
bool aot = false,
|
bool aot = false,
|
||||||
bool causalAsyncStacks = true,
|
|
||||||
@required bool trackWidgetCreation,
|
@required bool trackWidgetCreation,
|
||||||
List<String> extraFrontEndOptions,
|
List<String> extraFrontEndOptions,
|
||||||
String packagesPath,
|
String packagesPath,
|
||||||
@ -313,7 +312,7 @@ class KernelCompiler {
|
|||||||
'--sdk-root',
|
'--sdk-root',
|
||||||
sdkRoot,
|
sdkRoot,
|
||||||
'--target=$targetModel',
|
'--target=$targetModel',
|
||||||
'-Ddart.developer.causal_async_stacks=$causalAsyncStacks',
|
'-Ddart.developer.causal_async_stacks=${buildMode == BuildMode.debug}',
|
||||||
for (final Object dartDefine in dartDefines)
|
for (final Object dartDefine in dartDefines)
|
||||||
'-D$dartDefine',
|
'-D$dartDefine',
|
||||||
..._buildModeOptions(buildMode),
|
..._buildModeOptions(buildMode),
|
||||||
@ -451,7 +450,6 @@ class _RejectRequest extends _CompilationRequest {
|
|||||||
abstract class ResidentCompiler {
|
abstract class ResidentCompiler {
|
||||||
factory ResidentCompiler(String sdkRoot, {
|
factory ResidentCompiler(String sdkRoot, {
|
||||||
@required BuildMode buildMode,
|
@required BuildMode buildMode,
|
||||||
bool causalAsyncStacks,
|
|
||||||
bool trackWidgetCreation,
|
bool trackWidgetCreation,
|
||||||
String packagesPath,
|
String packagesPath,
|
||||||
List<String> fileSystemRoots,
|
List<String> fileSystemRoots,
|
||||||
@ -512,7 +510,6 @@ class DefaultResidentCompiler implements ResidentCompiler {
|
|||||||
DefaultResidentCompiler(
|
DefaultResidentCompiler(
|
||||||
String sdkRoot, {
|
String sdkRoot, {
|
||||||
@required this.buildMode,
|
@required this.buildMode,
|
||||||
this.causalAsyncStacks = true,
|
|
||||||
this.trackWidgetCreation = true,
|
this.trackWidgetCreation = true,
|
||||||
this.packagesPath,
|
this.packagesPath,
|
||||||
this.fileSystemRoots,
|
this.fileSystemRoots,
|
||||||
@ -531,7 +528,6 @@ class DefaultResidentCompiler implements ResidentCompiler {
|
|||||||
sdkRoot = sdkRoot.endsWith('/') ? sdkRoot : '$sdkRoot/';
|
sdkRoot = sdkRoot.endsWith('/') ? sdkRoot : '$sdkRoot/';
|
||||||
|
|
||||||
final BuildMode buildMode;
|
final BuildMode buildMode;
|
||||||
final bool causalAsyncStacks;
|
|
||||||
final bool trackWidgetCreation;
|
final bool trackWidgetCreation;
|
||||||
final String packagesPath;
|
final String packagesPath;
|
||||||
final TargetModel targetModel;
|
final TargetModel targetModel;
|
||||||
@ -651,7 +647,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
|
|||||||
sdkRoot,
|
sdkRoot,
|
||||||
'--incremental',
|
'--incremental',
|
||||||
'--target=$targetModel',
|
'--target=$targetModel',
|
||||||
'-Ddart.developer.causal_async_stacks=$causalAsyncStacks',
|
'-Ddart.developer.causal_async_stacks=${buildMode == BuildMode.debug}',
|
||||||
for (final Object dartDefine in dartDefines)
|
for (final Object dartDefine in dartDefines)
|
||||||
'-D$dartDefine',
|
'-D$dartDefine',
|
||||||
if (outputPath != null) ...<String>[
|
if (outputPath != null) ...<String>[
|
||||||
|
@ -98,7 +98,8 @@ Future<void> _genSnapshot(
|
|||||||
|
|
||||||
final List<String> command = <String>[
|
final List<String> command = <String>[
|
||||||
genSnapshot,
|
genSnapshot,
|
||||||
'--no_causal_async_stacks',
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-blobs',
|
'--snapshot_kind=app-aot-blobs',
|
||||||
'--vm_snapshot_data=$vmSnapshotData',
|
'--vm_snapshot_data=$vmSnapshotData',
|
||||||
|
@ -71,6 +71,7 @@ class FuchsiaKernelCompiler {
|
|||||||
|
|
||||||
if (buildInfo.isProfile) '-Ddart.vm.profile=true',
|
if (buildInfo.isProfile) '-Ddart.vm.profile=true',
|
||||||
if (buildInfo.mode.isRelease) '-Ddart.vm.release=true',
|
if (buildInfo.mode.isRelease) '-Ddart.vm.release=true',
|
||||||
|
'-Ddart.developer.causal_async_stacks=${buildInfo.isDebug}',
|
||||||
|
|
||||||
// Use bytecode and drop the ast in JIT release mode.
|
// Use bytecode and drop the ast in JIT release mode.
|
||||||
if (buildInfo.isJitRelease) ...<String>[
|
if (buildInfo.isJitRelease) ...<String>[
|
||||||
|
@ -121,7 +121,6 @@ void main() {
|
|||||||
verify(mockProcessManager.start(
|
verify(mockProcessManager.start(
|
||||||
<String>[
|
<String>[
|
||||||
'gen_snapshot',
|
'gen_snapshot',
|
||||||
'--causal_async_stacks',
|
|
||||||
'--additional_arg',
|
'--additional_arg',
|
||||||
],
|
],
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
workingDirectory: anyNamed('workingDirectory'),
|
||||||
@ -146,7 +145,6 @@ void main() {
|
|||||||
verify(mockProcessManager.start(
|
verify(mockProcessManager.start(
|
||||||
<String>[
|
<String>[
|
||||||
'gen_snapshot_armv7',
|
'gen_snapshot_armv7',
|
||||||
'--causal_async_stacks',
|
|
||||||
'--additional_arg',
|
'--additional_arg',
|
||||||
],
|
],
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
workingDirectory: anyNamed('workingDirectory'),
|
||||||
@ -171,7 +169,6 @@ void main() {
|
|||||||
verify(mockProcessManager.start(
|
verify(mockProcessManager.start(
|
||||||
<String>[
|
<String>[
|
||||||
'gen_snapshot_arm64',
|
'gen_snapshot_arm64',
|
||||||
'--causal_async_stacks',
|
|
||||||
'--additional_arg',
|
'--additional_arg',
|
||||||
],
|
],
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
workingDirectory: anyNamed('workingDirectory'),
|
||||||
@ -184,7 +181,7 @@ void main() {
|
|||||||
platform: TargetPlatform.android_x64, mode: BuildMode.release))
|
platform: TargetPlatform.android_x64, mode: BuildMode.release))
|
||||||
.thenReturn('gen_snapshot');
|
.thenReturn('gen_snapshot');
|
||||||
when(mockProcessManager.start(
|
when(mockProcessManager.start(
|
||||||
<String>['gen_snapshot', '--causal_async_stacks', '--strip'],
|
<String>['gen_snapshot', '--strip'],
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
workingDirectory: anyNamed('workingDirectory'),
|
||||||
environment: anyNamed('environment')))
|
environment: anyNamed('environment')))
|
||||||
.thenAnswer((_) => Future<Process>.value(mockProc));
|
.thenAnswer((_) => Future<Process>.value(mockProc));
|
||||||
@ -202,7 +199,7 @@ void main() {
|
|||||||
darwinArch: null,
|
darwinArch: null,
|
||||||
additionalArgs: <String>['--strip']);
|
additionalArgs: <String>['--strip']);
|
||||||
verify(mockProcessManager.start(
|
verify(mockProcessManager.start(
|
||||||
<String>['gen_snapshot', '--causal_async_stacks', '--strip'],
|
<String>['gen_snapshot', '--strip'],
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
workingDirectory: anyNamed('workingDirectory'),
|
||||||
environment: anyNamed('environment')))
|
environment: anyNamed('environment')))
|
||||||
.called(1);
|
.called(1);
|
||||||
@ -331,6 +328,8 @@ void main() {
|
|||||||
'--assembly=$assembly',
|
'--assembly=$assembly',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -388,6 +387,8 @@ void main() {
|
|||||||
'--assembly=$assembly',
|
'--assembly=$assembly',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -448,6 +449,8 @@ void main() {
|
|||||||
'--assembly=$assembly',
|
'--assembly=$assembly',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
verifyNever(mockXcode.cc(argThat(contains('-fembed-bitcode'))));
|
verifyNever(mockXcode.cc(argThat(contains('-fembed-bitcode'))));
|
||||||
@ -493,6 +496,8 @@ void main() {
|
|||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-assembly',
|
'--snapshot_kind=app-aot-assembly',
|
||||||
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
}, overrides: contextOverrides);
|
}, overrides: contextOverrides);
|
||||||
@ -531,6 +536,8 @@ void main() {
|
|||||||
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
}, overrides: contextOverrides);
|
}, overrides: contextOverrides);
|
||||||
@ -567,6 +574,8 @@ void main() {
|
|||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-assembly',
|
'--snapshot_kind=app-aot-assembly',
|
||||||
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
}, overrides: contextOverrides);
|
}, overrides: contextOverrides);
|
||||||
@ -597,6 +606,8 @@ void main() {
|
|||||||
'--strip',
|
'--strip',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
}, overrides: contextOverrides);
|
}, overrides: contextOverrides);
|
||||||
@ -625,6 +636,8 @@ void main() {
|
|||||||
'--snapshot_kind=app-aot-elf',
|
'--snapshot_kind=app-aot-elf',
|
||||||
'--elf=build/foo/app.so',
|
'--elf=build/foo/app.so',
|
||||||
'--strip',
|
'--strip',
|
||||||
|
'--no-causal-async-stacks',
|
||||||
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
]);
|
]);
|
||||||
}, overrides: contextOverrides);
|
}, overrides: contextOverrides);
|
||||||
|
@ -64,6 +64,10 @@ void main() {
|
|||||||
expect(mockFrontendServerStdIn.getAndClear(), isEmpty);
|
expect(mockFrontendServerStdIn.getAndClear(), isEmpty);
|
||||||
expect(testLogger.errorText, equals('\nCompiler message:\nline1\nline2\n'));
|
expect(testLogger.errorText, equals('\nCompiler message:\nline1\nline2\n'));
|
||||||
expect(output.outputFilename, equals('/path/to/main.dart.dill'));
|
expect(output.outputFilename, equals('/path/to/main.dart.dill'));
|
||||||
|
final VerificationResult argVerification = verify(mockProcessManager.start(captureAny));
|
||||||
|
expect(argVerification.captured.single, containsAll(<String>[
|
||||||
|
'-Ddart.developer.causal_async_stacks=true',
|
||||||
|
]));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
ProcessManager: () => mockProcessManager,
|
ProcessManager: () => mockProcessManager,
|
||||||
OutputPreferences: () => OutputPreferences(showColor: false),
|
OutputPreferences: () => OutputPreferences(showColor: false),
|
||||||
@ -94,6 +98,7 @@ void main() {
|
|||||||
'-Ddart.vm.profile=true',
|
'-Ddart.vm.profile=true',
|
||||||
'-Ddart.vm.product=false',
|
'-Ddart.vm.product=false',
|
||||||
'--bytecode-options=source-positions',
|
'--bytecode-options=source-positions',
|
||||||
|
'-Ddart.developer.causal_async_stacks=false',
|
||||||
]));
|
]));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
ProcessManager: () => mockProcessManager,
|
ProcessManager: () => mockProcessManager,
|
||||||
@ -126,6 +131,7 @@ void main() {
|
|||||||
'-Ddart.vm.profile=false',
|
'-Ddart.vm.profile=false',
|
||||||
'-Ddart.vm.product=true',
|
'-Ddart.vm.product=true',
|
||||||
'--bytecode-options=source-positions',
|
'--bytecode-options=source-positions',
|
||||||
|
'-Ddart.developer.causal_async_stacks=false',
|
||||||
]));
|
]));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
ProcessManager: () => mockProcessManager,
|
ProcessManager: () => mockProcessManager,
|
||||||
|
Loading…
Reference in New Issue
Block a user