Merge "Don't perform layout while adjusting displays/stacks state." into mnc-dev

This commit is contained in:
Filip Gruszczynski
2015-09-01 23:11:46 +00:00
committed by Android (Google) Code Review
2 changed files with 20 additions and 7 deletions

View File

@@ -375,7 +375,10 @@ public class TaskStack {
for (int appNdx = appWindowTokens.size() - 1; appNdx >= 0; --appNdx) {
final WindowList appWindows = appWindowTokens.get(appNdx).allAppWindows;
for (int winNdx = appWindows.size() - 1; winNdx >= 0; --winNdx) {
mService.removeWindowInnerLocked(appWindows.get(winNdx));
// We are in the middle of changing the state of displays/stacks/tasks. We need
// to finish that, before we let layout interfere with it.
mService.removeWindowInnerLocked(appWindows.get(winNdx),
false /* performLayout */);
doAnotherLayoutPass = true;
}
}

View File

@@ -2793,6 +2793,10 @@ public class WindowManagerService extends IWindowManager.Stub
}
void removeWindowInnerLocked(WindowState win) {
removeWindowInnerLocked(win, true);
}
void removeWindowInnerLocked(WindowState win, boolean performLayout) {
if (win.mRemoved) {
// Nothing to do.
return;
@@ -2890,7 +2894,9 @@ public class WindowManagerService extends IWindowManager.Stub
if (displayContent != null) {
displayContent.layoutNeeded = true;
}
performLayoutAndPlaceSurfacesLocked();
if (performLayout) {
performLayoutAndPlaceSurfacesLocked();
}
if (win.mAppToken != null) {
win.mAppToken.updateReportedVisibilityLocked();
}
@@ -5193,7 +5199,9 @@ public class WindowManagerService extends IWindowManager.Stub
}
public void removeStack(int stackId) {
mStackIdToStack.remove(stackId);
synchronized (mWindowMap) {
mStackIdToStack.remove(stackId);
}
}
public void removeTask(int taskId) {
@@ -5267,10 +5275,12 @@ public class WindowManagerService extends IWindowManager.Stub
}
public void getStackBounds(int stackId, Rect bounds) {
final TaskStack stack = mStackIdToStack.get(stackId);
if (stack != null) {
stack.getBounds(bounds);
return;
synchronized (mWindowMap) {
final TaskStack stack = mStackIdToStack.get(stackId);
if (stack != null) {
stack.getBounds(bounds);
return;
}
}
bounds.setEmpty();
}