diff options
author | 2021-10-21 01:41:19 +0000 | |
---|---|---|
committer | 2021-10-21 04:41:51 +0000 | |
commit | 932970c6963d51deaf8e4c4f4e99ec517b3ebcec (patch) | |
tree | 12a4ceca890b08ebe1292a6d61eaf52bd2e2c4c9 | |
parent | 49243877490fa1a0e7b0f9041e4505468c3a81b0 (diff) |
Revert "Always select the next higher density bucket when picking resources"
This reverts commit 49243877490fa1a0e7b0f9041e4505468c3a81b0.
Reason for revert: DroidMonitor-triggered revert due to breakage https://android-build.googleplex.com/builds/tests/hub?tab=clusterView&clusterId=7006296665623803063, bug b/203718917
Change-Id: I4ac8d8fb9b4b39fe677fb3b2eac809f3443ed0fa
-rw-r--r-- | libs/androidfw/ResourceTypes.cpp | 17 | ||||
-rw-r--r-- | libs/androidfw/tests/Config_test.cpp | 15 |
2 files changed, 17 insertions, 15 deletions
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp index 50117ce9e69b..cae2d0bc16b3 100644 --- a/libs/androidfw/ResourceTypes.cpp +++ b/libs/androidfw/ResourceTypes.cpp @@ -2677,21 +2677,30 @@ bool ResTable_config::isBetterThan(const ResTable_config& o, // DENSITY_ANY is now dealt with. We should look to // pick a density bucket and potentially scale it. // Any density is potentially useful - // because the system will scale it. Always prefer - // scaling down. + // because the system will scale it. Scaling down + // is generally better than scaling up. int h = thisDensity; int l = otherDensity; bool bImBigger = true; if (l > h) { - std::swap(l, h); + int t = h; + h = l; + l = t; bImBigger = false; } + if (requestedDensity >= h) { + // requested value higher than both l and h, give h + return bImBigger; + } if (l >= requestedDensity) { // requested value lower than both l and h, give l return !bImBigger; + } + // saying that scaling down is 2x better than up + if (((2 * l) - requestedDensity) * h > requestedDensity * requestedDensity) { + return !bImBigger; } else { - // otherwise give h return bImBigger; } } diff --git a/libs/androidfw/tests/Config_test.cpp b/libs/androidfw/tests/Config_test.cpp index f5fd0f20d580..b54915f03c29 100644 --- a/libs/androidfw/tests/Config_test.cpp +++ b/libs/androidfw/tests/Config_test.cpp @@ -27,19 +27,15 @@ namespace android { static ResTable_config selectBest(const ResTable_config& target, const Vector<ResTable_config>& configs) { - Vector<ResTable_config> matchedConfigs; + ResTable_config bestConfig; + memset(&bestConfig, 0, sizeof(bestConfig)); const size_t configCount = configs.size(); for (size_t i = 0; i < configCount; i++) { const ResTable_config& thisConfig = configs[i]; - if (thisConfig.match(target)) { - matchedConfigs.add(thisConfig); + if (!thisConfig.match(target)) { + continue; } - } - ResTable_config bestConfig = matchedConfigs[0]; - const size_t matchingConfigCount = matchedConfigs.size(); - for (size_t i = 1; i < matchingConfigCount; i++) { - const ResTable_config& thisConfig = configs[i]; if (thisConfig.isBetterThan(bestConfig, &target)) { bestConfig = thisConfig; } @@ -79,9 +75,6 @@ TEST(ConfigTest, shouldSelectBestDensity) { configs.add(buildDensityConfig(int(ResTable_config::DENSITY_HIGH) + 20)); ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); - configs.add(buildDensityConfig(int(ResTable_config::DENSITY_XHIGH) - 1)); - ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); - expectedBest = buildDensityConfig(ResTable_config::DENSITY_XHIGH); configs.add(expectedBest); ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); |