Unverified Commit f149eec3 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] always initialize the resident runner from dill (#52497)

parent d3a66e31
......@@ -75,6 +75,12 @@ class FlutterDevice {
if (device.platformType == PlatformType.fuchsia) {
targetModel = TargetModel.flutterRunner;
}
// For both web and non-web platforms we initialize dill to/from
// a shared location for faster bootstrapping. If the compiler fails
// due to a kernel target or version mismatch, no error is reported
// and the compiler starts up as normal. Unexpected errors will print
// a warning message and dump some debug information which can be
// used to file a bug, but the compiler will still start up correctly.
if (targetPlatform == TargetPlatform.web_javascript) {
generator = ResidentCompiler(
globals.artifacts.getArtifactPath(Artifact.flutterWebSdk, mode: buildInfo.mode),
......@@ -84,6 +90,7 @@ class FlutterDevice {
// Override the filesystem scheme so that the frontend_server can find
// the generated entrypoint code.
fileSystemScheme: 'org-dartlang-app',
initializeFromDill: globals.fs.path.join(getBuildDirectory(), 'cache.dill'),
targetModel: TargetModel.dartdevc,
experimentalFlags: experimentalFlags,
platformDill: globals.fs.file(globals.artifacts
......@@ -107,6 +114,7 @@ class FlutterDevice {
targetModel: targetModel,
experimentalFlags: experimentalFlags,
dartDefines: buildInfo.dartDefines,
initializeFromDill: globals.fs.path.join(getBuildDirectory(), 'cache.dill'),
);
}
......@@ -637,7 +645,6 @@ abstract class ResidentRunner {
final bool ipv6;
final String _dillOutputPath;
/// The parent location of the incremental artifacts.
@visibleForTesting
final Directory artifactDirectory;
final String packagesFilePath;
final String projectRootPath;
......@@ -1017,6 +1024,11 @@ abstract class ResidentRunner {
Future<void> preExit() async {
// If _dillOutputPath is null, we created a temporary directory for the dill.
if (_dillOutputPath == null && artifactDirectory.existsSync()) {
final File outputDill = artifactDirectory.childFile('app.dill');
if (outputDill.existsSync()) {
artifactDirectory.childFile('app.dill')
.copySync(globals.fs.path.join(getBuildDirectory(), 'cache.dill'));
}
artifactDirectory.deleteSync(recursive: true);
}
}
......
......@@ -5,6 +5,7 @@
import 'dart:async';
import 'package:file/memory.dart';
import 'package:file_testing/file_testing.dart';
import 'package:flutter_tools/src/artifacts.dart';
import 'package:flutter_tools/src/base/command_help.dart';
import 'package:flutter_tools/src/base/common.dart';
......@@ -356,6 +357,22 @@ void main() {
expect(otherRunner.artifactDirectory.path, contains('foobar'));
}));
test('ResidentRunner copies output dill to cache location during preExit', () => testbed.run(() async {
residentRunner.artifactDirectory.childFile('app.dill').writeAsStringSync('hello');
await residentRunner.preExit();
final File cacheDill = globals.fs.file(globals.fs.path.join(getBuildDirectory(), 'cache.dill'));
expect(cacheDill, exists);
expect(cacheDill.readAsStringSync(), 'hello');
}));
test('ResidentRunner handles output dill missing during preExit', () => testbed.run(() async {
await residentRunner.preExit();
final File cacheDill = globals.fs.file(globals.fs.path.join(getBuildDirectory(), 'cache.dill'));
expect(cacheDill, isNot(exists));
}));
test('ResidentRunner printHelpDetails', () => testbed.run(() {
when(mockDevice.supportsHotRestart).thenReturn(true);
when(mockDevice.supportsScreenshot).thenReturn(true);
......@@ -697,6 +714,8 @@ void main() {
target: null,
)).generator as DefaultResidentCompiler;
expect(residentCompiler.initializeFromDill,
globals.fs.path.join(getBuildDirectory(), 'cache.dill'));
expect(residentCompiler.librariesSpec,
globals.fs.file(globals.artifacts.getArtifactPath(Artifact.flutterWebLibrariesJson))
.uri.toString());
......
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