From cf6e79f809034386b04ae551db815ab087f76c0a Mon Sep 17 00:00:00 2001 From: Yurii Zubrytskyi Date: Wed, 26 Apr 2023 16:20:09 +0000 Subject: Revert "Use reference counted pointers for ApkAssets" This reverts commit c357f719ed3734aee05418808699a48dd150a1a5. Reason for revert: b/279154343 - performance regression Change-Id: If2e212d8fc5b9ed8638032a33f450440cbaeceb0 --- libs/androidfw/ApkAssets.cpp | 58 ++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 26 deletions(-) (limited to 'libs/androidfw/ApkAssets.cpp') diff --git a/libs/androidfw/ApkAssets.cpp b/libs/androidfw/ApkAssets.cpp index f0c639574a9f..15aaae25f754 100644 --- a/libs/androidfw/ApkAssets.cpp +++ b/libs/androidfw/ApkAssets.cpp @@ -27,34 +27,39 @@ using base::unique_fd; constexpr const char* kResourcesArsc = "resources.arsc"; -ApkAssets::ApkAssets(PrivateConstructorUtil, std::unique_ptr resources_asset, +ApkAssets::ApkAssets(std::unique_ptr resources_asset, std::unique_ptr loaded_arsc, - std::unique_ptr assets, package_property_t property_flags, - std::unique_ptr idmap_asset, std::unique_ptr loaded_idmap) + std::unique_ptr assets, + package_property_t property_flags, + std::unique_ptr idmap_asset, + std::unique_ptr loaded_idmap) : resources_asset_(std::move(resources_asset)), loaded_arsc_(std::move(loaded_arsc)), assets_provider_(std::move(assets)), property_flags_(property_flags), idmap_asset_(std::move(idmap_asset)), - loaded_idmap_(std::move(loaded_idmap)) { -} + loaded_idmap_(std::move(loaded_idmap)) {} -ApkAssetsPtr ApkAssets::Load(const std::string& path, package_property_t flags) { +std::unique_ptr ApkAssets::Load(const std::string& path, package_property_t flags) { return Load(ZipAssetsProvider::Create(path, flags), flags); } -ApkAssetsPtr ApkAssets::LoadFromFd(base::unique_fd fd, const std::string& debug_name, - package_property_t flags, off64_t offset, off64_t len) { +std::unique_ptr ApkAssets::LoadFromFd(base::unique_fd fd, + const std::string& debug_name, + package_property_t flags, + off64_t offset, + off64_t len) { return Load(ZipAssetsProvider::Create(std::move(fd), debug_name, offset, len), flags); } -ApkAssetsPtr ApkAssets::Load(std::unique_ptr assets, package_property_t flags) { +std::unique_ptr ApkAssets::Load(std::unique_ptr assets, + package_property_t flags) { return LoadImpl(std::move(assets), flags, nullptr /* idmap_asset */, nullptr /* loaded_idmap */); } -ApkAssetsPtr ApkAssets::LoadTable(std::unique_ptr resources_asset, - std::unique_ptr assets, - package_property_t flags) { +std::unique_ptr ApkAssets::LoadTable(std::unique_ptr resources_asset, + std::unique_ptr assets, + package_property_t flags) { if (resources_asset == nullptr) { return {}; } @@ -62,7 +67,8 @@ ApkAssetsPtr ApkAssets::LoadTable(std::unique_ptr resources_asset, nullptr /* loaded_idmap */); } -ApkAssetsPtr ApkAssets::LoadOverlay(const std::string& idmap_path, package_property_t flags) { +std::unique_ptr ApkAssets::LoadOverlay(const std::string& idmap_path, + package_property_t flags) { CHECK((flags & PROPERTY_LOADER) == 0U) << "Cannot load RROs through loaders"; auto idmap_asset = AssetsProvider::CreateAssetFromFile(idmap_path); if (idmap_asset == nullptr) { @@ -97,10 +103,10 @@ ApkAssetsPtr ApkAssets::LoadOverlay(const std::string& idmap_path, package_prope std::move(loaded_idmap)); } -ApkAssetsPtr ApkAssets::LoadImpl(std::unique_ptr assets, - package_property_t property_flags, - std::unique_ptr idmap_asset, - std::unique_ptr loaded_idmap) { +std::unique_ptr ApkAssets::LoadImpl(std::unique_ptr assets, + package_property_t property_flags, + std::unique_ptr idmap_asset, + std::unique_ptr loaded_idmap) { if (assets == nullptr) { return {}; } @@ -119,11 +125,11 @@ ApkAssetsPtr ApkAssets::LoadImpl(std::unique_ptr assets, std::move(idmap_asset), std::move(loaded_idmap)); } -ApkAssetsPtr ApkAssets::LoadImpl(std::unique_ptr resources_asset, - std::unique_ptr assets, - package_property_t property_flags, - std::unique_ptr idmap_asset, - std::unique_ptr loaded_idmap) { +std::unique_ptr ApkAssets::LoadImpl(std::unique_ptr resources_asset, + std::unique_ptr assets, + package_property_t property_flags, + std::unique_ptr idmap_asset, + std::unique_ptr loaded_idmap) { if (assets == nullptr ) { return {}; } @@ -149,9 +155,10 @@ ApkAssetsPtr ApkAssets::LoadImpl(std::unique_ptr resources_asset, return {}; } - return ApkAssetsPtr::make(PrivateConstructorUtil{}, std::move(resources_asset), - std::move(loaded_arsc), std::move(assets), property_flags, - std::move(idmap_asset), std::move(loaded_idmap)); + return std::unique_ptr(new ApkAssets(std::move(resources_asset), + std::move(loaded_arsc), std::move(assets), + property_flags, std::move(idmap_asset), + std::move(loaded_idmap))); } std::optional ApkAssets::GetPath() const { @@ -167,5 +174,4 @@ bool ApkAssets::IsUpToDate() const { return IsLoader() || ((!loaded_idmap_ || loaded_idmap_->IsUpToDate()) && assets_provider_->IsUpToDate()); } - } // namespace android -- cgit v1.2.3-59-g8ed1b