Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a619c86 authored by Jeremy Meyer's avatar Jeremy Meyer
Browse files

Always select the next higher density bucket when picking resources

This reverts commit 30715f3a.

Reason for revert: roll forward with fix

Change-Id: I6d63e6fa508501f2d029eeb4647d4d70c152ceb3
Test: ran all previously failing tests locally
Fixes: 183136881
parent b778bc5a
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -2677,30 +2677,27 @@ 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.  Scaling down
                // is generally better than scaling up.
                // because the system will scale it.  Always prefer
                // scaling down.
                int h = thisDensity;
                int l = otherDensity;
                bool bImBigger = true;
                if (l > h) {
                    int t = h;
                    h = l;
                    l = t;
                    std::swap(l, h);
                    bImBigger = false;
                }

                if (requestedDensity >= h) {
                    // requested value higher than both l and h, give h
                if (h == requestedDensity) {
                    // This handles the case where l == h == requestedDensity.
                    // In that case, this and o are equally good so both
                    // true and false are valid. This preserves previous
                    // behavior.
                    return bImBigger;
                }
                if (l >= requestedDensity) {
                } else 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;
                }
            }
+3 −0
Original line number Diff line number Diff line
@@ -75,6 +75,9 @@ 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));