Revert "Use reference counted pointers for ApkAssets"
This reverts commit c357f719ed3734aee05418808699a48dd150a1a5.
Reason for revert: b/279154343 - performance regression
Change-Id: If2e212d8fc5b9ed8638032a33f450440cbaeceb0
diff --git a/cmds/idmap2/idmap2/Lookup.cpp b/cmds/idmap2/idmap2/Lookup.cpp
index add0d8d..f41e57c 100644
--- a/cmds/idmap2/idmap2/Lookup.cpp
+++ b/cmds/idmap2/idmap2/Lookup.cpp
@@ -174,7 +174,7 @@
return Error("failed to parse config");
}
- std::vector<AssetManager2::ApkAssetsPtr> apk_assets;
+ std::vector<std::unique_ptr<const ApkAssets>> apk_assets;
std::string target_path;
std::string target_package_name;
for (size_t i = 0; i < idmap_paths.size(); i++) {
@@ -217,21 +217,24 @@
apk_assets.push_back(std::move(overlay_apk));
}
- {
- // Make sure |apk_assets| vector outlives the asset manager as it doesn't own the assets.
- AssetManager2 am(apk_assets, config);
+ // AssetManager2::SetApkAssets requires raw ApkAssets pointers, not unique_ptrs
+ std::vector<const ApkAssets*> raw_pointer_apk_assets;
+ std::transform(apk_assets.cbegin(), apk_assets.cend(), std::back_inserter(raw_pointer_apk_assets),
+ [](const auto& p) -> const ApkAssets* { return p.get(); });
+ AssetManager2 am;
+ am.SetApkAssets(raw_pointer_apk_assets);
+ am.SetConfiguration(config);
- const Result<ResourceId> resid = ParseResReference(am, resid_str, target_package_name);
- if (!resid) {
- return Error(resid.GetError(), "failed to parse resource ID");
- }
-
- const Result<std::string> value = GetValue(&am, *resid);
- if (!value) {
- return Error(value.GetError(), "resource 0x%08x not found", *resid);
- }
- std::cout << *value << std::endl;
+ const Result<ResourceId> resid = ParseResReference(am, resid_str, target_package_name);
+ if (!resid) {
+ return Error(resid.GetError(), "failed to parse resource ID");
}
+ const Result<std::string> value = GetValue(&am, *resid);
+ if (!value) {
+ return Error(value.GetError(), "resource 0x%08x not found", *resid);
+ }
+ std::cout << *value << std::endl;
+
return Unit{};
}
diff --git a/cmds/idmap2/libidmap2/ResourceContainer.cpp b/cmds/idmap2/libidmap2/ResourceContainer.cpp
index 7869fbd..0e35904 100644
--- a/cmds/idmap2/libidmap2/ResourceContainer.cpp
+++ b/cmds/idmap2/libidmap2/ResourceContainer.cpp
@@ -262,7 +262,7 @@
}
struct ResState {
- AssetManager2::ApkAssetsPtr apk_assets;
+ std::unique_ptr<ApkAssets> apk_assets;
const LoadedArsc* arsc;
const LoadedPackage* package;
std::unique_ptr<AssetManager2> am;
@@ -284,7 +284,7 @@
}
state.am = std::make_unique<AssetManager2>();
- if (!state.am->SetApkAssets({state.apk_assets})) {
+ if (!state.am->SetApkAssets({state.apk_assets.get()})) {
return Error("failed to create asset manager");
}
diff --git a/cmds/idmap2/tests/ResourceUtilsTests.cpp b/cmds/idmap2/tests/ResourceUtilsTests.cpp
index 011040b..6914208 100644
--- a/cmds/idmap2/tests/ResourceUtilsTests.cpp
+++ b/cmds/idmap2/tests/ResourceUtilsTests.cpp
@@ -38,7 +38,7 @@
apk_assets_ = ApkAssets::Load(GetTargetApkPath());
ASSERT_THAT(apk_assets_, NotNull());
- am_.SetApkAssets({apk_assets_});
+ am_.SetApkAssets({apk_assets_.get()});
}
const AssetManager2& GetAssetManager() {
@@ -47,7 +47,7 @@
private:
AssetManager2 am_;
- AssetManager2::ApkAssetsPtr apk_assets_;
+ std::unique_ptr<const ApkAssets> apk_assets_;
};
TEST_F(ResourceUtilsTests, ResToTypeEntryName) {