SurfaceFlinger: insert RefreshRateOverlay layer in the correct place
Reinsert RefreshRateOverlay layer to layersSortedByZ when setting Z
to keep layersSortedByZ sorted.
Test: adb shell service call SurfaceFlinger 1034 i32 1 + screen rotate
Bug: 131211294
Change-Id: I40b8f33b6edda7fc8840e4db839c9c0665068c8c
diff --git a/services/surfaceflinger/RefreshRateOverlay.cpp b/services/surfaceflinger/RefreshRateOverlay.cpp
index 1e5c25f..5b4bec9 100644
--- a/services/surfaceflinger/RefreshRateOverlay.cpp
+++ b/services/surfaceflinger/RefreshRateOverlay.cpp
@@ -37,9 +37,16 @@
return false;
}
+ Mutex::Autolock _l(mFlinger.mStateLock);
mLayer = mClient->getLayerUser(mIBinder);
mLayer->setCrop_legacy(Rect(50, 70, 200, 100), true);
- mLayer->setLayer(INT32_MAX - 2);
+
+ // setting Layer's Z requires resorting layersSortedByZ
+ ssize_t idx = mFlinger.mCurrentState.layersSortedByZ.indexOf(mLayer);
+ if (mLayer->setLayer(INT32_MAX - 2) && idx >= 0) {
+ mFlinger.mCurrentState.layersSortedByZ.removeAt(idx);
+ mFlinger.mCurrentState.layersSortedByZ.add(mLayer);
+ }
return true;
}