summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2014-01-12 21:19:06 -0800
committerCraig Mautner <cmautner@google.com>2014-01-12 21:26:09 -0800
commitad25fa36cb63f134acf636d70696bbf81548802e (patch)
tree9f5580059d9b13e2c3f39f822e68652c9504c24b /services
parent4504de5d5a8e1c7dfb306b16282f348856c24764 (diff)
downloadframeworks_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.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java47
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);
+ }
}
}