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) { for (int appNdx = appWindowTokens.size() - 1; appNdx >= 0; --appNdx) {
final WindowList appWindows = appWindowTokens.get(appNdx).allAppWindows; final WindowList appWindows = appWindowTokens.get(appNdx).allAppWindows;
for (int winNdx = appWindows.size() - 1; winNdx >= 0; --winNdx) { 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; doAnotherLayoutPass = true;
} }
} }

View File

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