Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java +15 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.wm.shell.common; import android.annotation.Nullable; import android.os.RemoteException; import android.os.Trace; import android.util.Slog; import android.view.IDisplayChangeWindowCallback; import android.view.IDisplayChangeWindowController; Loading @@ -40,6 +41,7 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public class DisplayChangeController { private static final String TAG = DisplayChangeController.class.getSimpleName(); private static final String HANDLE_DISPLAY_CHANGE_TRACE_TAG = "HandleRemoteDisplayChange"; private final ShellExecutor mMainExecutor; private final IWindowManager mWmService; Loading Loading @@ -81,9 +83,15 @@ public class DisplayChangeController { /** Query all listeners for changes that should happen on display change. */ void dispatchOnDisplayChange(WindowContainerTransaction outWct, int displayId, int fromRotation, int toRotation, DisplayAreaInfo newDisplayAreaInfo) { if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.beginSection("dispatchOnDisplayChange"); } for (OnDisplayChangingListener c : mDisplayChangeListener) { c.onDisplayChange(displayId, fromRotation, toRotation, newDisplayAreaInfo, outWct); } if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endSection(); } } private void onDisplayChange(int displayId, int fromRotation, int toRotation, Loading @@ -94,6 +102,10 @@ public class DisplayChangeController { callback.continueDisplayChange(t); } catch (RemoteException e) { Slog.e(TAG, "Failed to continue handling display change", e); } finally { if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(HANDLE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } } } Loading @@ -103,6 +115,9 @@ public class DisplayChangeController { @Override public void onDisplayChange(int displayId, int fromRotation, int toRotation, DisplayAreaInfo newDisplayAreaInfo, IDisplayChangeWindowCallback callback) { if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.beginAsyncSection(HANDLE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } mMainExecutor.execute(() -> DisplayChangeController.this .onDisplayChange(displayId, fromRotation, toRotation, newDisplayAreaInfo, callback)); Loading services/core/java/com/android/server/wm/RemoteDisplayChangeController.java +21 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION import android.annotation.NonNull; import android.annotation.Nullable; import android.os.RemoteException; import android.os.Trace; import android.util.Slog; import android.view.IDisplayChangeWindowCallback; import android.window.DisplayAreaInfo; Loading @@ -40,6 +41,7 @@ import java.util.List; public class RemoteDisplayChangeController { private static final String TAG = "RemoteDisplayChangeController"; private static final String REMOTE_DISPLAY_CHANGE_TRACE_TAG = "RemoteDisplayChange"; private static final int REMOTE_DISPLAY_CHANGE_TIMEOUT_MS = 800; Loading Loading @@ -82,6 +84,10 @@ public class RemoteDisplayChangeController { } mCallbacks.add(callback); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.beginAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } if (newDisplayAreaInfo != null) { ProtoLog.v(WM_DEBUG_CONFIGURATION, "Starting remote display change: " Loading Loading @@ -122,6 +128,10 @@ public class RemoteDisplayChangeController { mCallbacks.clear(); } callback.onContinueRemoteDisplayChange(null /* transaction */); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } } } } Loading @@ -137,13 +147,23 @@ public class RemoteDisplayChangeController { for (int i = 0; i < idx; ++i) { // Expect remote callbacks in order. If they don't come in order, then force // ordering by continuing everything up until this one with empty transactions. mCallbacks.get(i).onContinueRemoteDisplayChange(null /* transaction */); ContinueRemoteDisplayChangeCallback currentCallback = mCallbacks.get(i); currentCallback.onContinueRemoteDisplayChange(null /* transaction */); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, currentCallback.hashCode()); } } mCallbacks.subList(0, idx + 1).clear(); if (mCallbacks.isEmpty()) { mService.mH.removeCallbacks(mTimeoutRunnable); } callback.onContinueRemoteDisplayChange(transaction); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } } } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java +15 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.wm.shell.common; import android.annotation.Nullable; import android.os.RemoteException; import android.os.Trace; import android.util.Slog; import android.view.IDisplayChangeWindowCallback; import android.view.IDisplayChangeWindowController; Loading @@ -40,6 +41,7 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public class DisplayChangeController { private static final String TAG = DisplayChangeController.class.getSimpleName(); private static final String HANDLE_DISPLAY_CHANGE_TRACE_TAG = "HandleRemoteDisplayChange"; private final ShellExecutor mMainExecutor; private final IWindowManager mWmService; Loading Loading @@ -81,9 +83,15 @@ public class DisplayChangeController { /** Query all listeners for changes that should happen on display change. */ void dispatchOnDisplayChange(WindowContainerTransaction outWct, int displayId, int fromRotation, int toRotation, DisplayAreaInfo newDisplayAreaInfo) { if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.beginSection("dispatchOnDisplayChange"); } for (OnDisplayChangingListener c : mDisplayChangeListener) { c.onDisplayChange(displayId, fromRotation, toRotation, newDisplayAreaInfo, outWct); } if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endSection(); } } private void onDisplayChange(int displayId, int fromRotation, int toRotation, Loading @@ -94,6 +102,10 @@ public class DisplayChangeController { callback.continueDisplayChange(t); } catch (RemoteException e) { Slog.e(TAG, "Failed to continue handling display change", e); } finally { if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(HANDLE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } } } Loading @@ -103,6 +115,9 @@ public class DisplayChangeController { @Override public void onDisplayChange(int displayId, int fromRotation, int toRotation, DisplayAreaInfo newDisplayAreaInfo, IDisplayChangeWindowCallback callback) { if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.beginAsyncSection(HANDLE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } mMainExecutor.execute(() -> DisplayChangeController.this .onDisplayChange(displayId, fromRotation, toRotation, newDisplayAreaInfo, callback)); Loading
services/core/java/com/android/server/wm/RemoteDisplayChangeController.java +21 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION import android.annotation.NonNull; import android.annotation.Nullable; import android.os.RemoteException; import android.os.Trace; import android.util.Slog; import android.view.IDisplayChangeWindowCallback; import android.window.DisplayAreaInfo; Loading @@ -40,6 +41,7 @@ import java.util.List; public class RemoteDisplayChangeController { private static final String TAG = "RemoteDisplayChangeController"; private static final String REMOTE_DISPLAY_CHANGE_TRACE_TAG = "RemoteDisplayChange"; private static final int REMOTE_DISPLAY_CHANGE_TIMEOUT_MS = 800; Loading Loading @@ -82,6 +84,10 @@ public class RemoteDisplayChangeController { } mCallbacks.add(callback); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.beginAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } if (newDisplayAreaInfo != null) { ProtoLog.v(WM_DEBUG_CONFIGURATION, "Starting remote display change: " Loading Loading @@ -122,6 +128,10 @@ public class RemoteDisplayChangeController { mCallbacks.clear(); } callback.onContinueRemoteDisplayChange(null /* transaction */); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } } } } Loading @@ -137,13 +147,23 @@ public class RemoteDisplayChangeController { for (int i = 0; i < idx; ++i) { // Expect remote callbacks in order. If they don't come in order, then force // ordering by continuing everything up until this one with empty transactions. mCallbacks.get(i).onContinueRemoteDisplayChange(null /* transaction */); ContinueRemoteDisplayChangeCallback currentCallback = mCallbacks.get(i); currentCallback.onContinueRemoteDisplayChange(null /* transaction */); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, currentCallback.hashCode()); } } mCallbacks.subList(0, idx + 1).clear(); if (mCallbacks.isEmpty()) { mService.mH.removeCallbacks(mTimeoutRunnable); } callback.onContinueRemoteDisplayChange(transaction); if (Trace.isTagEnabled(Trace.TRACE_TAG_WINDOW_MANAGER)) { Trace.endAsyncSection(REMOTE_DISPLAY_CHANGE_TRACE_TAG, callback.hashCode()); } } } Loading