summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/Layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'services/surfaceflinger/Layer.cpp')
-rw-r--r--services/surfaceflinger/Layer.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 298f597f34..ff5e6f6e36 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -1109,8 +1109,9 @@ bool Layer::setChildLayer(const sp<Layer>& childLayer, int32_t z) {
if (childLayer->setLayer(z)) {
mCurrentChildren.removeAt(idx);
mCurrentChildren.add(childLayer);
+ return true;
}
- return true;
+ return false;
}
bool Layer::setChildRelativeLayer(const sp<Layer>& childLayer,
@@ -1122,12 +1123,13 @@ bool Layer::setChildRelativeLayer(const sp<Layer>& childLayer,
if (childLayer->setRelativeLayer(relativeToHandle, relativeZ)) {
mCurrentChildren.removeAt(idx);
mCurrentChildren.add(childLayer);
+ return true;
}
- return true;
+ return false;
}
bool Layer::setLayer(int32_t z) {
- if (mCurrentState.z == z) return false;
+ if (mCurrentState.z == z && !usingRelativeZ(LayerVector::StateSet::Current)) return false;
mCurrentState.sequence++;
mCurrentState.z = z;
mCurrentState.modified = true;
@@ -1158,7 +1160,7 @@ void Layer::addZOrderRelative(const wp<Layer>& relative) {
setTransactionFlags(eTransactionNeeded);
}
-bool Layer::setRelativeLayer(const sp<IBinder>& relativeToHandle, int32_t z) {
+bool Layer::setRelativeLayer(const sp<IBinder>& relativeToHandle, int32_t relativeZ) {
sp<Handle> handle = static_cast<Handle*>(relativeToHandle.get());
if (handle == nullptr) {
return false;
@@ -1168,9 +1170,14 @@ bool Layer::setRelativeLayer(const sp<IBinder>& relativeToHandle, int32_t z) {
return false;
}
+ if (mCurrentState.z == relativeZ && usingRelativeZ(LayerVector::StateSet::Current) &&
+ mCurrentState.zOrderRelativeOf == relative) {
+ return false;
+ }
+
mCurrentState.sequence++;
mCurrentState.modified = true;
- mCurrentState.z = z;
+ mCurrentState.z = relativeZ;
auto oldZOrderRelativeOf = mCurrentState.zOrderRelativeOf.promote();
if (oldZOrderRelativeOf != nullptr) {