Merge "SurfaceFlinger: Ensure reparent triggers visible region calculation."
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 93a7acf..5f6d2a7 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -1078,13 +1078,18 @@
ATRACE_CALL();
if (mLayerDetached) {
- return 0;
+ return flags;
+ }
+
+ if (mChildrenChanged) {
+ flags |= eVisibleRegion;
+ mChildrenChanged = false;
}
pushPendingState();
State c = getCurrentState();
if (!applyPendingStates(&c)) {
- return 0;
+ return flags;
}
flags = doTransactionResize(flags, &c);
@@ -1106,11 +1111,6 @@
mNeedsFiltering = (!getActiveTransform(c).preserveRects() || type >= ui::Transform::SCALE);
}
- if (mChildrenChanged) {
- flags |= eVisibleRegion;
- mChildrenChanged = false;
- }
-
// If the layer is hidden, signal and clear out all local sync points so
// that transactions for layers depending on this layer's frames becoming
// visible are not blocked
@@ -1639,6 +1639,7 @@
void Layer::addChild(const sp<Layer>& layer) {
mChildrenChanged = true;
+ setTransactionFlags(eTransactionNeeded);
mCurrentChildren.add(layer);
layer->setParent(this);
@@ -1646,6 +1647,7 @@
ssize_t Layer::removeChild(const sp<Layer>& layer) {
mChildrenChanged = true;
+ setTransactionFlags(eTransactionNeeded);
layer->setParent(nullptr);
return mCurrentChildren.remove(layer);