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

Commit 90233372 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Only complete sync draw for visible window

Otherwise the sync may be finished too early if the client perform
relayout with View.INVISIBLE (e.g. the activity is stopping).

Besides, window manager service should only consider View.VISIBLE
as real visible.

Also change constant field from commit cf9955ff to reduce conflict.

Bug: 240564946
Test: CloseImeAutoOpenWindowToHomeTest
Change-Id: I9a9868ba5a628b8fa7312380a5b1bb8148865f21
Merged-In: I9a9868ba5a628b8fa7312380a5b1bb8148865f21
parent 96fd9fad
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -650,7 +650,7 @@ public class WindowManagerService extends IWindowManager.Stub
    // Whether the system should use BLAST for ViewRootImpl
    // Whether the system should use BLAST for ViewRootImpl
    final boolean mUseBLAST;
    final boolean mUseBLAST;
    // Whether to enable BLASTSyncEngine Transaction passing.
    // Whether to enable BLASTSyncEngine Transaction passing.
    final boolean mUseBLASTSync = true;
    static final boolean USE_BLAST_SYNC = true;


    final BLASTSyncEngine mSyncEngine;
    final BLASTSyncEngine mSyncEngine;


@@ -2576,7 +2576,7 @@ public class WindowManagerService extends IWindowManager.Stub


            if (outSyncIdBundle != null) {
            if (outSyncIdBundle != null) {
                final int maybeSyncSeqId;
                final int maybeSyncSeqId;
                if (mUseBLASTSync && win.useBLASTSync() && viewVisibility != View.GONE
                if (USE_BLAST_SYNC && win.useBLASTSync() && viewVisibility == View.VISIBLE
                        && win.mSyncSeqId > lastSyncSeqId) {
                        && win.mSyncSeqId > lastSyncSeqId) {
                    maybeSyncSeqId = win.shouldSyncWithBuffers() ? win.mSyncSeqId : -1;
                    maybeSyncSeqId = win.shouldSyncWithBuffers() ? win.mSyncSeqId : -1;
                    win.markRedrawForSyncReported();
                    win.markRedrawForSyncReported();
@@ -5659,7 +5659,7 @@ public class WindowManagerService extends IWindowManager.Stub
    }
    }


    public boolean useBLASTSync() {
    public boolean useBLASTSync() {
        return mUseBLASTSync;
        return USE_BLAST_SYNC;
    }
    }


    @Override
    @Override
+3 −3
Original line number Original line Diff line number Diff line
@@ -5959,10 +5959,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP


    @Override
    @Override
    boolean isSyncFinished() {
    boolean isSyncFinished() {
        if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mViewVisibility == View.GONE
        if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mViewVisibility != View.VISIBLE
                && !isVisibleRequested()) {
                && !isVisibleRequested()) {
            // Don't wait for GONE windows. However, we don't alter the state in case the window
            // Don't wait for invisible windows. However, we don't alter the state in case the
            // becomes un-gone while the syncset is still active.
            // window becomes visible while the sync group is still active.
            return true;
            return true;
        }
        }
        return super.isSyncFinished();
        return super.isSyncFinished();