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

Commit 301ff098 authored by Rob Carr's avatar Rob Carr Committed by Automerger Merge Worker
Browse files

Merge "Port SurfaceControlViewHost to BLAST" into sc-dev am: c534edd5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13463021

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I57fc7f63d18740ef3a3683da58bfcfd3ddddb7a2
parents 085b8789 c534edd5
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -162,7 +162,6 @@ public class SurfaceControlViewHost {
            @NonNull WindowlessWindowManager wwm, boolean useSfChoreographer) {
            @NonNull WindowlessWindowManager wwm, boolean useSfChoreographer) {
        mWm = wwm;
        mWm = wwm;
        mViewRoot = new ViewRootImpl(c, d, mWm, useSfChoreographer);
        mViewRoot = new ViewRootImpl(c, d, mWm, useSfChoreographer);
        mViewRoot.forceDisableBLAST();
        mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
        mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
    }
    }


@@ -188,7 +187,6 @@ public class SurfaceControlViewHost {
        mWm = new WindowlessWindowManager(context.getResources().getConfiguration(),
        mWm = new WindowlessWindowManager(context.getResources().getConfiguration(),
                mSurfaceControl, hostToken);
                mSurfaceControl, hostToken);
        mViewRoot = new ViewRootImpl(context, display, mWm);
        mViewRoot = new ViewRootImpl(context, display, mWm);
        mViewRoot.forceDisableBLAST();
        mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
        mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
    }
    }


+19 −7
Original line number Original line Diff line number Diff line
@@ -71,7 +71,7 @@ public class WindowlessWindowManager implements IWindowSession {
        new HashMap<IBinder, ResizeCompleteCallback>();
        new HashMap<IBinder, ResizeCompleteCallback>();


    private final SurfaceSession mSurfaceSession = new SurfaceSession();
    private final SurfaceSession mSurfaceSession = new SurfaceSession();
    private final SurfaceControl mRootSurface;
    protected final SurfaceControl mRootSurface;
    private final Configuration mConfiguration;
    private final Configuration mConfiguration;
    private final IWindowSession mRealWm;
    private final IWindowSession mRealWm;
    private final IBinder mHostInputToken;
    private final IBinder mHostInputToken;
@@ -126,7 +126,7 @@ public class WindowlessWindowManager implements IWindowSession {
        }
        }
    }
    }


    protected void attachToParentSurface(SurfaceControl.Builder b) {
    protected void attachToParentSurface(IWindow window, SurfaceControl.Builder b) {
        b.setParent(mRootSurface);
        b.setParent(mRootSurface);
    }
    }


@@ -140,10 +140,10 @@ public class WindowlessWindowManager implements IWindowSession {
            InsetsSourceControl[] outActiveControls) {
            InsetsSourceControl[] outActiveControls) {
        final SurfaceControl.Builder b = new SurfaceControl.Builder(mSurfaceSession)
        final SurfaceControl.Builder b = new SurfaceControl.Builder(mSurfaceSession)
                .setFormat(attrs.format)
                .setFormat(attrs.format)
                .setBufferSize(getSurfaceWidth(attrs), getSurfaceHeight(attrs))
                .setBLASTLayer()
                .setName(attrs.getTitle().toString())
                .setName(attrs.getTitle().toString())
                .setCallsite("WindowlessWindowManager.addToDisplay");
                .setCallsite("WindowlessWindowManager.addToDisplay");
        attachToParentSurface(b);
        attachToParentSurface(window, b);
        final SurfaceControl sc = b.build();
        final SurfaceControl sc = b.build();


        if (((attrs.inputFeatures &
        if (((attrs.inputFeatures &
@@ -162,7 +162,8 @@ public class WindowlessWindowManager implements IWindowSession {
            mStateForWindow.put(window.asBinder(), state);
            mStateForWindow.put(window.asBinder(), state);
        }
        }


        final int res = WindowManagerGlobal.ADD_OKAY | WindowManagerGlobal.ADD_FLAG_APP_VISIBLE;
        final int res = WindowManagerGlobal.ADD_OKAY | WindowManagerGlobal.ADD_FLAG_APP_VISIBLE |
                        WindowManagerGlobal.ADD_FLAG_USE_BLAST;


        // Include whether the window is in touch mode.
        // Include whether the window is in touch mode.
        return isInTouchMode() ? res | WindowManagerGlobal.ADD_FLAG_IN_TOUCH_MODE : res;
        return isInTouchMode() ? res | WindowManagerGlobal.ADD_FLAG_IN_TOUCH_MODE : res;
@@ -222,6 +223,17 @@ public class WindowlessWindowManager implements IWindowSession {
        return false;
        return false;
    }
    }


    /** Access to package members for SystemWindow leashing
     * @hide
     */
    protected IBinder getWindowBinder(View rootView) {
        final ViewRootImpl root = rootView.getViewRootImpl();
        if (root == null) {
            return null;
        }
        return root.mWindow.asBinder();
    }

    /** @hide */
    /** @hide */
    @Nullable
    @Nullable
    protected SurfaceControl getSurfaceControl(View rootView) {
    protected SurfaceControl getSurfaceControl(View rootView) {
@@ -266,8 +278,8 @@ public class WindowlessWindowManager implements IWindowSession {
        WindowManager.LayoutParams attrs = state.mParams;
        WindowManager.LayoutParams attrs = state.mParams;


        if (viewFlags == View.VISIBLE) {
        if (viewFlags == View.VISIBLE) {
            t.setBufferSize(sc, getSurfaceWidth(attrs), getSurfaceHeight(attrs))
            outSurfaceSize.set(getSurfaceWidth(attrs), getSurfaceHeight(attrs));
                    .setOpaque(sc, isOpaque(attrs)).show(sc).apply();
            t.setOpaque(sc, isOpaque(attrs)).show(sc).apply();
            outSurfaceControl.copyFrom(sc, "WindowlessWindowManager.relayout");
            outSurfaceControl.copyFrom(sc, "WindowlessWindowManager.relayout");
        } else {
        } else {
            t.hide(sc).apply();
            t.hide(sc).apply();
+31 −1
Original line number Original line Diff line number Diff line
@@ -40,9 +40,11 @@ import android.view.IWindowSessionCallback;
import android.view.InsetsSourceControl;
import android.view.InsetsSourceControl;
import android.view.InsetsState;
import android.view.InsetsState;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.view.SurfaceControlViewHost;
import android.view.SurfaceControlViewHost;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.ViewRootImpl;
import android.view.WindowManager;
import android.view.WindowManager;
import android.view.WindowlessWindowManager;
import android.view.WindowlessWindowManager;
import android.window.ClientWindowFrames;
import android.window.ClientWindowFrames;
@@ -251,6 +253,8 @@ public class SystemWindows {
    public class SysUiWindowManager extends WindowlessWindowManager {
    public class SysUiWindowManager extends WindowlessWindowManager {
        final int mDisplayId;
        final int mDisplayId;
        ContainerWindow mContainerWindow;
        ContainerWindow mContainerWindow;
        final HashMap<IBinder, SurfaceControl> mLeashForWindow =
                new HashMap<IBinder, SurfaceControl>();
        public SysUiWindowManager(int displayId, Context ctx, SurfaceControl rootSurface,
        public SysUiWindowManager(int displayId, Context ctx, SurfaceControl rootSurface,
                ContainerWindow container) {
                ContainerWindow container) {
            super(ctx.getResources().getConfiguration(), rootSurface, null /* hostInputToken */);
            super(ctx.getResources().getConfiguration(), rootSurface, null /* hostInputToken */);
@@ -263,7 +267,33 @@ public class SystemWindows {
        }
        }


        SurfaceControl getSurfaceControlForWindow(View rootView) {
        SurfaceControl getSurfaceControlForWindow(View rootView) {
            return getSurfaceControl(rootView);
            synchronized (this) {
                return mLeashForWindow.get(getWindowBinder(rootView));
            }
        }

        protected void attachToParentSurface(IWindow window, SurfaceControl.Builder b) {
            SurfaceControl leash = new SurfaceControl.Builder(new SurfaceSession())
                  .setContainerLayer()
                  .setName("SystemWindowLeash")
                  .setHidden(false)
                  .setParent(mRootSurface)
                  .setCallsite("SysUiWIndowManager#attachToParentSurface").build();
            synchronized (this) {
                mLeashForWindow.put(window.asBinder(), leash);
            }
            b.setParent(leash);
        }

        @Override
        public void remove(android.view.IWindow window) throws RemoteException {
            super.remove(window);
            synchronized(this) {
                IBinder token = window.asBinder();
                new SurfaceControl.Transaction().remove(mLeashForWindow.get(token))
                    .apply();
                mLeashForWindow.remove(token);
            }
        }
        }


        void setTouchableRegionForWindow(View rootView, Region region) {
        void setTouchableRegionForWindow(View rootView, Region region) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -87,7 +87,7 @@ public final class SplitWindowManager extends WindowlessWindowManager {
    }
    }


    @Override
    @Override
    protected void attachToParentSurface(SurfaceControl.Builder b) {
    protected void attachToParentSurface(IWindow window, SurfaceControl.Builder b) {
        mParentContainerCallbacks.attachToParentSurface(b);
        mParentContainerCallbacks.attachToParentSurface(b);
    }
    }


+0 −8
Original line number Original line Diff line number Diff line
@@ -862,14 +862,6 @@ public class DividerView extends FrameLayout implements OnTouchListener,
     * assigned to it.
     * assigned to it.
     */
     */
    private SurfaceControl getWindowSurfaceControl() {
    private SurfaceControl getWindowSurfaceControl() {
        final ViewRootImpl root = getViewRootImpl();
        if (root == null) {
            return null;
        }
        SurfaceControl out = root.getSurfaceControl();
        if (out != null && out.isValid()) {
            return out;
        }
        return mWindowManager.mSystemWindows.getViewSurface(this);
        return mWindowManager.mSystemWindows.getViewSurface(this);
    }
    }


Loading