未验证 提交 66072316 编写于 作者: A Alexander Markov 提交者: GitHub

Prepare to enable global type flow analysis in AOT (#4725)

* Generate Flutter-specific entry points JSON file while building engine.
* Add ''--tfa' option to front-end server.
* Rename _entryPoint field in front-end server to _mainSource to avoid disambiguation.
上级 4d7065af
...@@ -14,6 +14,12 @@ group("flutter") { ...@@ -14,6 +14,12 @@ group("flutter") {
"$flutter_root/third_party/txt", "$flutter_root/third_party/txt",
] ]
if (flutter_runtime_mode != "debug") {
public_deps += [
"$flutter_root/lib/snapshot:entry_points_json_files",
]
}
if (!is_fuchsia && !is_fuchsia_host) { if (!is_fuchsia && !is_fuchsia_host) {
if (current_toolchain == host_toolchain) { if (current_toolchain == host_toolchain) {
public_deps += [ public_deps += [
......
...@@ -44,6 +44,10 @@ ArgParser _argParser = new ArgParser(allowTrailingOptions: true) ...@@ -44,6 +44,10 @@ ArgParser _argParser = new ArgParser(allowTrailingOptions: true)
..addFlag('strong', ..addFlag('strong',
help: 'Run compiler in strong mode (uses strong mode semantics)', help: 'Run compiler in strong mode (uses strong mode semantics)',
defaultsTo: false) defaultsTo: false)
..addFlag('tfa',
help:
'Enable global type flow analysis and related transformations in AOT mode.',
defaultsTo: false)
..addFlag('link-platform', ..addFlag('link-platform',
help: help:
'When in batch mode, link platform kernel file into result kernel file.' 'When in batch mode, link platform kernel file into result kernel file.'
...@@ -145,7 +149,7 @@ class _FrontendCompiler implements CompilerInterface { ...@@ -145,7 +149,7 @@ class _FrontendCompiler implements CompilerInterface {
BinaryPrinterFactory printerFactory; BinaryPrinterFactory printerFactory;
CompilerOptions _compilerOptions; CompilerOptions _compilerOptions;
Uri _entryPoint; Uri _mainSource;
ArgResults _options; ArgResults _options;
IncrementalCompiler _generator; IncrementalCompiler _generator;
...@@ -155,7 +159,7 @@ class _FrontendCompiler implements CompilerInterface { ...@@ -155,7 +159,7 @@ class _FrontendCompiler implements CompilerInterface {
final bool trackWidgetCreation; final bool trackWidgetCreation;
WidgetCreatorTracker widgetCreatorTracker; WidgetCreatorTracker widgetCreatorTracker;
void setEntrypointFilename(String filename) { void setMainSourceFilename(String filename) {
final Uri filenameUri = Uri.base.resolveUri(new Uri.file(filename)); final Uri filenameUri = Uri.base.resolveUri(new Uri.file(filename));
_kernelBinaryFilenameFull = _options['output-dill'] ?? '$filename.dill'; _kernelBinaryFilenameFull = _options['output-dill'] ?? '$filename.dill';
_kernelBinaryFilenameIncremental = _kernelBinaryFilenameIncremental =
...@@ -164,7 +168,7 @@ class _FrontendCompiler implements CompilerInterface { ...@@ -164,7 +168,7 @@ class _FrontendCompiler implements CompilerInterface {
? '${_options["output-dill"]}.incremental.dill' ? '${_options["output-dill"]}.incremental.dill'
: '$filename.incremental.dill'; : '$filename.incremental.dill';
_kernelBinaryFilename = _kernelBinaryFilenameFull; _kernelBinaryFilename = _kernelBinaryFilenameFull;
_entryPoint = filenameUri; _mainSource = filenameUri;
} }
@override @override
...@@ -174,7 +178,7 @@ class _FrontendCompiler implements CompilerInterface { ...@@ -174,7 +178,7 @@ class _FrontendCompiler implements CompilerInterface {
IncrementalCompiler generator, IncrementalCompiler generator,
}) async { }) async {
_options = options; _options = options;
setEntrypointFilename(filename); setMainSourceFilename(filename);
final String boundaryKey = new Uuid().generateV4(); final String boundaryKey = new Uuid().generateV4();
_outputStream.writeln('result $boundaryKey'); _outputStream.writeln('result $boundaryKey');
final Uri sdkRoot = _ensureFolderPath(options['sdk-root']); final Uri sdkRoot = _ensureFolderPath(options['sdk-root']);
...@@ -201,8 +205,21 @@ class _FrontendCompiler implements CompilerInterface { ...@@ -201,8 +205,21 @@ class _FrontendCompiler implements CompilerInterface {
sdkRoot.resolve(platformKernelDill) sdkRoot.resolve(platformKernelDill)
]; ];
} }
program = await _runWithPrintRedirection(() => final bool aot = options['aot'];
compileToKernel(_entryPoint, compilerOptions, aot: options['aot'])); final List<String> entryPoints = <String>[];
if (aot) {
for (String entryPointsFile in <String>[
'entry_points.json',
'entry_points_extra.json',
]) {
entryPoints.add(sdkRoot.resolve(entryPointsFile).toFilePath());
}
}
program = await _runWithPrintRedirection(() => compileToKernel(
_mainSource, compilerOptions,
aot: aot,
useGlobalTypeFlowAnalysis: options['tfa'],
entryPoints: entryPoints));
} }
runFlutterSpecificKernelTransforms(program); runFlutterSpecificKernelTransforms(program);
if (program != null) { if (program != null) {
...@@ -279,9 +296,10 @@ class _FrontendCompiler implements CompilerInterface { ...@@ -279,9 +296,10 @@ class _FrontendCompiler implements CompilerInterface {
_outputStream.writeln('result $boundaryKey'); _outputStream.writeln('result $boundaryKey');
await invalidateIfBootstrapping(); await invalidateIfBootstrapping();
if (filename != null) { if (filename != null) {
setEntrypointFilename(filename); setMainSourceFilename(filename);
} }
final Program deltaProgram = await _generator.compile(entryPoint: _entryPoint); final Program deltaProgram =
await _generator.compile(entryPoint: _mainSource);
runFlutterSpecificKernelTransforms(deltaProgram); runFlutterSpecificKernelTransforms(deltaProgram);
final IOSink sink = new File(_kernelBinaryFilename).openWrite(); final IOSink sink = new File(_kernelBinaryFilename).openWrite();
final BinaryPrinter printer = printerFactory.newBinaryPrinter(sink); final BinaryPrinter printer = printerFactory.newBinaryPrinter(sink);
...@@ -309,7 +327,7 @@ class _FrontendCompiler implements CompilerInterface { ...@@ -309,7 +327,7 @@ class _FrontendCompiler implements CompilerInterface {
} }
IncrementalCompiler _createGenerator(Uri bootstrapDill) { IncrementalCompiler _createGenerator(Uri bootstrapDill) {
return new IncrementalCompiler(_compilerOptions, _entryPoint, return new IncrementalCompiler(_compilerOptions, _mainSource,
bootstrapDill: bootstrapDill); bootstrapDill: bootstrapDill);
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
import("$flutter_root/lib/ui/dart_ui.gni") import("$flutter_root/lib/ui/dart_ui.gni")
import("//third_party/dart/utils/compile_platform.gni") import("//third_party/dart/utils/compile_platform.gni")
import("//third_party/dart/utils/generate_entry_points_json.gni")
if (is_fuchsia) { if (is_fuchsia) {
import("//build/dart/toolchain.gni") import("//build/dart/toolchain.gni")
...@@ -293,3 +294,39 @@ group("kernel_platform_files") { ...@@ -293,3 +294,39 @@ group("kernel_platform_files") {
":strong_platform", ":strong_platform",
] ]
} }
generate_entry_points_json_with_gen_snapshot("entry_points_json") {
input = "$flutter_root/lib/snapshot/snapshot.dart"
output = "$root_out_dir/flutter_patched_sdk/entry_points.json"
dart_ui = "$flutter_root/lib/ui/ui.dart"
vmservice_io = "//third_party/dart/runtime/bin/vmservice/vmservice_io.dart"
dart_vm_entry_points_txt = "$flutter_root/runtime/dart_vm_entry_points.txt"
dart_io_entries_txt = "//third_party/dart/runtime/bin/dart_io_entries.txt"
extra_inputs = [
dart_ui,
vmservice_io,
dart_vm_entry_points_txt,
dart_io_entries_txt,
]
extra_args = [
"--await_is_keyword",
"--url_mapping=dart:ui," + rebase_path(dart_ui),
"--url_mapping=dart:vmservice_io," + rebase_path(vmservice_io),
"--causal_async_stacks",
"--embedder_entry_points_manifest=" + rebase_path(dart_vm_entry_points_txt),
"--embedder_entry_points_manifest=" + rebase_path(dart_io_entries_txt),
]
}
copy_entry_points_extra_json("entry_points_extra_json") {
output = "$root_out_dir/flutter_patched_sdk/entry_points_extra.json"
}
group("entry_points_json_files") {
public_deps = [
":entry_points_json",
":entry_points_extra_json",
]
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册