Merge "Reset deferred task removal when app token added." into klp-modular-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f0f454522a
@ -1672,7 +1672,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
return view.getParent() != null ? view : null;
|
return view.getParent() != null ? view : null;
|
||||||
} catch (WindowManager.BadTokenException e) {
|
} catch (WindowManager.BadTokenException e) {
|
||||||
// ignore
|
// ignore
|
||||||
Log.w(TAG, appToken + " already running, starting window not displayed");
|
Log.w(TAG, appToken + " already running, starting window not displayed. " +
|
||||||
|
e.getMessage());
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// don't crash if something else bad happens, for example a
|
// don't crash if something else bad happens, for example a
|
||||||
// failure loading resources because we are loading from an app
|
// failure loading resources because we are loading from an app
|
||||||
|
@ -16,11 +16,12 @@
|
|||||||
|
|
||||||
package com.android.server.wm;
|
package com.android.server.wm;
|
||||||
|
|
||||||
|
import static com.android.server.wm.WindowManagerService.TAG;
|
||||||
|
|
||||||
import android.util.EventLog;
|
import android.util.EventLog;
|
||||||
import com.android.server.EventLogTags;
|
import android.util.Slog;
|
||||||
|
|
||||||
class Task {
|
class Task {
|
||||||
// private final String TAG = "TaskGroup";
|
|
||||||
TaskStack mStack;
|
TaskStack mStack;
|
||||||
final AppTokenList mAppTokens = new AppTokenList();
|
final AppTokenList mAppTokens = new AppTokenList();
|
||||||
final int taskId;
|
final int taskId;
|
||||||
@ -39,17 +40,24 @@ class Task {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void addAppToken(int addPos, AppWindowToken wtoken) {
|
void addAppToken(int addPos, AppWindowToken wtoken) {
|
||||||
|
final int lastPos = mAppTokens.size();
|
||||||
|
if (addPos > lastPos) {
|
||||||
|
// We lost an app token. Don't crash though.
|
||||||
|
Slog.e(TAG, "Task.addAppToken: Out of bounds attempt token=" + wtoken + " addPos="
|
||||||
|
+ addPos + " lastPos=" + lastPos);
|
||||||
|
addPos = lastPos;
|
||||||
|
}
|
||||||
mAppTokens.add(addPos, wtoken);
|
mAppTokens.add(addPos, wtoken);
|
||||||
|
mDeferRemoval = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean removeAppToken(AppWindowToken wtoken) {
|
boolean removeAppToken(AppWindowToken wtoken) {
|
||||||
mAppTokens.remove(wtoken);
|
boolean removed = mAppTokens.remove(wtoken);
|
||||||
if (mAppTokens.size() == 0) {
|
if (mAppTokens.size() == 0) {
|
||||||
EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, taskId,
|
EventLog.writeEvent(com.android.server.EventLogTags.WM_TASK_REMOVED, taskId,
|
||||||
"removeAppToken: last token");
|
"removeAppToken: last token");
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
return removed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3486,7 +3486,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
|
|
||||||
Task task = mTaskIdToTask.get(taskId);
|
Task task = mTaskIdToTask.get(taskId);
|
||||||
if (task == null) {
|
if (task == null) {
|
||||||
task = createTask(taskId, stackId, userId, atoken);
|
createTask(taskId, stackId, userId, atoken);
|
||||||
} else {
|
} else {
|
||||||
task.addAppToken(addPos, atoken);
|
task.addAppToken(addPos, atoken);
|
||||||
}
|
}
|
||||||
@ -3839,27 +3839,23 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
synchronized(mWindowMap) {
|
synchronized(mWindowMap) {
|
||||||
boolean changed = false;
|
final AppWindowToken newFocus;
|
||||||
if (token == null) {
|
if (token == null) {
|
||||||
if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "Clearing focused app, was " + mFocusedApp);
|
if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "Clearing focused app, was " + mFocusedApp);
|
||||||
changed = mFocusedApp != null;
|
newFocus = null;
|
||||||
mFocusedApp = null;
|
|
||||||
if (changed) {
|
|
||||||
mInputMonitor.setFocusedAppLw(null);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
AppWindowToken newFocus = findAppWindowToken(token);
|
newFocus = findAppWindowToken(token);
|
||||||
if (newFocus == null) {
|
if (newFocus == null) {
|
||||||
Slog.w(TAG, "Attempted to set focus to non-existing app token: " + token);
|
Slog.w(TAG, "Attempted to set focus to non-existing app token: " + token);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
changed = mFocusedApp != newFocus;
|
|
||||||
if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "Set focused app to: " + newFocus
|
if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "Set focused app to: " + newFocus
|
||||||
+ " old focus=" + mFocusedApp + " moveFocusNow=" + moveFocusNow);
|
+ " old focus=" + mFocusedApp + " moveFocusNow=" + moveFocusNow);
|
||||||
mFocusedApp = newFocus;
|
|
||||||
if (changed) {
|
|
||||||
mInputMonitor.setFocusedAppLw(newFocus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final boolean changed = mFocusedApp != newFocus;
|
||||||
|
if (changed) {
|
||||||
|
mFocusedApp = newFocus;
|
||||||
|
mInputMonitor.setFocusedAppLw(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moveFocusNow && changed) {
|
if (moveFocusNow && changed) {
|
||||||
@ -4543,11 +4539,9 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
void removeAppFromTaskLocked(AppWindowToken wtoken) {
|
void removeAppFromTaskLocked(AppWindowToken wtoken) {
|
||||||
final Task task = mTaskIdToTask.get(wtoken.groupId);
|
final Task task = mTaskIdToTask.get(wtoken.groupId);
|
||||||
if (task != null) {
|
if (task != null) {
|
||||||
task.removeAppToken(wtoken);
|
if (!task.removeAppToken(wtoken)) {
|
||||||
// Remove after bug resolved.
|
Slog.e(TAG, "removeAppFromTaskLocked: token=" + wtoken + " not found.");
|
||||||
Slog.d(TAG, "removeAppFromTaskLocked: wtoken=" + wtoken
|
}
|
||||||
+ " numTokens left=" + task.mAppTokens.size()
|
|
||||||
+ " Callers=" + Debug.getCallers(5));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4583,6 +4577,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
TAG, "Removing app " + wtoken + " delayed=" + delayed
|
TAG, "Removing app " + wtoken + " delayed=" + delayed
|
||||||
+ " animation=" + wtoken.mAppAnimator.animation
|
+ " animation=" + wtoken.mAppAnimator.animation
|
||||||
+ " animating=" + wtoken.mAppAnimator.animating);
|
+ " animating=" + wtoken.mAppAnimator.animating);
|
||||||
|
if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "removeAppToken: "
|
||||||
|
+ wtoken + " delayed=" + delayed + " Callers=" + Debug.getCallers(4));
|
||||||
final TaskStack stack = mTaskIdToTask.get(wtoken.groupId).mStack;
|
final TaskStack stack = mTaskIdToTask.get(wtoken.groupId).mStack;
|
||||||
if (delayed) {
|
if (delayed) {
|
||||||
// set the token aside because it has an active animation to be finished
|
// set the token aside because it has an active animation to be finished
|
||||||
@ -4598,9 +4594,6 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
wtoken.mAppAnimator.animating = false;
|
wtoken.mAppAnimator.animating = false;
|
||||||
removeAppFromTaskLocked(wtoken);
|
removeAppFromTaskLocked(wtoken);
|
||||||
}
|
}
|
||||||
if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
|
|
||||||
"removeAppToken: " + wtoken);
|
|
||||||
|
|
||||||
|
|
||||||
wtoken.removed = true;
|
wtoken.removed = true;
|
||||||
if (wtoken.startingData != null) {
|
if (wtoken.startingData != null) {
|
||||||
|
Reference in New Issue
Block a user