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

Commit 9205fd7d authored by Jorim Jaggi's avatar Jorim Jaggi Committed by android-build-merger
Browse files

Merge "Push existing pending state when deferring transaction" into pi-dev am: 70522fe5

am: 6e267a4b

Change-Id: I19ed3e1300b0176a842fd1e57057d1b63b087d91
parents a592c878 6e267a4b
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -915,10 +915,7 @@ void Layer::pushPendingState() {
}

void Layer::popPendingState(State* stateToCommit) {
    auto oldFlags = stateToCommit->flags;
    *stateToCommit = mPendingStates[0];
    stateToCommit->flags =
            (oldFlags & ~stateToCommit->mask) | (stateToCommit->flags & stateToCommit->mask);

    mPendingStates.removeAt(0);
    ATRACE_INT(mTransactionName.string(), mPendingStates.size());
@@ -1265,7 +1262,6 @@ bool Layer::setFlags(uint8_t flags, uint8_t mask) {
    if (mCurrentState.flags == newFlags) return false;
    mCurrentState.sequence++;
    mCurrentState.flags = newFlags;
    mCurrentState.mask = mask;
    mCurrentState.modified = true;
    setTransactionFlags(eTransactionNeeded);
    return true;
+1 −2
Original line number Diff line number Diff line
@@ -123,7 +123,6 @@ public:
        uint32_t layerStack;

        uint8_t flags;
        uint8_t mask;
        uint8_t reserved[2];
        int32_t sequence; // changes when visible regions can change
        bool modified;
@@ -523,6 +522,7 @@ public:
    // SurfaceFlinger to complete a transaction.
    void commitChildList();
    int32_t getZ() const;
    void pushPendingState();

protected:
    // constant
@@ -605,7 +605,6 @@ protected:
    // Returns false if the relevant frame has already been latched
    bool addSyncPoint(const std::shared_ptr<SyncPoint>& point);

    void pushPendingState();
    void popPendingState(State* stateToCommit);
    bool applyPendingStates(State* stateToCommit);

+7 −0
Original line number Diff line number Diff line
@@ -3258,6 +3258,13 @@ uint32_t SurfaceFlinger::setClientStateLocked(const ComposerState& composerState
    const uint32_t what = s.what;
    bool geometryAppliesWithResize =
            what & layer_state_t::eGeometryAppliesWithResize;

    // If we are deferring transaction, make sure to push the pending state, as otherwise the
    // pending state will also be deferred.
    if (what & layer_state_t::eDeferTransaction) {
        layer->pushPendingState();
    }

    if (what & layer_state_t::ePositionChanged) {
        if (layer->setPosition(s.x, s.y, !geometryAppliesWithResize)) {
            flags |= eTraversalNeeded;