Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f9406b6 authored by David Anderson's avatar David Anderson Committed by Automerger Merge Worker
Browse files

Merge "libsnapshot: Move ImageManager creation to DeviceInfo." am: 9ac43f54...

Merge "libsnapshot: Move ImageManager creation to DeviceInfo." am: 9ac43f54 am: 260c7f6e am: 57a440d2 am: 6a4c173e

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1705662

Change-Id: I1ccf96c68dedc492e5547e895a75494660144fc2
parents 33deae41 6a4c173e
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -266,7 +266,7 @@ cc_defaults {
        "android.hardware.boot@1.1",
        "libbrotli",
        "libc++fs",
        "libfs_mgr",
        "libfs_mgr_binder",
        "libgsi",
        "libgmock",
        "liblp",
+41 −0
Original line number Diff line number Diff line
device_info_data {
  allow_set_slot_as_unbootable: true
  is_recovery: true
}
is_super_metadata_valid: true
super_data {
  partitions {
    partition_name: "sys_a"
    new_partition_info {
      size: 3145728
    }
  }
  partitions {
    partition_name: "vnnd_"
    new_partition_info {
      size: 3145728
    }
  }
  partitions {
    partition_name: "prd_a"
    new_partition_info {
    }
  }
  dynamic_partition_metadata {
    groups {
      name: "group_google_dp_a"
      size: 34375467008
      partition_names: "sys_a"
      partition_names: "vnd_a"
      partition_names: "prd_a"
    }
  }
}
has_metadata_snapshots_dir: true
actions {
  handle_imminent_data_wipe: true
}
actions {
  begin_update {
  }
}
+23 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <android-base/logging.h>
#include <fs_mgr.h>
#include <fs_mgr_overlayfs.h>
#include <libfiemap/image_manager.h>

namespace android {
namespace snapshot {
@@ -26,6 +27,7 @@ using android::hardware::boot::V1_0::BoolResult;
using android::hardware::boot::V1_0::CommandResult;
#endif

using namespace std::chrono_literals;
using namespace std::string_literals;

#ifdef __ANDROID_RECOVERY__
@@ -34,10 +36,6 @@ constexpr bool kIsRecovery = true;
constexpr bool kIsRecovery = false;
#endif

std::string DeviceInfo::GetGsidDir() const {
    return "ota"s;
}

std::string DeviceInfo::GetMetadataDir() const {
    return "/metadata/ota"s;
}
@@ -100,6 +98,10 @@ bool DeviceInfo::IsRecovery() const {
    return kIsRecovery;
}

bool DeviceInfo::IsFirstStageInit() const {
    return first_stage_init_;
}

bool DeviceInfo::SetSlotAsUnbootable([[maybe_unused]] unsigned int slot) {
#ifdef LIBSNAPSHOT_USE_HAL
    if (!EnsureBootHal()) {
@@ -120,5 +122,22 @@ bool DeviceInfo::SetSlotAsUnbootable([[maybe_unused]] unsigned int slot) {
#endif
}

std::unique_ptr<android::fiemap::IImageManager> DeviceInfo::OpenImageManager() const {
    return IDeviceInfo::OpenImageManager("ota");
}

std::unique_ptr<android::fiemap::IImageManager> ISnapshotManager::IDeviceInfo::OpenImageManager(
        const std::string& gsid_dir) const {
    if (IsRecovery() || IsFirstStageInit()) {
        android::fiemap::ImageManager::DeviceInfo device_info = {
                .is_recovery = {IsRecovery()},
        };
        return android::fiemap::ImageManager::Open(gsid_dir, device_info);
    } else {
        // For now, use a preset timeout.
        return android::fiemap::IImageManager::Open(gsid_dir, 15000ms);
    }
}

}  // namespace snapshot
}  // namespace android
+5 −1
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ class DeviceInfo final : public SnapshotManager::IDeviceInfo {
    using MergeStatus = android::hardware::boot::V1_1::MergeStatus;

  public:
    std::string GetGsidDir() const override;
    std::string GetMetadataDir() const override;
    std::string GetSlotSuffix() const override;
    std::string GetOtherSlotSuffix() const override;
@@ -39,11 +38,16 @@ class DeviceInfo final : public SnapshotManager::IDeviceInfo {
    bool SetBootControlMergeStatus(MergeStatus status) override;
    bool SetSlotAsUnbootable(unsigned int slot) override;
    bool IsRecovery() const override;
    std::unique_ptr<IImageManager> OpenImageManager() const override;
    bool IsFirstStageInit() const override;

    void set_first_stage_init(bool value) { first_stage_init_ = value; }

  private:
    bool EnsureBootHal();

    android::fs_mgr::PartitionOpener opener_;
    bool first_stage_init_ = false;
#ifdef LIBSNAPSHOT_USE_HAL
    android::sp<android::hardware::boot::V1_1::IBootControl> boot_control_;
#endif
+3 −1
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ namespace android::snapshot {

class MockDeviceInfo : public SnapshotManager::IDeviceInfo {
  public:
    MOCK_METHOD(std::string, GetGsidDir, (), (const, override));
    MOCK_METHOD(std::string, GetMetadataDir, (), (const, override));
    MOCK_METHOD(std::string, GetSlotSuffix, (), (const, override));
    MOCK_METHOD(std::string, GetOtherSlotSuffix, (), (const, override));
@@ -32,6 +31,9 @@ class MockDeviceInfo : public SnapshotManager::IDeviceInfo {
    MOCK_METHOD(bool, SetBootControlMergeStatus, (MergeStatus status), (override));
    MOCK_METHOD(bool, SetSlotAsUnbootable, (unsigned int slot), (override));
    MOCK_METHOD(bool, IsRecovery, (), (const, override));
    MOCK_METHOD(bool, IsFirstStageInit, (), (const, override));
    MOCK_METHOD(std::unique_ptr<android::fiemap::IImageManager>, OpenImageManager, (),
                (const, override));
};

}  // namespace android::snapshot
Loading