diff options
| author | 2019-05-13 22:21:54 +0000 | |
|---|---|---|
| committer | 2019-05-13 22:21:54 +0000 | |
| commit | 602b755d6f41aaea9e37fcbee008a504c898602b (patch) | |
| tree | 7bcfe7fa290452dfdf44dc45663074ef9ccabd88 | |
| parent | e28099be0684efe1dc2ec6d04d0ff0b607d148cd (diff) | |
| parent | fed164b49b629817c2a53f264b206ab02a73d079 (diff) | |
Merge "SurfaceFlinger: insert RefreshRateOverlay layer in the correct place" into qt-dev
| -rw-r--r-- | services/surfaceflinger/RefreshRateOverlay.cpp | 9 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 8 |
2 files changed, 14 insertions, 3 deletions
diff --git a/services/surfaceflinger/RefreshRateOverlay.cpp b/services/surfaceflinger/RefreshRateOverlay.cpp index 1e5c25fb93..5b4bec96ea 100644 --- a/services/surfaceflinger/RefreshRateOverlay.cpp +++ b/services/surfaceflinger/RefreshRateOverlay.cpp @@ -37,9 +37,16 @@ bool RefreshRateOverlay::createLayer() { 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; } diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 661c889ac2..70e15c92b5 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -5432,9 +5432,13 @@ status_t SurfaceFlinger::onTransact(uint32_t code, const Parcel& data, Parcel* r // TODO(b/129297325): expose this via developer menu option n = data.readInt32(); if (n && !mRefreshRateOverlay) { - std::lock_guard<std::mutex> lock(mActiveConfigLock); + RefreshRateType type; + { + std::lock_guard<std::mutex> lock(mActiveConfigLock); + type = mDesiredActiveConfig.type; + } mRefreshRateOverlay = std::make_unique<RefreshRateOverlay>(*this); - mRefreshRateOverlay->changeRefreshRate(mDesiredActiveConfig.type); + mRefreshRateOverlay->changeRefreshRate(type); } else if (!n) { mRefreshRateOverlay.reset(); } |