summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Salido <salidoa@google.com>2017-09-18 18:48:47 -0700
committerAdrian Salido <salidoa@google.com>2017-09-20 14:52:19 -0700
commitd4ca64ef756f255d76b00964e24f24bcbebb56df (patch)
tree2cc5034410b55e64f1778b819c5ddfd868c15d0a
parent089038395773ea1af27f6063ab090649cd1df2ed (diff)
downloadnative-d4ca64ef756f255d76b00964e24f24bcbebb56df.tar.gz
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
-rw-r--r--libs/hwc2on1adapter/HWC2On1Adapter.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/libs/hwc2on1adapter/HWC2On1Adapter.cpp b/libs/hwc2on1adapter/HWC2On1Adapter.cpp
index 8c6ef691a2..e1b9a8a6f1 100644
--- a/libs/hwc2on1adapter/HWC2On1Adapter.cpp
+++ b/libs/hwc2on1adapter/HWC2On1Adapter.cpp
@@ -2005,10 +2005,21 @@ Error HWC2On1Adapter::Layer::setTransform(Transform transform) {
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) {
- mVisibleRegion.resize(visible.numRects);
- std::copy_n(visible.rects, visible.numRects, mVisibleRegion.begin());
- mDisplay.markGeometryChanged();
+ if ((getNumVisibleRegions() != visible.numRects) ||
+ !std::equal(mVisibleRegion.begin(), mVisibleRegion.end(), visible.rects,
+ compareRects)) {
+ mVisibleRegion.resize(visible.numRects);
+ std::copy_n(visible.rects, visible.numRects, mVisibleRegion.begin());
+ mDisplay.markGeometryChanged();
+ }
return Error::None;
}