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

Commit d4ca64ef authored by Adrian Salido's avatar Adrian Salido
Browse files

libhwc2on1adapter: avoid marking changes if visible regions unchanged

The function setVisibleRegions is always called as part of composition,
shouldn't mark geometry changed if there are no changes in the visible
regions.

Bug: 65019874
Test: run cts -m CtsViewTestCases -t android.view.cts.DisplayRefreshRateTest#testRefreshRate
Change-Id: I3f93431002fc4b691c799f4ae91aa1488849e4a6
parent 08903839
Loading
Loading
Loading
Loading
+14 −3
Original line number Original line Diff line number Diff line
@@ -2005,10 +2005,21 @@ Error HWC2On1Adapter::Layer::setTransform(Transform transform) {
    return Error::None;
    return Error::None;
}
}


static bool compareRects(const hwc_rect_t& rect1, const hwc_rect_t& rect2) {
    return rect1.left == rect2.left &&
            rect1.right == rect2.right &&
            rect1.top == rect2.top &&
            rect1.bottom == rect2.bottom;
}

Error HWC2On1Adapter::Layer::setVisibleRegion(hwc_region_t visible) {
Error HWC2On1Adapter::Layer::setVisibleRegion(hwc_region_t visible) {
    if ((getNumVisibleRegions() != visible.numRects) ||
        !std::equal(mVisibleRegion.begin(), mVisibleRegion.end(), visible.rects,
                    compareRects)) {
        mVisibleRegion.resize(visible.numRects);
        mVisibleRegion.resize(visible.numRects);
        std::copy_n(visible.rects, visible.numRects, mVisibleRegion.begin());
        std::copy_n(visible.rects, visible.numRects, mVisibleRegion.begin());
        mDisplay.markGeometryChanged();
        mDisplay.markGeometryChanged();
    }
    return Error::None;
    return Error::None;
}
}