Loading apct-tests/perftests/windowmanager/src/android/wm/WindowAddRemovePerfTest.java +3 −2 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.view.IWindowSession; import android.view.InputChannel; import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.View; import android.view.WindowManager; import android.view.WindowManagerGlobal; Loading Loading @@ -82,7 +83,7 @@ public class WindowAddRemovePerfTest extends WindowManagerPerfTestBase private static class TestWindow extends BaseIWindow { final WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(); final InsetsState mRequestedVisibility = new InsetsState(); final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities(); final InsetsState mOutInsetsState = new InsetsState(); final InsetsSourceControl[] mOutControls = new InsetsSourceControl[0]; Loading @@ -102,7 +103,7 @@ public class WindowAddRemovePerfTest extends WindowManagerPerfTestBase long startTime = SystemClock.elapsedRealtimeNanos(); session.addToDisplay(this, mLayoutParams, View.VISIBLE, Display.DEFAULT_DISPLAY, mRequestedVisibility, inputChannel, Display.DEFAULT_DISPLAY, mRequestedVisibilities, inputChannel, mOutInsetsState, mOutControls); final long elapsedTimeNsOfAdd = SystemClock.elapsedRealtimeNanos() - startTime; state.addExtraResult("add", elapsedTimeNsOfAdd); Loading core/java/android/service/wallpaper/WallpaperService.java +4 −4 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import android.view.InputEvent; import android.view.InputEventReceiver; import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.MotionEvent; import android.view.PixelCopy; import android.view.Surface; Loading Loading @@ -224,10 +225,9 @@ public abstract class WallpaperService extends Service { final ClientWindowFrames mWinFrames = new ClientWindowFrames(); final Rect mDispatchedContentInsets = new Rect(); final Rect mDispatchedStableInsets = new Rect(); final Rect mFinalSystemInsets = new Rect(); final Rect mFinalStableInsets = new Rect(); DisplayCutout mDispatchedDisplayCutout = DisplayCutout.NO_CUTOUT; final InsetsState mInsetsState = new InsetsState(); final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities(); final InsetsSourceControl[] mTempControls = new InsetsSourceControl[0]; final MergedConfiguration mMergedConfiguration = new MergedConfiguration(); private final Point mSurfaceSize = new Point(); Loading Loading @@ -995,8 +995,8 @@ public abstract class WallpaperService extends Service { InputChannel inputChannel = new InputChannel(); if (mSession.addToDisplay(mWindow, mLayout, View.VISIBLE, mDisplay.getDisplayId(), mInsetsState, inputChannel, mInsetsState, mTempControls) < 0) { mDisplay.getDisplayId(), mRequestedVisibilities, inputChannel, mInsetsState, mTempControls) < 0) { Log.w(TAG, "Failed to add window while updating wallpaper surface."); return; } Loading core/java/android/view/IWindowManager.aidl +5 −3 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import android.view.IWindowSessionCallback; import android.view.KeyEvent; import android.view.InputEvent; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.MagnificationSpec; import android.view.MotionEvent; import android.view.InputChannel; Loading Loading @@ -720,14 +721,15 @@ interface IWindowManager int displayId, in IDisplayWindowInsetsController displayWindowInsetsController); /** * Called when a remote process modifies insets on a display window container. * Called when a remote process updates the requested visibilities of insets on a display window * container. */ void modifyDisplayWindowInsets(int displayId, in InsetsState state); void updateDisplayWindowRequestedVisibilities(int displayId, in InsetsVisibilities vis); /** * Called to get the expected window insets. * * @return {@code true} if system bars are always comsumed. * @return {@code true} if system bars are always consumed. */ boolean getWindowInsets(in WindowManager.LayoutParams attrs, int displayId, out InsetsState outInsetsState); Loading core/java/android/view/IWindowSession.aidl +5 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.view.MotionEvent; import android.view.WindowManager; import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; Loading @@ -46,12 +47,12 @@ import java.util.List; */ interface IWindowSession { int addToDisplay(IWindow window, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, in InsetsState requestedVisibility, in int viewVisibility, in int layerStackId, in InsetsVisibilities requestedVisibilities, out InputChannel outInputChannel, out InsetsState insetsState, out InsetsSourceControl[] activeControls); int addToDisplayAsUser(IWindow window, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, in int userId, in InsetsState requestedVisibility, out InputChannel outInputChannel, in InsetsVisibilities requestedVisibilities, out InputChannel outInputChannel, out InsetsState insetsState, out InsetsSourceControl[] activeControls); int addToDisplayWithoutInputChannel(IWindow window, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, out InsetsState insetsState); Loading Loading @@ -285,10 +286,9 @@ interface IWindowSession { oneway void updateTapExcludeRegion(IWindow window, in Region region); /** * Called when the client has changed the local insets state, and now the server should reflect * that new state. * Updates the requested visibilities of insets. */ oneway void insetsModified(IWindow window, in InsetsState state); oneway void updateRequestedVisibilities(IWindow window, in InsetsVisibilities visibilities); /** * Called when the system gesture exclusion has changed. Loading core/java/android/view/InsetsController.java +23 −22 Original line number Diff line number Diff line Loading @@ -107,9 +107,12 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation boolean hasControl); /** * Called when insets have been modified by the client and should be reported back to WM. * Called when the requested visibilities of insets have been modified by the client. * The visibilities should be reported back to WM. * * @param visibilities A collection of the requested visibilities. */ void onInsetsModified(InsetsState insetsState); void updateRequestedVisibilities(InsetsVisibilities visibilities); /** * @return Whether the host has any callbacks it wants to synchronize the animations with. Loading Loading @@ -536,10 +539,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation /** The state dispatched from server */ private final InsetsState mLastDispatchedState = new InsetsState(); // TODO: Use other class to represent the requested visibility of each type, because the // display frame and the frame in each source are not used. /** The requested visibilities sent to server */ private final InsetsState mRequestedState = new InsetsState(); private final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities(); private final Rect mFrame = new Rect(); private final BiFunction<InsetsController, Integer, InsetsSourceConsumer> mConsumerCreator; Loading Loading @@ -801,7 +802,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } } boolean requestedStateStale = false; boolean requestedVisibilityStale = false; final int[] showTypes = new int[1]; final int[] hideTypes = new int[1]; Loading @@ -822,20 +823,20 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation final InsetsSourceConsumer consumer = getSourceConsumer(type); consumer.setControl(control, showTypes, hideTypes); if (!requestedStateStale) { if (!requestedVisibilityStale) { final boolean requestedVisible = consumer.isRequestedVisible(); // We might have changed our requested visibilities while we don't have the control, // so we need to update our requested state once we have control. Otherwise, our // requested state at the server side might be incorrect. final boolean requestedVisibilityChanged = requestedVisible != mRequestedState.getSourceOrDefaultVisibility(type); requestedVisible != mRequestedVisibilities.getVisibility(type); // The IME client visibility will be reset by insets source provider while updating // control, so if IME is requested visible, we need to send the request to server. final boolean imeRequestedVisible = type == ITYPE_IME && requestedVisible; requestedStateStale = requestedVisibilityChanged || imeRequestedVisible; requestedVisibilityStale = requestedVisibilityChanged || imeRequestedVisible; } } Loading @@ -861,7 +862,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } // InsetsSourceConsumer#setControl might change the requested visibility. updateRequestedVisibility(); updateRequestedVisibilities(); } @Override Loading Loading @@ -1015,7 +1016,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (types == 0) { // nothing to animate. listener.onCancelled(null); updateRequestedVisibility(); updateRequestedVisibilities(); if (DEBUG) Log.d(TAG, "no types to animate in controlAnimationUnchecked"); return; } Loading Loading @@ -1051,7 +1052,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } }); } updateRequestedVisibility(); updateRequestedVisibilities(); Trace.asyncTraceEnd(TRACE_TAG_VIEW, "IC.showRequestFromApi", 0); return; } Loading @@ -1059,7 +1060,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (typesReady == 0) { if (DEBUG) Log.d(TAG, "No types ready. onCancelled()"); listener.onCancelled(null); updateRequestedVisibility(); updateRequestedVisibilities(); return; } Loading Loading @@ -1091,7 +1092,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } else { hideDirectly(types, false /* animationFinished */, animationType, fromIme); } updateRequestedVisibility(); updateRequestedVisibilities(); } /** Loading Loading @@ -1348,7 +1349,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation /** * Sends the requested visibilities to window manager if any of them is changed. */ private void updateRequestedVisibility() { private void updateRequestedVisibilities() { boolean changed = false; for (int i = mRequestedVisibilityChanged.size() - 1; i >= 0; i--) { final InsetsSourceConsumer consumer = mRequestedVisibilityChanged.valueAt(i); Loading @@ -1357,8 +1358,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation continue; } final boolean requestedVisible = consumer.isRequestedVisible(); if (requestedVisible != mRequestedState.getSourceOrDefaultVisibility(type)) { mRequestedState.getSource(type).setVisible(requestedVisible); if (mRequestedVisibilities.getVisibility(type) != requestedVisible) { mRequestedVisibilities.setVisibility(type, requestedVisible); changed = true; } } Loading @@ -1366,11 +1367,11 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (!changed) { return; } mHost.onInsetsModified(mRequestedState); mHost.updateRequestedVisibilities(mRequestedVisibilities); } InsetsState getRequestedVisibility() { return mRequestedState; InsetsVisibilities getRequestedVisibilities() { return mRequestedVisibilities; } @VisibleForTesting Loading Loading @@ -1425,7 +1426,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation for (int i = internalTypes.size() - 1; i >= 0; i--) { getSourceConsumer(internalTypes.valueAt(i)).hide(animationFinished, animationType); } updateRequestedVisibility(); updateRequestedVisibilities(); if (fromIme) { Trace.asyncTraceEnd(TRACE_TAG_VIEW, "IC.hideRequestFromIme", 0); Loading @@ -1441,7 +1442,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation for (int i = internalTypes.size() - 1; i >= 0; i--) { getSourceConsumer(internalTypes.valueAt(i)).show(false /* fromIme */); } updateRequestedVisibility(); updateRequestedVisibilities(); if (fromIme) { Trace.asyncTraceEnd(TRACE_TAG_VIEW, "IC.showRequestFromIme", 0); Loading Loading
apct-tests/perftests/windowmanager/src/android/wm/WindowAddRemovePerfTest.java +3 −2 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.view.IWindowSession; import android.view.InputChannel; import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.View; import android.view.WindowManager; import android.view.WindowManagerGlobal; Loading Loading @@ -82,7 +83,7 @@ public class WindowAddRemovePerfTest extends WindowManagerPerfTestBase private static class TestWindow extends BaseIWindow { final WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(); final InsetsState mRequestedVisibility = new InsetsState(); final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities(); final InsetsState mOutInsetsState = new InsetsState(); final InsetsSourceControl[] mOutControls = new InsetsSourceControl[0]; Loading @@ -102,7 +103,7 @@ public class WindowAddRemovePerfTest extends WindowManagerPerfTestBase long startTime = SystemClock.elapsedRealtimeNanos(); session.addToDisplay(this, mLayoutParams, View.VISIBLE, Display.DEFAULT_DISPLAY, mRequestedVisibility, inputChannel, Display.DEFAULT_DISPLAY, mRequestedVisibilities, inputChannel, mOutInsetsState, mOutControls); final long elapsedTimeNsOfAdd = SystemClock.elapsedRealtimeNanos() - startTime; state.addExtraResult("add", elapsedTimeNsOfAdd); Loading
core/java/android/service/wallpaper/WallpaperService.java +4 −4 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import android.view.InputEvent; import android.view.InputEventReceiver; import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.MotionEvent; import android.view.PixelCopy; import android.view.Surface; Loading Loading @@ -224,10 +225,9 @@ public abstract class WallpaperService extends Service { final ClientWindowFrames mWinFrames = new ClientWindowFrames(); final Rect mDispatchedContentInsets = new Rect(); final Rect mDispatchedStableInsets = new Rect(); final Rect mFinalSystemInsets = new Rect(); final Rect mFinalStableInsets = new Rect(); DisplayCutout mDispatchedDisplayCutout = DisplayCutout.NO_CUTOUT; final InsetsState mInsetsState = new InsetsState(); final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities(); final InsetsSourceControl[] mTempControls = new InsetsSourceControl[0]; final MergedConfiguration mMergedConfiguration = new MergedConfiguration(); private final Point mSurfaceSize = new Point(); Loading Loading @@ -995,8 +995,8 @@ public abstract class WallpaperService extends Service { InputChannel inputChannel = new InputChannel(); if (mSession.addToDisplay(mWindow, mLayout, View.VISIBLE, mDisplay.getDisplayId(), mInsetsState, inputChannel, mInsetsState, mTempControls) < 0) { mDisplay.getDisplayId(), mRequestedVisibilities, inputChannel, mInsetsState, mTempControls) < 0) { Log.w(TAG, "Failed to add window while updating wallpaper surface."); return; } Loading
core/java/android/view/IWindowManager.aidl +5 −3 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import android.view.IWindowSessionCallback; import android.view.KeyEvent; import android.view.InputEvent; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.MagnificationSpec; import android.view.MotionEvent; import android.view.InputChannel; Loading Loading @@ -720,14 +721,15 @@ interface IWindowManager int displayId, in IDisplayWindowInsetsController displayWindowInsetsController); /** * Called when a remote process modifies insets on a display window container. * Called when a remote process updates the requested visibilities of insets on a display window * container. */ void modifyDisplayWindowInsets(int displayId, in InsetsState state); void updateDisplayWindowRequestedVisibilities(int displayId, in InsetsVisibilities vis); /** * Called to get the expected window insets. * * @return {@code true} if system bars are always comsumed. * @return {@code true} if system bars are always consumed. */ boolean getWindowInsets(in WindowManager.LayoutParams attrs, int displayId, out InsetsState outInsetsState); Loading
core/java/android/view/IWindowSession.aidl +5 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.view.MotionEvent; import android.view.WindowManager; import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsVisibilities; import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; Loading @@ -46,12 +47,12 @@ import java.util.List; */ interface IWindowSession { int addToDisplay(IWindow window, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, in InsetsState requestedVisibility, in int viewVisibility, in int layerStackId, in InsetsVisibilities requestedVisibilities, out InputChannel outInputChannel, out InsetsState insetsState, out InsetsSourceControl[] activeControls); int addToDisplayAsUser(IWindow window, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, in int userId, in InsetsState requestedVisibility, out InputChannel outInputChannel, in InsetsVisibilities requestedVisibilities, out InputChannel outInputChannel, out InsetsState insetsState, out InsetsSourceControl[] activeControls); int addToDisplayWithoutInputChannel(IWindow window, in WindowManager.LayoutParams attrs, in int viewVisibility, in int layerStackId, out InsetsState insetsState); Loading Loading @@ -285,10 +286,9 @@ interface IWindowSession { oneway void updateTapExcludeRegion(IWindow window, in Region region); /** * Called when the client has changed the local insets state, and now the server should reflect * that new state. * Updates the requested visibilities of insets. */ oneway void insetsModified(IWindow window, in InsetsState state); oneway void updateRequestedVisibilities(IWindow window, in InsetsVisibilities visibilities); /** * Called when the system gesture exclusion has changed. Loading
core/java/android/view/InsetsController.java +23 −22 Original line number Diff line number Diff line Loading @@ -107,9 +107,12 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation boolean hasControl); /** * Called when insets have been modified by the client and should be reported back to WM. * Called when the requested visibilities of insets have been modified by the client. * The visibilities should be reported back to WM. * * @param visibilities A collection of the requested visibilities. */ void onInsetsModified(InsetsState insetsState); void updateRequestedVisibilities(InsetsVisibilities visibilities); /** * @return Whether the host has any callbacks it wants to synchronize the animations with. Loading Loading @@ -536,10 +539,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation /** The state dispatched from server */ private final InsetsState mLastDispatchedState = new InsetsState(); // TODO: Use other class to represent the requested visibility of each type, because the // display frame and the frame in each source are not used. /** The requested visibilities sent to server */ private final InsetsState mRequestedState = new InsetsState(); private final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities(); private final Rect mFrame = new Rect(); private final BiFunction<InsetsController, Integer, InsetsSourceConsumer> mConsumerCreator; Loading Loading @@ -801,7 +802,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } } boolean requestedStateStale = false; boolean requestedVisibilityStale = false; final int[] showTypes = new int[1]; final int[] hideTypes = new int[1]; Loading @@ -822,20 +823,20 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation final InsetsSourceConsumer consumer = getSourceConsumer(type); consumer.setControl(control, showTypes, hideTypes); if (!requestedStateStale) { if (!requestedVisibilityStale) { final boolean requestedVisible = consumer.isRequestedVisible(); // We might have changed our requested visibilities while we don't have the control, // so we need to update our requested state once we have control. Otherwise, our // requested state at the server side might be incorrect. final boolean requestedVisibilityChanged = requestedVisible != mRequestedState.getSourceOrDefaultVisibility(type); requestedVisible != mRequestedVisibilities.getVisibility(type); // The IME client visibility will be reset by insets source provider while updating // control, so if IME is requested visible, we need to send the request to server. final boolean imeRequestedVisible = type == ITYPE_IME && requestedVisible; requestedStateStale = requestedVisibilityChanged || imeRequestedVisible; requestedVisibilityStale = requestedVisibilityChanged || imeRequestedVisible; } } Loading @@ -861,7 +862,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } // InsetsSourceConsumer#setControl might change the requested visibility. updateRequestedVisibility(); updateRequestedVisibilities(); } @Override Loading Loading @@ -1015,7 +1016,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (types == 0) { // nothing to animate. listener.onCancelled(null); updateRequestedVisibility(); updateRequestedVisibilities(); if (DEBUG) Log.d(TAG, "no types to animate in controlAnimationUnchecked"); return; } Loading Loading @@ -1051,7 +1052,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } }); } updateRequestedVisibility(); updateRequestedVisibilities(); Trace.asyncTraceEnd(TRACE_TAG_VIEW, "IC.showRequestFromApi", 0); return; } Loading @@ -1059,7 +1060,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (typesReady == 0) { if (DEBUG) Log.d(TAG, "No types ready. onCancelled()"); listener.onCancelled(null); updateRequestedVisibility(); updateRequestedVisibilities(); return; } Loading Loading @@ -1091,7 +1092,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } else { hideDirectly(types, false /* animationFinished */, animationType, fromIme); } updateRequestedVisibility(); updateRequestedVisibilities(); } /** Loading Loading @@ -1348,7 +1349,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation /** * Sends the requested visibilities to window manager if any of them is changed. */ private void updateRequestedVisibility() { private void updateRequestedVisibilities() { boolean changed = false; for (int i = mRequestedVisibilityChanged.size() - 1; i >= 0; i--) { final InsetsSourceConsumer consumer = mRequestedVisibilityChanged.valueAt(i); Loading @@ -1357,8 +1358,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation continue; } final boolean requestedVisible = consumer.isRequestedVisible(); if (requestedVisible != mRequestedState.getSourceOrDefaultVisibility(type)) { mRequestedState.getSource(type).setVisible(requestedVisible); if (mRequestedVisibilities.getVisibility(type) != requestedVisible) { mRequestedVisibilities.setVisibility(type, requestedVisible); changed = true; } } Loading @@ -1366,11 +1367,11 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation if (!changed) { return; } mHost.onInsetsModified(mRequestedState); mHost.updateRequestedVisibilities(mRequestedVisibilities); } InsetsState getRequestedVisibility() { return mRequestedState; InsetsVisibilities getRequestedVisibilities() { return mRequestedVisibilities; } @VisibleForTesting Loading Loading @@ -1425,7 +1426,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation for (int i = internalTypes.size() - 1; i >= 0; i--) { getSourceConsumer(internalTypes.valueAt(i)).hide(animationFinished, animationType); } updateRequestedVisibility(); updateRequestedVisibilities(); if (fromIme) { Trace.asyncTraceEnd(TRACE_TAG_VIEW, "IC.hideRequestFromIme", 0); Loading @@ -1441,7 +1442,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation for (int i = internalTypes.size() - 1; i >= 0; i--) { getSourceConsumer(internalTypes.valueAt(i)).show(false /* fromIme */); } updateRequestedVisibility(); updateRequestedVisibilities(); if (fromIme) { Trace.asyncTraceEnd(TRACE_TAG_VIEW, "IC.showRequestFromIme", 0); Loading