aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-prod (mdb) <android-build-team-robot@google.com>2020-11-10 01:45:04 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-11-10 01:45:04 +0000
commit0704a050e2fb7f531bee3a6cafa3cbdefe9d35b2 (patch)
tree2d59374b54c997a981d46d1d05edb2481773daf6
parentaf50649b476fa223e1ea645131fdfcd1df0a2f83 (diff)
parentee8714c2fdbfaf9e2951074d07c14a50c95086f5 (diff)
downloadqemu-snap-temp-L88100000739736976.tar.gz
Merge "Revert snapshot code path." into snap-temp-L88100000739736976snap-temp-L88100000739736976
-rw-r--r--android/android-emu/android/snapshot/Snapshot.cpp79
1 files changed, 78 insertions, 1 deletions
diff --git a/android/android-emu/android/snapshot/Snapshot.cpp b/android/android-emu/android/snapshot/Snapshot.cpp
index 377fa23c77..ff6e9cadda 100644
--- a/android/android-emu/android/snapshot/Snapshot.cpp
+++ b/android/android-emu/android/snapshot/Snapshot.cpp
@@ -732,7 +732,7 @@ const bool Snapshot::checkOfflineValid(bool writeFailure) {
}
const bool Snapshot::checkValid(bool writeFailure) {
- if (!checkOfflineValid(writeFailure)) {
+ if (!preload()) {
return false;
}
@@ -750,6 +750,83 @@ const bool Snapshot::checkValid(bool writeFailure) {
return false;
}
+ if (mSnapshotPb.images_size() > int(ARRAY_SIZE(kImages))) {
+ if (writeFailure)
+ saveFailure(FailureReason::ConfigMismatchAvd);
+ return false;
+ }
+
+ int matchedImages = 0;
+ for (const auto& image : kImages) {
+ ScopedCPtr<char> path(image.pathGetter(android_avdInfo));
+ const auto type = image.type;
+ const auto it = std::find_if(
+ mSnapshotPb.images().begin(), mSnapshotPb.images().end(),
+ [type](const pb::Image& im) {
+ return im.has_type() && im.type() == type;
+ });
+ if (it != mSnapshotPb.images().end()) {
+ if (!verifyImageInfo(image.type, path.get(), *it)) {
+ // If in build env, nuke the qcow2 as well.
+ if (avdInfo_inAndroidBuild(android_avdInfo)) {
+ std::string qcow2Path(path.get());
+ qcow2Path += ".qcow2";
+ path_delete_file(qcow2Path.c_str());
+ }
+
+ if (writeFailure)
+ saveFailure(FailureReason::SystemImageChanged);
+ return false;
+ }
+ ++matchedImages;
+ } else {
+ // Should match an empty image info
+ if (!verifyImageInfo(image.type, path.get(), pb::Image())) {
+ // If in build env, nuke the qcow2 as well.
+ if (avdInfo_inAndroidBuild(android_avdInfo)) {
+ std::string qcow2Path(path.get());
+ qcow2Path += ".qcow2";
+ path_delete_file(qcow2Path.c_str());
+ }
+
+ if (writeFailure)
+ saveFailure(FailureReason::NoSnapshotInImage);
+ return false;
+ }
+ }
+ }
+ if (matchedImages != mSnapshotPb.images_size()) {
+ if (writeFailure)
+ saveFailure(FailureReason::ConfigMismatchAvd);
+ return false;
+ }
+
+ IniFile expectedConfig(PathUtils::join(mDataDir, "hardware.ini"));
+ if (!expectedConfig.read(false)) {
+ if (writeFailure)
+ saveFailure(FailureReason::CorruptedData);
+ return false;
+ }
+ IniFile actualConfig(avdInfo_getCoreHwIniPath(android_avdInfo));
+ if (!actualConfig.read(false)) {
+ if (writeFailure)
+ saveFailure(FailureReason::InternalError);
+ return false;
+ }
+ IniFile expectedStripped;
+ androidHwConfig_stripDefaults(
+ reinterpret_cast<CIniFile*>(&expectedConfig),
+ reinterpret_cast<CIniFile*>(&expectedStripped));
+ IniFile actualStripped;
+ androidHwConfig_stripDefaults(reinterpret_cast<CIniFile*>(&actualConfig),
+ reinterpret_cast<CIniFile*>(&actualStripped));
+ if (!areHwConfigsEqual(expectedStripped, actualStripped)) {
+ fprintf(stderr, "%s: hw configs not eq\n", __func__);
+ if (writeFailure)
+ saveFailure(FailureReason::ConfigMismatchAvd);
+ return false;
+ }
+
if (mSnapshotPb.has_invalid_loads()) {
mInvalidLoads = mSnapshotPb.invalid_loads();
} else {