Revert "Use reference counted pointers for ApkAssets"
This reverts commit c357f719ed3734aee05418808699a48dd150a1a5.
Reason for revert: b/279154343 - performance regression
Change-Id: If2e212d8fc5b9ed8638032a33f450440cbaeceb0
diff --git a/libs/androidfw/tests/ApkAssets_test.cpp b/libs/androidfw/tests/ApkAssets_test.cpp
index 70326b7..19db25c 100644
--- a/libs/androidfw/tests/ApkAssets_test.cpp
+++ b/libs/androidfw/tests/ApkAssets_test.cpp
@@ -35,7 +35,8 @@
namespace android {
TEST(ApkAssetsTest, LoadApk) {
- auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+ std::unique_ptr<const ApkAssets> loaded_apk =
+ ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
ASSERT_THAT(loaded_apk, NotNull());
const LoadedArsc* loaded_arsc = loaded_apk->GetLoadedArsc();
@@ -49,7 +50,7 @@
unique_fd fd(::open(path.c_str(), O_RDONLY | O_BINARY));
ASSERT_THAT(fd.get(), Ge(0));
- auto loaded_apk = ApkAssets::LoadFromFd(std::move(fd), path);
+ std::unique_ptr<const ApkAssets> loaded_apk = ApkAssets::LoadFromFd(std::move(fd), path);
ASSERT_THAT(loaded_apk, NotNull());
const LoadedArsc* loaded_arsc = loaded_apk->GetLoadedArsc();
@@ -59,7 +60,8 @@
}
TEST(ApkAssetsTest, LoadApkAsSharedLibrary) {
- auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/appaslib/appaslib.apk");
+ std::unique_ptr<const ApkAssets> loaded_apk =
+ ApkAssets::Load(GetTestDataPath() + "/appaslib/appaslib.apk");
ASSERT_THAT(loaded_apk, NotNull());
const LoadedArsc* loaded_arsc = loaded_apk->GetLoadedArsc();
@@ -77,7 +79,8 @@
}
TEST(ApkAssetsTest, CreateAndDestroyAssetKeepsApkAssetsOpen) {
- auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+ std::unique_ptr<const ApkAssets> loaded_apk =
+ ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
ASSERT_THAT(loaded_apk, NotNull());
{ ASSERT_THAT(loaded_apk->GetAssetsProvider()->Open("res/layout/main.xml",
@@ -88,7 +91,8 @@
}
TEST(ApkAssetsTest, OpenUncompressedAssetFd) {
- auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+ std::unique_ptr<const ApkAssets> loaded_apk =
+ ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
ASSERT_THAT(loaded_apk, NotNull());
auto asset = loaded_apk->GetAssetsProvider()->Open("assets/uncompressed.txt",
diff --git a/libs/androidfw/tests/AssetManager2_bench.cpp b/libs/androidfw/tests/AssetManager2_bench.cpp
index 6fae72a..c7ae618 100644
--- a/libs/androidfw/tests/AssetManager2_bench.cpp
+++ b/libs/androidfw/tests/AssetManager2_bench.cpp
@@ -38,9 +38,9 @@
static void BM_AssetManagerLoadAssets(benchmark::State& state) {
std::string path = GetTestDataPath() + "/basic/basic.apk";
while (state.KeepRunning()) {
- auto apk = ApkAssets::Load(path);
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(path);
AssetManager2 assets;
- assets.SetApkAssets({apk});
+ assets.SetApkAssets({apk.get()});
}
}
BENCHMARK(BM_AssetManagerLoadAssets);
@@ -61,9 +61,9 @@
static void BM_AssetManagerLoadFrameworkAssets(benchmark::State& state) {
std::string path = kFrameworkPath;
while (state.KeepRunning()) {
- auto apk = ApkAssets::Load(path);
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(path);
AssetManager2 assets;
- assets.SetApkAssets({apk});
+ assets.SetApkAssets({apk.get()});
}
}
BENCHMARK(BM_AssetManagerLoadFrameworkAssets);
@@ -129,14 +129,14 @@
BENCHMARK(BM_AssetManagerGetResourceFrameworkLocaleOld);
static void BM_AssetManagerGetBag(benchmark::State& state) {
- auto apk = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
if (apk == nullptr) {
state.SkipWithError("Failed to load assets");
return;
}
AssetManager2 assets;
- assets.SetApkAssets({apk});
+ assets.SetApkAssets({apk.get()});
while (state.KeepRunning()) {
auto bag = assets.GetBag(app::R::style::StyleTwo);
@@ -181,14 +181,14 @@
BENCHMARK(BM_AssetManagerGetBagOld);
static void BM_AssetManagerGetResourceLocales(benchmark::State& state) {
- auto apk = ApkAssets::Load(kFrameworkPath);
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
if (apk == nullptr) {
state.SkipWithError("Failed to load assets");
return;
}
AssetManager2 assets;
- assets.SetApkAssets({apk});
+ assets.SetApkAssets({apk.get()});
while (state.KeepRunning()) {
std::set<std::string> locales =
@@ -217,14 +217,14 @@
BENCHMARK(BM_AssetManagerGetResourceLocalesOld);
static void BM_AssetManagerSetConfigurationFramework(benchmark::State& state) {
- auto apk = ApkAssets::Load(kFrameworkPath);
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
if (apk == nullptr) {
state.SkipWithError("Failed to load assets");
return;
}
AssetManager2 assets;
- assets.SetApkAssets({apk});
+ assets.SetApkAssets({apk.get()});
ResTable_config config;
memset(&config, 0, sizeof(config));
diff --git a/libs/androidfw/tests/AssetManager2_test.cpp b/libs/androidfw/tests/AssetManager2_test.cpp
index 5a5bafdf..4394740 100644
--- a/libs/androidfw/tests/AssetManager2_test.cpp
+++ b/libs/androidfw/tests/AssetManager2_test.cpp
@@ -91,19 +91,19 @@
}
protected:
- AssetManager2::ApkAssetsPtr basic_assets_;
- AssetManager2::ApkAssetsPtr basic_de_fr_assets_;
- AssetManager2::ApkAssetsPtr basic_xhdpi_assets_;
- AssetManager2::ApkAssetsPtr basic_xxhdpi_assets_;
- AssetManager2::ApkAssetsPtr style_assets_;
- AssetManager2::ApkAssetsPtr lib_one_assets_;
- AssetManager2::ApkAssetsPtr lib_two_assets_;
- AssetManager2::ApkAssetsPtr libclient_assets_;
- AssetManager2::ApkAssetsPtr appaslib_assets_;
- AssetManager2::ApkAssetsPtr system_assets_;
- AssetManager2::ApkAssetsPtr app_assets_;
- AssetManager2::ApkAssetsPtr overlay_assets_;
- AssetManager2::ApkAssetsPtr overlayable_assets_;
+ std::unique_ptr<const ApkAssets> basic_assets_;
+ std::unique_ptr<const ApkAssets> basic_de_fr_assets_;
+ std::unique_ptr<const ApkAssets> basic_xhdpi_assets_;
+ std::unique_ptr<const ApkAssets> basic_xxhdpi_assets_;
+ std::unique_ptr<const ApkAssets> style_assets_;
+ std::unique_ptr<const ApkAssets> lib_one_assets_;
+ std::unique_ptr<const ApkAssets> lib_two_assets_;
+ std::unique_ptr<const ApkAssets> libclient_assets_;
+ std::unique_ptr<const ApkAssets> appaslib_assets_;
+ std::unique_ptr<const ApkAssets> system_assets_;
+ std::unique_ptr<const ApkAssets> app_assets_;
+ std::unique_ptr<const ApkAssets> overlay_assets_;
+ std::unique_ptr<const ApkAssets> overlayable_assets_;
};
TEST_F(AssetManager2Test, FindsResourceFromSingleApkAssets) {
@@ -114,7 +114,7 @@
AssetManager2 assetmanager;
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto value = assetmanager.GetResource(basic::R::string::test1);
ASSERT_TRUE(value.has_value());
@@ -138,7 +138,7 @@
AssetManager2 assetmanager;
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({basic_assets_, basic_de_fr_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get(), basic_de_fr_assets_.get()});
auto value = assetmanager.GetResource(basic::R::string::test1);
ASSERT_TRUE(value.has_value());
@@ -159,7 +159,8 @@
// libclient is built with lib_one and then lib_two in order.
// Reverse the order to test that proper package ID re-assignment is happening.
- assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
+ assetmanager.SetApkAssets(
+ {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
auto value = assetmanager.GetResource(libclient::R::string::foo_one);
ASSERT_TRUE(value.has_value());
@@ -194,7 +195,7 @@
TEST_F(AssetManager2Test, FindsResourceFromAppLoadedAsSharedLibrary) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({appaslib_assets_});
+ assetmanager.SetApkAssets({appaslib_assets_.get()});
// The appaslib package will have been assigned the package ID 0x02.
auto value = assetmanager.GetResource(fix_package_id(appaslib::R::integer::number1, 0x02));
@@ -205,26 +206,27 @@
TEST_F(AssetManager2Test, AssignsOverlayPackageIdLast) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({overlayable_assets_, overlay_assets_, lib_one_assets_});
+ assetmanager.SetApkAssets(
+ {overlayable_assets_.get(), overlay_assets_.get(), lib_one_assets_.get()});
auto apk_assets = assetmanager.GetApkAssets();
ASSERT_EQ(3, apk_assets.size());
- ASSERT_EQ(overlayable_assets_, apk_assets[0].promote());
- ASSERT_EQ(overlay_assets_, apk_assets[1].promote());
- ASSERT_EQ(lib_one_assets_, apk_assets[2].promote());
+ ASSERT_EQ(overlayable_assets_.get(), apk_assets[0]);
+ ASSERT_EQ(overlay_assets_.get(), apk_assets[1]);
+ ASSERT_EQ(lib_one_assets_.get(), apk_assets[2]);
- auto get_first_package_id = [&assetmanager](auto apkAssets) -> uint8_t {
+ auto get_first_package_id = [&assetmanager](const ApkAssets* apkAssets) -> uint8_t {
return assetmanager.GetAssignedPackageId(apkAssets->GetLoadedArsc()->GetPackages()[0].get());
};
- ASSERT_EQ(0x7f, get_first_package_id(overlayable_assets_));
- ASSERT_EQ(0x03, get_first_package_id(overlay_assets_));
- ASSERT_EQ(0x02, get_first_package_id(lib_one_assets_));
+ ASSERT_EQ(0x7f, get_first_package_id(overlayable_assets_.get()));
+ ASSERT_EQ(0x03, get_first_package_id(overlay_assets_.get()));
+ ASSERT_EQ(0x02, get_first_package_id(lib_one_assets_.get()));
}
TEST_F(AssetManager2Test, GetSharedLibraryResourceName) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({lib_one_assets_});
+ assetmanager.SetApkAssets({lib_one_assets_.get()});
auto name = assetmanager.GetResourceName(lib_one::R::string::foo);
ASSERT_TRUE(name.has_value());
@@ -233,7 +235,7 @@
TEST_F(AssetManager2Test, GetResourceNameNonMatchingConfig) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_de_fr_assets_});
+ assetmanager.SetApkAssets({basic_de_fr_assets_.get()});
auto value = assetmanager.GetResourceName(basic::R::string::test1);
ASSERT_TRUE(value.has_value());
@@ -242,7 +244,7 @@
TEST_F(AssetManager2Test, GetResourceTypeSpecFlags) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_de_fr_assets_});
+ assetmanager.SetApkAssets({basic_de_fr_assets_.get()});
auto value = assetmanager.GetResourceTypeSpecFlags(basic::R::string::test1);
ASSERT_TRUE(value.has_value());
@@ -251,7 +253,7 @@
TEST_F(AssetManager2Test, FindsBagResourceFromSingleApkAssets) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto bag = assetmanager.GetBag(basic::R::array::integerArray1);
ASSERT_TRUE(bag.has_value());
@@ -278,7 +280,8 @@
// libclient is built with lib_one and then lib_two in order.
// Reverse the order to test that proper package ID re-assignment is happening.
- assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
+ assetmanager.SetApkAssets(
+ {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
auto bag = assetmanager.GetBag(fix_package_id(lib_one::R::style::Theme, 0x03));
ASSERT_TRUE(bag.has_value());
@@ -297,7 +300,8 @@
// libclient is built with lib_one and then lib_two in order.
// Reverse the order to test that proper package ID re-assignment is happening.
- assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
+ assetmanager.SetApkAssets(
+ {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
auto bag = assetmanager.GetBag(libclient::R::style::ThemeMultiLib);
ASSERT_TRUE(bag.has_value());
@@ -317,7 +321,8 @@
// libclient is built with lib_one and then lib_two in order.
// Reverse the order to test that proper package ID re-assignment is happening.
- assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
+ assetmanager.SetApkAssets(
+ {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
auto bag = assetmanager.GetBag(libclient::R::style::Theme);
ASSERT_TRUE(bag.has_value());
@@ -332,7 +337,7 @@
TEST_F(AssetManager2Test, MergesStylesWithParentFromSingleApkAssets) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
auto bag_one = assetmanager.GetBag(app::R::style::StyleOne);
ASSERT_TRUE(bag_one.has_value());
@@ -396,7 +401,7 @@
TEST_F(AssetManager2Test, MergeStylesCircularDependency) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
// GetBag should stop traversing the parents of styles when a circular
// dependency is detected
@@ -407,7 +412,7 @@
TEST_F(AssetManager2Test, ResolveReferenceToResource) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto value = assetmanager.GetResource(basic::R::integer::ref1);
ASSERT_TRUE(value.has_value());
@@ -423,7 +428,7 @@
TEST_F(AssetManager2Test, ResolveReferenceToBag) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto value = assetmanager.GetResource(basic::R::integer::number2, true /*may_be_bag*/);
ASSERT_TRUE(value.has_value());
@@ -439,7 +444,7 @@
TEST_F(AssetManager2Test, ResolveDeepIdReference) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
// Set up the resource ids
auto high_ref = assetmanager.GetResourceId("@id/high_ref", "values", "com.android.basic");
@@ -465,7 +470,8 @@
TEST_F(AssetManager2Test, DensityOverride) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_, basic_xhdpi_assets_, basic_xxhdpi_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get(), basic_xhdpi_assets_.get(),
+ basic_xxhdpi_assets_.get()});
assetmanager.SetConfiguration({
.density = ResTable_config::DENSITY_XHIGH,
.sdkVersion = 21,
@@ -487,7 +493,7 @@
TEST_F(AssetManager2Test, KeepLastReferenceIdUnmodifiedIfNoReferenceIsResolved) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
// Create some kind of value that is NOT a reference.
AssetManager2::SelectedValue value{};
@@ -503,7 +509,7 @@
TEST_F(AssetManager2Test, ResolveReferenceMissingResourceDoNotCacheFlags) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
{
AssetManager2::SelectedValue value{};
value.data = basic::R::string::test1;
@@ -534,7 +540,7 @@
TEST_F(AssetManager2Test, ResolveReferenceMissingResource) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
const uint32_t kMissingResId = 0x8001ffff;
AssetManager2::SelectedValue value{};
@@ -552,7 +558,7 @@
TEST_F(AssetManager2Test, ResolveReferenceMissingResourceLib) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({libclient_assets_});
+ assetmanager.SetApkAssets({libclient_assets_.get()});
AssetManager2::SelectedValue value{};
value.type = Res_value::TYPE_REFERENCE;
@@ -574,7 +580,7 @@
TEST_F(AssetManager2Test, GetResourceConfigurations) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({system_assets_, basic_de_fr_assets_});
+ assetmanager.SetApkAssets({system_assets_.get(), basic_de_fr_assets_.get()});
auto configurations = assetmanager.GetResourceConfigurations();
ASSERT_TRUE(configurations.has_value());
@@ -619,7 +625,7 @@
TEST_F(AssetManager2Test, GetResourceLocales) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({system_assets_, basic_de_fr_assets_});
+ assetmanager.SetApkAssets({system_assets_.get(), basic_de_fr_assets_.get()});
std::set<std::string> locales = assetmanager.GetResourceLocales();
@@ -638,7 +644,7 @@
TEST_F(AssetManager2Test, GetResourceId) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto resid = assetmanager.GetResourceId("com.android.basic:layout/main", "", "");
ASSERT_TRUE(resid.has_value());
@@ -655,7 +661,7 @@
TEST_F(AssetManager2Test, OpensFileFromSingleApkAssets) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({system_assets_});
+ assetmanager.SetApkAssets({system_assets_.get()});
std::unique_ptr<Asset> asset = assetmanager.Open("file.txt", Asset::ACCESS_BUFFER);
ASSERT_THAT(asset, NotNull());
@@ -667,7 +673,7 @@
TEST_F(AssetManager2Test, OpensFileFromMultipleApkAssets) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({system_assets_, app_assets_});
+ assetmanager.SetApkAssets({system_assets_.get(), app_assets_.get()});
std::unique_ptr<Asset> asset = assetmanager.Open("file.txt", Asset::ACCESS_BUFFER);
ASSERT_THAT(asset, NotNull());
@@ -679,7 +685,7 @@
TEST_F(AssetManager2Test, OpenDir) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({system_assets_});
+ assetmanager.SetApkAssets({system_assets_.get()});
std::unique_ptr<AssetDir> asset_dir = assetmanager.OpenDir("");
ASSERT_THAT(asset_dir, NotNull());
@@ -701,7 +707,7 @@
TEST_F(AssetManager2Test, OpenDirFromManyApks) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({system_assets_, app_assets_});
+ assetmanager.SetApkAssets({system_assets_.get(), app_assets_.get()});
std::unique_ptr<AssetDir> asset_dir = assetmanager.OpenDir("");
ASSERT_THAT(asset_dir, NotNull());
@@ -722,7 +728,7 @@
AssetManager2 assetmanager;
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
assetmanager.SetResourceResolutionLoggingEnabled(false);
auto value = assetmanager.GetResource(basic::R::string::test1);
@@ -737,7 +743,7 @@
AssetManager2 assetmanager;
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto result = assetmanager.GetLastResourceResolution();
EXPECT_EQ("", result);
@@ -752,18 +758,17 @@
AssetManager2 assetmanager;
assetmanager.SetResourceResolutionLoggingEnabled(true);
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto value = assetmanager.GetResource(basic::R::string::test1);
ASSERT_TRUE(value.has_value());
auto result = assetmanager.GetLastResourceResolution();
- EXPECT_EQ(
- "Resolution for 0x7f030000 com.android.basic:string/test1\n"
- "\tFor config - de\n"
- "\tFound initial: basic/basic.apk #0\n"
- "Best matching is from default configuration of com.android.basic",
- result);
+ EXPECT_EQ("Resolution for 0x7f030000 com.android.basic:string/test1\n"
+ "\tFor config - de\n"
+ "\tFound initial: basic/basic.apk\n"
+ "Best matching is from default configuration of com.android.basic",
+ result);
}
TEST_F(AssetManager2Test, GetLastPathWithMultipleApkAssets) {
@@ -775,19 +780,18 @@
AssetManager2 assetmanager;
assetmanager.SetResourceResolutionLoggingEnabled(true);
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({basic_assets_, basic_de_fr_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get(), basic_de_fr_assets_.get()});
auto value = assetmanager.GetResource(basic::R::string::test1);
ASSERT_TRUE(value.has_value());
auto result = assetmanager.GetLastResourceResolution();
- EXPECT_EQ(
- "Resolution for 0x7f030000 com.android.basic:string/test1\n"
- "\tFor config - de\n"
- "\tFound initial: basic/basic.apk #0\n"
- "\tFound better: basic/basic_de_fr.apk #1 - de\n"
- "Best matching is from de configuration of com.android.basic",
- result);
+ EXPECT_EQ("Resolution for 0x7f030000 com.android.basic:string/test1\n"
+ "\tFor config - de\n"
+ "\tFound initial: basic/basic.apk\n"
+ "\tFound better: basic/basic_de_fr.apk - de\n"
+ "Best matching is from de configuration of com.android.basic",
+ result);
}
TEST_F(AssetManager2Test, GetLastPathAfterDisablingReturnsEmpty) {
@@ -797,7 +801,7 @@
AssetManager2 assetmanager;
assetmanager.SetResourceResolutionLoggingEnabled(true);
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({basic_assets_});
+ assetmanager.SetApkAssets({basic_assets_.get()});
auto value = assetmanager.GetResource(basic::R::string::test1);
ASSERT_TRUE(value.has_value());
@@ -818,7 +822,7 @@
AssetManager2 assetmanager;
assetmanager.SetResourceResolutionLoggingEnabled(true);
assetmanager.SetConfiguration(desired_config);
- assetmanager.SetApkAssets({overlayable_assets_});
+ assetmanager.SetApkAssets({overlayable_assets_.get()});
const auto map = assetmanager.GetOverlayableMapForPackage(0x7f);
ASSERT_NE(nullptr, map);
diff --git a/libs/androidfw/tests/AttributeResolution_bench.cpp b/libs/androidfw/tests/AttributeResolution_bench.cpp
index 384f4a7..1c89c61 100644
--- a/libs/androidfw/tests/AttributeResolution_bench.cpp
+++ b/libs/androidfw/tests/AttributeResolution_bench.cpp
@@ -36,14 +36,15 @@
constexpr const static uint32_t Theme_Material_Light = 0x01030237u;
static void BM_ApplyStyle(benchmark::State& state) {
- auto styles_apk = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
+ std::unique_ptr<const ApkAssets> styles_apk =
+ ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
if (styles_apk == nullptr) {
state.SkipWithError("failed to load assets");
return;
}
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({styles_apk});
+ assetmanager.SetApkAssets({styles_apk.get()});
std::unique_ptr<Asset> asset =
assetmanager.OpenNonAsset("res/layout/layout.xml", Asset::ACCESS_BUFFER);
@@ -79,20 +80,21 @@
BENCHMARK(BM_ApplyStyle);
static void BM_ApplyStyleFramework(benchmark::State& state) {
- auto framework_apk = ApkAssets::Load(kFrameworkPath);
+ std::unique_ptr<const ApkAssets> framework_apk = ApkAssets::Load(kFrameworkPath);
if (framework_apk == nullptr) {
state.SkipWithError("failed to load framework assets");
return;
}
- auto basic_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+ std::unique_ptr<const ApkAssets> basic_apk =
+ ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
if (basic_apk == nullptr) {
state.SkipWithError("failed to load assets");
return;
}
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({framework_apk, basic_apk});
+ assetmanager.SetApkAssets({framework_apk.get(), basic_apk.get()});
ResTable_config device_config;
memset(&device_config, 0, sizeof(device_config));
diff --git a/libs/androidfw/tests/AttributeResolution_test.cpp b/libs/androidfw/tests/AttributeResolution_test.cpp
index 329830f..bb9129a 100644
--- a/libs/androidfw/tests/AttributeResolution_test.cpp
+++ b/libs/androidfw/tests/AttributeResolution_test.cpp
@@ -36,11 +36,11 @@
virtual void SetUp() override {
styles_assets_ = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
ASSERT_NE(nullptr, styles_assets_);
- assetmanager_.SetApkAssets({styles_assets_});
+ assetmanager_.SetApkAssets({styles_assets_.get()});
}
protected:
- AssetManager2::ApkAssetsPtr styles_assets_;
+ std::unique_ptr<const ApkAssets> styles_assets_;
AssetManager2 assetmanager_;
};
@@ -69,7 +69,7 @@
AssetManager2 assetmanager;
auto apk_assets = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk", PROPERTY_DYNAMIC);
ASSERT_NE(nullptr, apk_assets);
- assetmanager.SetApkAssets({apk_assets});
+ assetmanager.SetApkAssets({apk_assets.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
diff --git a/libs/androidfw/tests/BenchmarkHelpers.cpp b/libs/androidfw/tests/BenchmarkHelpers.cpp
index b97dd96..0fa0573 100644
--- a/libs/androidfw/tests/BenchmarkHelpers.cpp
+++ b/libs/androidfw/tests/BenchmarkHelpers.cpp
@@ -53,18 +53,20 @@
void GetResourceBenchmark(const std::vector<std::string>& paths, const ResTable_config* config,
uint32_t resid, benchmark::State& state) {
- std::vector<AssetManager2::ApkAssetsPtr> apk_assets;
+ std::vector<std::unique_ptr<const ApkAssets>> apk_assets;
+ std::vector<const ApkAssets*> apk_assets_ptrs;
for (const std::string& path : paths) {
- auto apk = ApkAssets::Load(path);
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(path);
if (apk == nullptr) {
state.SkipWithError(base::StringPrintf("Failed to load assets %s", path.c_str()).c_str());
return;
}
+ apk_assets_ptrs.push_back(apk.get());
apk_assets.push_back(std::move(apk));
}
AssetManager2 assetmanager;
- assetmanager.SetApkAssets(apk_assets);
+ assetmanager.SetApkAssets(apk_assets_ptrs);
if (config != nullptr) {
assetmanager.SetConfiguration(*config);
}
diff --git a/libs/androidfw/tests/Idmap_test.cpp b/libs/androidfw/tests/Idmap_test.cpp
index 568e041..b434915 100644
--- a/libs/androidfw/tests/Idmap_test.cpp
+++ b/libs/androidfw/tests/Idmap_test.cpp
@@ -59,16 +59,15 @@
protected:
std::string original_path;
- AssetManager2::ApkAssetsPtr system_assets_;
- AssetManager2::ApkAssetsPtr overlay_assets_;
- AssetManager2::ApkAssetsPtr overlayable_assets_;
+ std::unique_ptr<const ApkAssets> system_assets_;
+ std::unique_ptr<const ApkAssets> overlay_assets_;
+ std::unique_ptr<const ApkAssets> overlayable_assets_;
};
std::string GetStringFromApkAssets(const AssetManager2& asset_manager,
const AssetManager2::SelectedValue& value) {
auto assets = asset_manager.GetApkAssets();
- const ResStringPool* string_pool =
- assets[value.cookie].promote()->GetLoadedArsc()->GetStringPool();
+ const ResStringPool* string_pool = assets[value.cookie]->GetLoadedArsc()->GetStringPool();
return GetStringFromPool(string_pool, value.data);
}
@@ -76,7 +75,8 @@
TEST_F(IdmapTest, OverlayOverridesResourceValue) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::string::overlayable5);
ASSERT_TRUE(value.has_value());
@@ -87,7 +87,8 @@
TEST_F(IdmapTest, OverlayOverridesResourceValueUsingDifferentPackage) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::string::overlayable10);
ASSERT_TRUE(value.has_value());
@@ -98,7 +99,8 @@
TEST_F(IdmapTest, OverlayOverridesResourceValueUsingInternalResource) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::string::overlayable8);
ASSERT_TRUE(value.has_value());
@@ -109,7 +111,8 @@
TEST_F(IdmapTest, OverlayOverridesResourceValueUsingInlineInteger) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::integer::config_integer);
ASSERT_TRUE(value.has_value());
@@ -120,7 +123,8 @@
TEST_F(IdmapTest, OverlayOverridesResourceValueUsingInlineString) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::string::overlayable11);
ASSERT_TRUE(value.has_value());
@@ -131,7 +135,8 @@
TEST_F(IdmapTest, OverlayOverridesResourceValueUsingOverlayingResource) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::string::overlayable9);
ASSERT_TRUE(value.has_value());
@@ -142,7 +147,8 @@
TEST_F(IdmapTest, OverlayOverridesXmlParser) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::layout::hello_view);
ASSERT_TRUE(value.has_value());
@@ -180,7 +186,8 @@
TEST_F(IdmapTest, OverlaidResourceHasSameName) {
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
+ asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
+ overlay_assets_.get()});
auto name = asset_manager.GetResourceName(overlayable::R::string::overlayable9);
ASSERT_TRUE(name.has_value());
@@ -196,7 +203,8 @@
auto loader_assets = ApkAssets::LoadTable(std::move(asset), EmptyAssetsProvider::Create(),
PROPERTY_LOADER);
AssetManager2 asset_manager;
- asset_manager.SetApkAssets({overlayable_assets_, loader_assets, overlay_assets_});
+ asset_manager.SetApkAssets({overlayable_assets_.get(), loader_assets.get(),
+ overlay_assets_.get()});
auto value = asset_manager.GetResource(overlayable::R::string::overlayable11);
ASSERT_TRUE(value.has_value());
diff --git a/libs/androidfw/tests/Theme_bench.cpp b/libs/androidfw/tests/Theme_bench.cpp
index dfbb5a7..f3d60bb 100644
--- a/libs/androidfw/tests/Theme_bench.cpp
+++ b/libs/androidfw/tests/Theme_bench.cpp
@@ -28,14 +28,14 @@
constexpr const static uint32_t kAttrId = 0x01010030u; // android:attr/colorForeground
static void BM_ThemeApplyStyleFramework(benchmark::State& state) {
- auto apk = ApkAssets::Load(kFrameworkPath);
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
if (apk == nullptr) {
state.SkipWithError("Failed to load assets");
return;
}
AssetManager2 assets;
- assets.SetApkAssets({apk});
+ assets.SetApkAssets({apk.get()});
while (state.KeepRunning()) {
auto theme = assets.NewTheme();
@@ -62,10 +62,10 @@
BENCHMARK(BM_ThemeApplyStyleFrameworkOld);
static void BM_ThemeGetAttribute(benchmark::State& state) {
- auto apk = ApkAssets::Load(kFrameworkPath);
+ std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
AssetManager2 assets;
- assets.SetApkAssets({apk});
+ assets.SetApkAssets({apk.get()});
auto theme = assets.NewTheme();
theme->ApplyStyle(kStyleId, false /* force */);
diff --git a/libs/androidfw/tests/Theme_test.cpp b/libs/androidfw/tests/Theme_test.cpp
index e08a6a7..77114f2 100644
--- a/libs/androidfw/tests/Theme_test.cpp
+++ b/libs/androidfw/tests/Theme_test.cpp
@@ -53,16 +53,16 @@
}
protected:
- AssetManager2::ApkAssetsPtr system_assets_;
- AssetManager2::ApkAssetsPtr style_assets_;
- AssetManager2::ApkAssetsPtr libclient_assets_;
- AssetManager2::ApkAssetsPtr lib_one_assets_;
- AssetManager2::ApkAssetsPtr lib_two_assets_;
+ std::unique_ptr<const ApkAssets> system_assets_;
+ std::unique_ptr<const ApkAssets> style_assets_;
+ std::unique_ptr<const ApkAssets> libclient_assets_;
+ std::unique_ptr<const ApkAssets> lib_one_assets_;
+ std::unique_ptr<const ApkAssets> lib_two_assets_;
};
TEST_F(ThemeTest, EmptyTheme) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
EXPECT_EQ(0u, theme->GetChangingConfigurations());
@@ -72,7 +72,7 @@
TEST_F(ThemeTest, SingleThemeNoParent) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleOne).has_value());
@@ -92,7 +92,7 @@
TEST_F(ThemeTest, SingleThemeWithParent) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -121,7 +121,7 @@
TEST_F(ThemeTest, TryToUseBadResourceId) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -130,7 +130,7 @@
TEST_F(ThemeTest, MultipleThemesOverlaidNotForce) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -160,7 +160,7 @@
TEST_F(ThemeTest, MultipleThemesOverlaidForced) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -190,7 +190,8 @@
TEST_F(ThemeTest, ResolveDynamicAttributesAndReferencesToSharedLibrary) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
+ assetmanager.SetApkAssets(
+ {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
std::unique_ptr<Theme> theme = assetmanager.NewTheme();
ASSERT_TRUE(theme->ApplyStyle(libclient::R::style::Theme, false /*force*/).has_value());
@@ -215,7 +216,7 @@
TEST_F(ThemeTest, CopyThemeSameAssetManager) {
AssetManager2 assetmanager;
- assetmanager.SetApkAssets({style_assets_});
+ assetmanager.SetApkAssets({style_assets_.get()});
std::unique_ptr<Theme> theme_one = assetmanager.NewTheme();
ASSERT_TRUE(theme_one->ApplyStyle(app::R::style::StyleOne).has_value());
@@ -252,10 +253,10 @@
TEST_F(ThemeTest, ThemeRebase) {
AssetManager2 am;
- am.SetApkAssets({style_assets_});
+ am.SetApkAssets({style_assets_.get()});
AssetManager2 am_night;
- am_night.SetApkAssets({style_assets_});
+ am_night.SetApkAssets({style_assets_.get()});
ResTable_config night{};
night.uiMode = ResTable_config::UI_MODE_NIGHT_YES;
@@ -326,11 +327,12 @@
TEST_F(ThemeTest, OnlyCopySameAssetsThemeWhenAssetManagersDiffer) {
AssetManager2 assetmanager_dst;
- assetmanager_dst.SetApkAssets(
- {system_assets_, lib_one_assets_, style_assets_, libclient_assets_});
+ assetmanager_dst.SetApkAssets({system_assets_.get(), lib_one_assets_.get(), style_assets_.get(),
+ libclient_assets_.get()});
AssetManager2 assetmanager_src;
- assetmanager_src.SetApkAssets({system_assets_, lib_two_assets_, lib_one_assets_, style_assets_});
+ assetmanager_src.SetApkAssets({system_assets_.get(), lib_two_assets_.get(), lib_one_assets_.get(),
+ style_assets_.get()});
auto theme_dst = assetmanager_dst.NewTheme();
ASSERT_TRUE(theme_dst->ApplyStyle(app::R::style::StyleOne).has_value());
@@ -374,10 +376,10 @@
TEST_F(ThemeTest, CopyNonReferencesWhenPackagesDiffer) {
AssetManager2 assetmanager_dst;
- assetmanager_dst.SetApkAssets({system_assets_});
+ assetmanager_dst.SetApkAssets({system_assets_.get()});
AssetManager2 assetmanager_src;
- assetmanager_src.SetApkAssets({system_assets_, style_assets_});
+ assetmanager_src.SetApkAssets({system_assets_.get(), style_assets_.get()});
auto theme_dst = assetmanager_dst.NewTheme();
auto theme_src = assetmanager_src.NewTheme();