summaryrefslogtreecommitdiff
path: root/libs/androidfw/AssetManager2.cpp
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2020-11-13 23:55:20 +0000
committer Ryan Mitchell <rtmitchell@google.com> 2020-11-13 23:55:20 +0000
commit6ca48473e533a8b89abac6294a0bb8130b8c8c89 (patch)
treeda96bc5ed4429763b2aec93021ec7d0340ce0b98 /libs/androidfw/AssetManager2.cpp
parent06a7331b84ceb4b39d39e4af187d1f988475893a (diff)
Revert "Cache resolved theme values"
Revert "Move map_ptr to incfs namspace" Revert submission 12787270 Reason for revert: b/173250495 Reverted Changes: I5cd1bc8a2:libandroidfw hardening for IncFs Ice5dbcfb2:Move map_ptr to incfs namspace I29ccdc8ed:Do not cache bag parent stack until requested I1e9e9acaa:Cache resolved theme values Change-Id: Ibec051c79dfd28783a57b9ae82ebd8cdbed82fce
Diffstat (limited to 'libs/androidfw/AssetManager2.cpp')
-rw-r--r--libs/androidfw/AssetManager2.cpp31
1 files changed, 6 insertions, 25 deletions
diff --git a/libs/androidfw/AssetManager2.cpp b/libs/androidfw/AssetManager2.cpp
index d349628c2ab4..3e54dc67db76 100644
--- a/libs/androidfw/AssetManager2.cpp
+++ b/libs/androidfw/AssetManager2.cpp
@@ -963,25 +963,14 @@ base::expected<AssetManager2::SelectedValue, NullOrIOError> AssetManager2::GetRe
}
base::expected<std::monostate, NullOrIOError> AssetManager2::ResolveReference(
- AssetManager2::SelectedValue& value, bool cache_value) const {
+ AssetManager2::SelectedValue& value) const {
if (value.type != Res_value::TYPE_REFERENCE || value.data == 0U) {
// Not a reference. Nothing to do.
return {};
}
- const uint32_t original_flags = value.flags;
- const uint32_t original_resid = value.data;
- if (cache_value) {
- auto cached_value = cached_resolved_values_.find(value.data);
- if (cached_value != cached_resolved_values_.end()) {
- value = cached_value->second;
- value.flags |= original_flags;
- return {};
- }
- }
-
- uint32_t combined_flags = 0U;
- uint32_t resolve_resid = original_resid;
+ uint32_t combined_flags = value.flags;
+ uint32_t resolve_resid = value.data;
constexpr const uint32_t kMaxIterations = 20;
for (uint32_t i = 0U;; i++) {
auto result = GetResource(resolve_resid, true /*may_be_bag*/);
@@ -992,15 +981,9 @@ base::expected<std::monostate, NullOrIOError> AssetManager2::ResolveReference(
if (result->type != Res_value::TYPE_REFERENCE ||
result->data == Res_value::DATA_NULL_UNDEFINED ||
result->data == resolve_resid || i == kMaxIterations) {
- result->flags |= combined_flags;
- if (cache_value) {
- cached_resolved_values_[original_resid] = *result;
- }
-
- // Add the original flags after caching the result so queries with a different set of original
- // flags do not include these original flags.
+ // This reference can't be resolved, so exit now and let the caller deal with it.
value = *result;
- value.flags |= original_flags;
+ value.flags |= combined_flags;
return {};
}
@@ -1370,8 +1353,6 @@ void AssetManager2::InvalidateCaches(uint32_t diff) {
++iter;
}
}
-
- cached_resolved_values_.clear();
}
uint8_t AssetManager2::GetAssignedPackageId(const LoadedPackage* package) const {
@@ -1552,7 +1533,7 @@ base::expected<std::monostate, NullOrIOError> Theme::ResolveAttributeReference(
return base::unexpected(std::nullopt);
}
- auto resolve_result = asset_manager_->ResolveReference(*result, true /* cache_value */);
+ auto resolve_result = asset_manager_->ResolveReference(*result);
if (resolve_result.has_value()) {
result->flags |= value.flags;
value = *result;