diff options
author | Craig Mautner <cmautner@google.com> | 2014-01-12 21:19:06 -0800 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2014-01-12 21:26:09 -0800 |
commit | ad25fa36cb63f134acf636d70696bbf81548802e (patch) | |
tree | 9f5580059d9b13e2c3f39f822e68652c9504c24b /services | |
parent | 4504de5d5a8e1c7dfb306b16282f348856c24764 (diff) | |
download | frameworks_base-ad25fa36cb63f134acf636d70696bbf81548802e.zip frameworks_base-ad25fa36cb63f134acf636d70696bbf81548802e.tar.gz frameworks_base-ad25fa36cb63f134acf636d70696bbf81548802e.tar.bz2 |
Add display synchronously.
Adding the virtual display to window manager through a handler message
causes timing issues. Add the display directly to fix it.
Change-Id: I3ad6b16ce6dff2a48abd120a8e873e11a028e2c3
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/am/ActivityStackSupervisor.java | 3 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 47 |
2 files changed, 17 insertions, 33 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index ed11470..e52e1bc 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -2995,8 +2995,7 @@ public final class ActivityStackSupervisor implements DisplayListener { final Display display = virtualDisplay.getDisplay(); final int displayId = display.getDisplayId(); - // Do WindowManager operation first so that it is ahead of CREATE_STACK in the H queue. - mWindowManager.onDisplayAdded(displayId); + mWindowManager.handleDisplayAdded(displayId); synchronized (mService) { ActivityDisplay activityDisplay = new ActivityDisplay(display); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f679846..e02714b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4817,27 +4817,20 @@ public class WindowManagerService extends IWindowManager.Stub } } - public void createStack(int stackId, int displayId) { - mH.sendMessage(mH.obtainMessage(H.CREATE_STACK, stackId, displayId)); - } - /** - * Create a new TaskStack and place it next to an existing stack. + * Create a new TaskStack and place it on a DisplayContent. * @param stackId The unique identifier of the new stack. + * @param displayId The unique identifier of the DisplayContent. */ - private void createStackLocked(int stackId, int displayId) { + public void createStack(int stackId, int displayId) { final long origId = Binder.clearCallingIdentity(); try { synchronized (mWindowMap) { - final int numDisplays = mDisplayContents.size(); - for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) { - final DisplayContent displayContent = mDisplayContents.valueAt(displayNdx); - if (displayContent.getDisplayId() == displayId) { - TaskStack stack = displayContent.createStack(stackId); - mStackIdToStack.put(stackId, stack); - performLayoutAndPlaceSurfacesLocked(); - return; - } + final DisplayContent displayContent = mDisplayContents.get(displayId); + if (displayContent != null) { + TaskStack stack = displayContent.createStack(stackId); + mStackIdToStack.put(stackId, stack); + performLayoutAndPlaceSurfacesLocked(); } } } finally { @@ -4872,7 +4865,6 @@ public class WindowManagerService extends IWindowManager.Stub final TaskStack stack = task.mStack; EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, taskId, "removeTask"); stack.removeTask(task); - stack.getDisplayContent().layoutNeeded = true; } } @@ -7047,8 +7039,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int REMOVE_STARTING_TIMEOUT = 33; - public static final int CREATE_STACK = 34; - @Override public void handleMessage(Message msg) { if (DEBUG_WINDOW_TRACE) { @@ -7456,9 +7446,7 @@ public class WindowManagerService extends IWindowManager.Stub } case DO_DISPLAY_ADDED: - synchronized (mWindowMap) { - handleDisplayAddedLocked(msg.arg1); - } + handleDisplayAdded(msg.arg1); break; case DO_DISPLAY_REMOVED: @@ -7492,11 +7480,6 @@ public class WindowManagerService extends IWindowManager.Stub } catch (RemoteException e) { } break; - case CREATE_STACK: - synchronized (mWindowMap) { - createStackLocked(msg.arg1, msg.arg2); - } - break; } if (DEBUG_WINDOW_TRACE) { Slog.v(TAG, "handleMessage: exit"); @@ -10800,11 +10783,13 @@ public class WindowManagerService extends IWindowManager.Stub mH.sendMessage(mH.obtainMessage(H.DO_DISPLAY_ADDED, displayId, 0)); } - private void handleDisplayAddedLocked(int displayId) { - final Display display = mDisplayManager.getDisplay(displayId); - if (display != null) { - createDisplayContentLocked(display); - displayReady(displayId); + public void handleDisplayAdded(int displayId) { + synchronized (mWindowMap) { + final Display display = mDisplayManager.getDisplay(displayId); + if (display != null) { + createDisplayContentLocked(display); + displayReady(displayId); + } } } |