Merge "Revert "Revert "Revert "Always select the next higher density bu...""
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user