Skip to content

Commit f480e32

Browse files
authored
Support hot reload in corejit mode (flutter#5866)
Since frontend_server --incremental doesn't support --link-platform, instead of baking host app into the snapshot, load it from kernel file when running in debug mode.
1 parent 66f87f4 commit f480e32

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

shell/platform/android/platform_view_android_jni.cc

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,26 @@ std::unique_ptr<IsolateConfiguration> CreateIsolateConfiguration(
184184
const auto configuration_from_blob =
185185
[&asset_manager](const std::string& snapshot_name)
186186
-> std::unique_ptr<IsolateConfiguration> {
187-
std::unique_ptr<fml::Mapping> blob =
188-
asset_manager.GetAsMapping(snapshot_name);
187+
auto blob = asset_manager.GetAsMapping(snapshot_name);
188+
auto delta = asset_manager.GetAsMapping("kernel_delta.bin");
189+
if (blob && delta) {
190+
std::vector<std::unique_ptr<fml::Mapping>> kernels;
191+
kernels.emplace_back(std::move(blob));
192+
kernels.emplace_back(std::move(delta));
193+
return IsolateConfiguration::CreateForKernelList(std::move(kernels));
194+
}
189195
if (blob) {
190196
return IsolateConfiguration::CreateForSnapshot(std::move(blob));
191197
}
198+
if (delta) {
199+
return IsolateConfiguration::CreateForSnapshot(std::move(delta));
200+
}
192201
return nullptr;
193202
};
194203

195204
if (auto kernel = configuration_from_blob("kernel_blob.bin")) {
196205
return kernel;
197206
}
198-
199207
if (auto script = configuration_from_blob("snapshot_blob.bin")) {
200208
return script;
201209
}
@@ -209,14 +217,13 @@ static void RunBundleAndSnapshot(
209217
jobject jcaller,
210218
jlong shell_holder,
211219
jstring jbundlepath,
212-
jstring /* snapshot override (unused) */,
220+
jstring jsnapshotOverride,
213221
jstring jEntrypoint,
214222
jboolean /* reuse runtime controller (unused) */,
215223
jobject jAssetManager) {
216224
auto asset_manager = fml::MakeRefCounted<blink::AssetManager>();
217225

218226
const auto bundlepath = fml::jni::JavaStringToString(env, jbundlepath);
219-
220227
if (bundlepath.size() > 0) {
221228
// If we got a bundle path, attempt to use that as a directory asset
222229
// bundle or a zip asset bundle.
@@ -244,8 +251,13 @@ static void RunBundleAndSnapshot(
244251
}
245252
}
246253

247-
auto isolate_configuration = CreateIsolateConfiguration(*asset_manager);
254+
const auto defaultpath = fml::jni::JavaStringToString(env, jsnapshotOverride);
255+
if (defaultpath.size() > 0) {
256+
asset_manager->PushBack(std::make_unique<blink::DirectoryAssetBundle>(
257+
fml::OpenFile(defaultpath.c_str(), fml::OpenPermission::kRead, true)));
258+
}
248259

260+
auto isolate_configuration = CreateIsolateConfiguration(*asset_manager);
249261
if (!isolate_configuration) {
250262
FXL_DLOG(ERROR)
251263
<< "Isolate configuration could not be determined for engine launch.";

0 commit comments

Comments
 (0)