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

Commit e450fb5c authored by Robert Carr's avatar Robert Carr Committed by Rob Carr
Browse files

Factor our mChildrenChanged from doTransaction

We are trying to eliminate the whole doTransaction traversal. Following
queued-transaction changes we can update various values on flinger
directly rather than in-directing through the main-thread.

Test: Existing tests pass. simpleperf
Bug: 186200583
Change-Id: I0536f889602ce0801e9f79881bbe1adb7b163d46
parent 26953ee2
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -679,11 +679,6 @@ bool Layer::isSecure() const {
uint32_t Layer::doTransaction(uint32_t flags) {
    ATRACE_CALL();

    if (mChildrenChanged) {
        flags |= eVisibleRegion;
        mChildrenChanged = false;
    }

    // TODO: This is unfortunate.
    mDrawingStateModified = mDrawingState.modified;
    mDrawingState.modified = false;
@@ -1562,7 +1557,7 @@ void Layer::setGameModeForTree(int parentGameMode) {
}

void Layer::addChild(const sp<Layer>& layer) {
    mChildrenChanged = true;
    mFlinger->mSomeChildrenChanged = true;
    setTransactionFlags(eTransactionNeeded);

    mCurrentChildren.add(layer);
@@ -1572,7 +1567,7 @@ void Layer::addChild(const sp<Layer>& layer) {
}

ssize_t Layer::removeChild(const sp<Layer>& layer) {
    mChildrenChanged = true;
    mFlinger->mSomeChildrenChanged = true;
    setTransactionFlags(eTransactionNeeded);

    layer->setParent(nullptr);
+0 −3
Original line number Diff line number Diff line
@@ -1003,9 +1003,6 @@ protected:
    wp<Layer> mCurrentParent;
    wp<Layer> mDrawingParent;

    // Can only be accessed with the SF state lock held.
    bool mChildrenChanged{false};

    // Window types from WindowManager.LayoutParams
    const InputWindowInfo::Type mWindowType;

+5 −0
Original line number Diff line number Diff line
@@ -2942,6 +2942,11 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags) {
        });
    }

    if (mSomeChildrenChanged) {
        mVisibleRegionsDirty = true;
        mSomeChildrenChanged = false;
    }

    // Update transform hint
    if (transactionFlags & (eTransformHintUpdateNeeded | eDisplayTransactionNeeded)) {
        // The transform hint might have changed for some layers
+6 −1
Original line number Diff line number Diff line
@@ -1228,8 +1228,13 @@ private:
    // don't need synchronization
    State mDrawingState{LayerVector::StateSet::Drawing};
    bool mVisibleRegionsDirty = false;
    // Set during transaction commit stage to track if the input info for a layer has changed.

    // Set during transaction application stage to track if the input info or children
    // for a layer has changed.
    // TODO: Also move visibleRegions over to a boolean system.
    bool mInputInfoChanged = false;
    bool mSomeChildrenChanged;

    bool mGeometryInvalid = false;
    bool mAnimCompositionPending = false;