Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 606e5cfa authored by chaviw's avatar chaviw
Browse files

Mark Layer as modified when changing zOrderRelativeOf.

If the layer is not marked as modified, the changes will not get copied
from current to drawing. This will break drawing state since it will be
missing info about what a layer is currently relativeOf.

Fixes: 125468401
Test: Can no longer repro issue in bug.
Change-Id: Id75a2bc87c179c4bd11141032acc612e08f0db7b
parent 70435e9b
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ void Layer::onRemovedFromCurrentState() {
            strongRelative->removeZOrderRelative(this);
            mFlinger->setTransactionFlags(eTraversalNeeded);
        }
        mCurrentState.zOrderRelativeOf = nullptr;
        setZOrderRelativeOf(nullptr);
    }

    // Since we are no longer reachable from CurrentState SurfaceFlinger
@@ -1164,7 +1164,7 @@ bool Layer::setLayer(int32_t z) {
        if (strongRelative != nullptr) {
            strongRelative->removeZOrderRelative(this);
        }
        mCurrentState.zOrderRelativeOf = nullptr;
        setZOrderRelativeOf(nullptr);
    }
    setTransactionFlags(eTransactionNeeded);
    return true;
@@ -1184,6 +1184,13 @@ void Layer::addZOrderRelative(const wp<Layer>& relative) {
    setTransactionFlags(eTransactionNeeded);
}

void Layer::setZOrderRelativeOf(const wp<Layer>& relativeOf) {
    mCurrentState.zOrderRelativeOf = relativeOf;
    mCurrentState.sequence++;
    mCurrentState.modified = true;
    setTransactionFlags(eTransactionNeeded);
}

bool Layer::setRelativeLayer(const sp<IBinder>& relativeToHandle, int32_t relativeZ) {
    sp<Handle> handle = static_cast<Handle*>(relativeToHandle.get());
    if (handle == nullptr) {
@@ -1207,7 +1214,7 @@ bool Layer::setRelativeLayer(const sp<IBinder>& relativeToHandle, int32_t relati
    if (oldZOrderRelativeOf != nullptr) {
        oldZOrderRelativeOf->removeZOrderRelative(this);
    }
    mCurrentState.zOrderRelativeOf = relative;
    setZOrderRelativeOf(relative);
    relative->addZOrderRelative(this);

    setTransactionFlags(eTransactionNeeded);
+2 −0
Original line number Diff line number Diff line
@@ -899,6 +899,8 @@ private:

    // Layer bounds in screen space.
    FloatRect mScreenBounds;

    void setZOrderRelativeOf(const wp<Layer>& relativeOf);
};

} // namespace android