diff options
19 files changed, 80 insertions, 73 deletions
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 9cf0d2a3a36a..1f8cf8ac6d1d 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -341,7 +341,8 @@ public abstract class ActivityManagerInternal { /** @see com.android.server.am.ActivityManagerService#monitor */ public abstract void monitor(); - /** Input dispatch timeout to a window, start the ANR process. */ + /** Input dispatch timeout to a window, start the ANR process. Return the timeout extension, + * in milliseconds, or 0 to abort dispatch. */ public abstract long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason); public abstract boolean inputDispatchingTimedOut(Object proc, String activityShortComponentName, ApplicationInfo aInfo, String parentShortComponentName, Object parentProc, diff --git a/core/java/android/view/InputApplicationHandle.java b/core/java/android/view/InputApplicationHandle.java index 3d05e2a0b9f6..108345e6db0e 100644 --- a/core/java/android/view/InputApplicationHandle.java +++ b/core/java/android/view/InputApplicationHandle.java @@ -34,7 +34,7 @@ public final class InputApplicationHandle { public String name; // Dispatching timeout. - public long dispatchingTimeoutNanos; + public long dispatchingTimeoutMillis; public final IBinder token; @@ -46,7 +46,7 @@ public final class InputApplicationHandle { public InputApplicationHandle(InputApplicationHandle handle) { this.token = handle.token; - this.dispatchingTimeoutNanos = handle.dispatchingTimeoutNanos; + this.dispatchingTimeoutMillis = handle.dispatchingTimeoutMillis; this.name = handle.name; } diff --git a/core/java/android/view/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java index a7e0305f2c09..e341845277d4 100644 --- a/core/java/android/view/InputWindowHandle.java +++ b/core/java/android/view/InputWindowHandle.java @@ -50,7 +50,7 @@ public final class InputWindowHandle { public int layoutParamsType; // Dispatching timeout. - public long dispatchingTimeoutNanos; + public long dispatchingTimeoutMillis; // Window frame. public int frameLeft; diff --git a/core/jni/android_hardware_input_InputApplicationHandle.cpp b/core/jni/android_hardware_input_InputApplicationHandle.cpp index ff73c74e125e..7756a62df655 100644 --- a/core/jni/android_hardware_input_InputApplicationHandle.cpp +++ b/core/jni/android_hardware_input_InputApplicationHandle.cpp @@ -30,7 +30,7 @@ namespace android { static struct { jfieldID ptr; jfieldID name; - jfieldID dispatchingTimeoutNanos; + jfieldID dispatchingTimeoutMillis; jfieldID token; } gInputApplicationHandleClassInfo; @@ -61,8 +61,8 @@ bool NativeInputApplicationHandle::updateInfo() { mInfo.name = getStringField(env, obj, gInputApplicationHandleClassInfo.name, "<null>"); - mInfo.dispatchingTimeoutNanos = - env->GetLongField(obj, gInputApplicationHandleClassInfo.dispatchingTimeoutNanos); + mInfo.dispatchingTimeoutMillis = + env->GetLongField(obj, gInputApplicationHandleClassInfo.dispatchingTimeoutMillis); jobject tokenObj = env->GetObjectField(obj, gInputApplicationHandleClassInfo.token); @@ -144,9 +144,8 @@ int register_android_view_InputApplicationHandle(JNIEnv* env) { GET_FIELD_ID(gInputApplicationHandleClassInfo.name, clazz, "name", "Ljava/lang/String;"); - GET_FIELD_ID(gInputApplicationHandleClassInfo.dispatchingTimeoutNanos, - clazz, - "dispatchingTimeoutNanos", "J"); + GET_FIELD_ID(gInputApplicationHandleClassInfo.dispatchingTimeoutMillis, clazz, + "dispatchingTimeoutMillis", "J"); GET_FIELD_ID(gInputApplicationHandleClassInfo.token, clazz, "token", "Landroid/os/IBinder;"); diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index 796c5c4cc521..ecdba3fcb023 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -47,7 +47,7 @@ static struct { jfieldID name; jfieldID layoutParamsFlags; jfieldID layoutParamsType; - jfieldID dispatchingTimeoutNanos; + jfieldID dispatchingTimeoutMillis; jfieldID frameLeft; jfieldID frameTop; jfieldID frameRight; @@ -118,8 +118,8 @@ bool NativeInputWindowHandle::updateInfo() { env->GetIntField(obj, gInputWindowHandleClassInfo.layoutParamsFlags)); mInfo.type = static_cast<InputWindowInfo::Type>( env->GetIntField(obj, gInputWindowHandleClassInfo.layoutParamsType)); - mInfo.dispatchingTimeout = decltype(mInfo.dispatchingTimeout)( - env->GetLongField(obj, gInputWindowHandleClassInfo.dispatchingTimeoutNanos)); + mInfo.dispatchingTimeout = std::chrono::milliseconds( + env->GetLongField(obj, gInputWindowHandleClassInfo.dispatchingTimeoutMillis)); mInfo.frameLeft = env->GetIntField(obj, gInputWindowHandleClassInfo.frameLeft); mInfo.frameTop = env->GetIntField(obj, @@ -293,8 +293,8 @@ int register_android_view_InputWindowHandle(JNIEnv* env) { GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsType, clazz, "layoutParamsType", "I"); - GET_FIELD_ID(gInputWindowHandleClassInfo.dispatchingTimeoutNanos, clazz, - "dispatchingTimeoutNanos", "J"); + GET_FIELD_ID(gInputWindowHandleClassInfo.dispatchingTimeoutMillis, clazz, + "dispatchingTimeoutMillis", "J"); GET_FIELD_ID(gInputWindowHandleClassInfo.frameLeft, clazz, "frameLeft", "I"); diff --git a/services/core/Android.bp b/services/core/Android.bp index 1093515ac525..e76ec743661c 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -79,6 +79,7 @@ java_library_static { ":framework_native_aidl", ":gsiservice_aidl", ":idmap2_aidl", + ":inputconstants_aidl", ":installd_aidl", ":storaged_aidl", ":vold_aidl", diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index c187772df6e4..e546a2812caa 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -41,6 +41,7 @@ import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY; import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.FactoryTest.FACTORY_TEST_OFF; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_HIGH; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_NORMAL; @@ -130,10 +131,10 @@ import static com.android.server.wm.ActivityTaskManagerService.DUMP_LASTANR_TRAC import static com.android.server.wm.ActivityTaskManagerService.DUMP_RECENTS_CMD; import static com.android.server.wm.ActivityTaskManagerService.DUMP_RECENTS_SHORT_CMD; import static com.android.server.wm.ActivityTaskManagerService.DUMP_STARTER_CMD; -import static com.android.server.wm.ActivityTaskManagerService.KEY_DISPATCHING_TIMEOUT_MS; import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_NONE; import static com.android.server.wm.ActivityTaskManagerService.relaunchReasonToString; + import android.Manifest; import android.Manifest.permission; import android.annotation.BroadcastBehavior; @@ -18353,19 +18354,20 @@ public class ActivityManagerService extends IActivityManager.Stub throw new SecurityException("Requires permission " + FILTER_EVENTS); } ProcessRecord proc; - long timeout; + long timeoutMillis; synchronized (this) { synchronized (mPidsSelfLocked) { proc = mPidsSelfLocked.get(pid); } - timeout = proc != null ? proc.getInputDispatchingTimeout() : KEY_DISPATCHING_TIMEOUT_MS; + timeoutMillis = proc != null ? proc.getInputDispatchingTimeoutMillis() : + DEFAULT_DISPATCHING_TIMEOUT_MILLIS; } if (inputDispatchingTimedOut(proc, null, null, null, null, aboveSystem, reason)) { - return -1; + return 0; } - return timeout; + return timeoutMillis; } /** diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index cd4302bb42fa..1647fdaa57b6 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -1522,8 +1522,8 @@ class ProcessRecord implements WindowProcessListener { } } - public long getInputDispatchingTimeout() { - return mWindowProcessController.getInputDispatchingTimeout(); + public long getInputDispatchingTimeoutMillis() { + return mWindowProcessController.getInputDispatchingTimeoutMillis(); } public int getProcessClassEnum() { diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index b72ff2db7e6c..9c0e2b290007 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -168,7 +168,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLAS import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_FREE_RESIZE; import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_NONE; import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_WINDOWING_MODE_RESIZE; -import static com.android.server.wm.ActivityTaskManagerService.getInputDispatchingTimeoutLocked; +import static com.android.server.wm.ActivityTaskManagerService.getInputDispatchingTimeoutMillisLocked; import static com.android.server.wm.IdentifierProto.HASH_CODE; import static com.android.server.wm.IdentifierProto.TITLE; import static com.android.server.wm.IdentifierProto.USER_ID; @@ -587,8 +587,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A */ private boolean mOccludesParent; - // The input dispatching timeout for this application token in nanoseconds. - long mInputDispatchingTimeoutNanos; + // The input dispatching timeout for this application token in milliseconds. + long mInputDispatchingTimeoutMillis; private boolean mShowWhenLocked; private boolean mInheritShownWhenLocked; @@ -1245,7 +1245,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (oldParent == null && newParent != null) { // First time we are adding the activity to the system. mVoiceInteraction = newTask.voiceSession != null; - mInputDispatchingTimeoutNanos = getInputDispatchingTimeoutLocked(this) * 1000000L; + mInputDispatchingTimeoutMillis = getInputDispatchingTimeoutMillisLocked(this); // TODO(b/36505427): Maybe this call should be moved inside // updateOverrideConfiguration() @@ -5651,8 +5651,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } else { // In this case another process added windows using this activity token. So, we call the // generic service input dispatch timed out method so that the right process is blamed. - return mAtmService.mAmInternal.inputDispatchingTimedOut( - windowPid, false /* aboveSystem */, reason) < 0; + long timeoutMillis = mAtmService.mAmInternal.inputDispatchingTimedOut( + windowPid, false /* aboveSystem */, reason); + return timeoutMillis <= 0; } } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 5534b8c257f0..3edb690fd906 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -50,6 +50,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.FactoryTest.FACTORY_TEST_HIGH_LEVEL; import static android.os.FactoryTest.FACTORY_TEST_LOW_LEVEL; import static android.os.FactoryTest.FACTORY_TEST_OFF; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.os.Process.FIRST_APPLICATION_UID; import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; @@ -314,10 +315,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { private static final String TAG_LOCKTASK = TAG + POSTFIX_LOCKTASK; private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION; - // How long we wait until we timeout on key dispatching. - public static final int KEY_DISPATCHING_TIMEOUT_MS = 5 * 1000; // How long we wait until we timeout on key dispatching during instrumentation. - static final int INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MS = 60 * 1000; + static final long INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MILLIS = 60 * 1000; // How long we permit background activity starts after an activity in the process // started or finished. static final long ACTIVITY_BG_START_GRACE_PERIOD_MS = 10 * 1000; @@ -5376,15 +5375,18 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } - static long getInputDispatchingTimeoutLocked(ActivityRecord r) { + static long getInputDispatchingTimeoutMillisLocked(ActivityRecord r) { if (r == null || !r.hasProcess()) { - return KEY_DISPATCHING_TIMEOUT_MS; + return DEFAULT_DISPATCHING_TIMEOUT_MILLIS; } - return getInputDispatchingTimeoutLocked(r.app); + return getInputDispatchingTimeoutMillisLocked(r.app); } - private static long getInputDispatchingTimeoutLocked(WindowProcessController r) { - return r != null ? r.getInputDispatchingTimeout() : KEY_DISPATCHING_TIMEOUT_MS; + private static long getInputDispatchingTimeoutMillisLocked(WindowProcessController r) { + if (r == null) { + return DEFAULT_DISPATCHING_TIMEOUT_MILLIS; + } + return r.getInputDispatchingTimeoutMillis(); } /** diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index f840d9273f60..22dd1d332345 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -16,6 +16,8 @@ package com.android.server.wm; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; + import static com.android.server.wm.DragDropController.MSG_ANIMATION_END; import static com.android.server.wm.DragDropController.MSG_DRAG_END_TIMEOUT; import static com.android.server.wm.DragDropController.MSG_TEAR_DOWN_DRAG_AND_DROP_INPUT; @@ -271,8 +273,7 @@ class DragState { mDragApplicationHandle = new InputApplicationHandle(new Binder()); mDragApplicationHandle.name = "drag"; - mDragApplicationHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + mDragApplicationHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, display.getDisplayId()); @@ -280,8 +281,7 @@ class DragState { mDragWindowHandle.token = mServerChannel.getToken(); mDragWindowHandle.layoutParamsFlags = 0; mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG; - mDragWindowHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + mDragWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; mDragWindowHandle.visible = true; mDragWindowHandle.canReceiveKeys = false; mDragWindowHandle.hasFocus = true; diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index 852b367259c1..3b24584b0357 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -16,6 +16,8 @@ package com.android.server.wm; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; + import android.graphics.Point; import android.graphics.Rect; import android.os.Binder; @@ -69,16 +71,14 @@ class InputConsumerImpl implements IBinder.DeathRecipient { mApplicationHandle = new InputApplicationHandle(new Binder()); mApplicationHandle.name = name; - mApplicationHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + mApplicationHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; mWindowHandle = new InputWindowHandle(mApplicationHandle, displayId); mWindowHandle.name = name; mWindowHandle.token = mServerChannel.getToken(); mWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; mWindowHandle.layoutParamsFlags = 0; - mWindowHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + mWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; mWindowHandle.visible = true; mWindowHandle.canReceiveKeys = false; mWindowHandle.hasFocus = false; diff --git a/services/core/java/com/android/server/wm/InputManagerCallback.java b/services/core/java/com/android/server/wm/InputManagerCallback.java index 9c4ac890fed8..5e1cbc3158c1 100644 --- a/services/core/java/com/android/server/wm/InputManagerCallback.java +++ b/services/core/java/com/android/server/wm/InputManagerCallback.java @@ -258,18 +258,14 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal if (!abort) { // The activity manager declined to abort dispatching. // Wait a bit longer and timeout again later. - return activity.mInputDispatchingTimeoutNanos; + return TimeUnit.MILLISECONDS.toNanos(activity.mInputDispatchingTimeoutMillis); } } else if (windowState != null || windowPid != INVALID_PID) { // Notify the activity manager about the timeout and let it decide whether // to abort dispatching or keep waiting. - long timeout = mService.mAmInternal.inputDispatchingTimedOut(windowPid, aboveSystem, - reason); - if (timeout >= 0) { - // The activity manager declined to abort dispatching. - // Wait a bit longer and timeout again later. - return timeout * 1000000L; // nanoseconds - } + long timeoutMillis = + mService.mAmInternal.inputDispatchingTimedOut(windowPid, aboveSystem, reason); + return TimeUnit.MILLISECONDS.toNanos(timeoutMillis); } return 0; // abort dispatching } diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 20f1b9f53013..791f47128be0 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -269,7 +269,7 @@ final class InputMonitor { flags = child.getSurfaceTouchableRegion(inputWindowHandle, flags); inputWindowHandle.layoutParamsFlags = flags; inputWindowHandle.layoutParamsType = type; - inputWindowHandle.dispatchingTimeoutNanos = child.getInputDispatchingTimeoutNanos(); + inputWindowHandle.dispatchingTimeoutMillis = child.getInputDispatchingTimeoutMillis(); inputWindowHandle.visible = isVisible; inputWindowHandle.canReceiveKeys = child.canReceiveKeys(); inputWindowHandle.hasFocus = hasFocus; @@ -385,7 +385,7 @@ final class InputMonitor { } else { final InputApplicationHandle handle = newApp.mInputApplicationHandle; handle.name = newApp.toString(); - handle.dispatchingTimeoutNanos = newApp.mInputDispatchingTimeoutNanos; + handle.dispatchingTimeoutMillis = newApp.mInputDispatchingTimeoutMillis; mService.mInputManager.setFocusedApplication(mDisplayId, handle); } @@ -570,8 +570,7 @@ final class InputMonitor { final String name, final int type, final boolean isVisible) { inputWindowHandle.name = name; inputWindowHandle.layoutParamsType = type; - inputWindowHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + inputWindowHandle.dispatchingTimeoutMillis = 0; // it should never receive input inputWindowHandle.visible = isVisible; inputWindowHandle.canReceiveKeys = false; inputWindowHandle.hasFocus = false; diff --git a/services/core/java/com/android/server/wm/Letterbox.java b/services/core/java/com/android/server/wm/Letterbox.java index 28dcbcdf3cc7..dccd3a669827 100644 --- a/services/core/java/com/android/server/wm/Letterbox.java +++ b/services/core/java/com/android/server/wm/Letterbox.java @@ -16,6 +16,7 @@ package com.android.server.wm; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.view.SurfaceControl.HIDDEN; import android.graphics.Point; @@ -217,8 +218,7 @@ public class Letterbox { | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_SLIPPERY; mWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; - mWindowHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + mWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; mWindowHandle.visible = true; mWindowHandle.ownerPid = Process.myPid(); mWindowHandle.ownerUid = Process.myUid(); diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java index c68b660bb76f..3fbc0373e1a9 100644 --- a/services/core/java/com/android/server/wm/TaskPositioner.java +++ b/services/core/java/com/android/server/wm/TaskPositioner.java @@ -18,6 +18,7 @@ package com.android.server.wm; import static android.app.ActivityTaskManager.RESIZE_MODE_USER; import static android.app.ActivityTaskManager.RESIZE_MODE_USER_FORCED; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_BOTTOM; @@ -230,8 +231,8 @@ class TaskPositioner implements IBinder.DeathRecipient { mDragApplicationHandle = new InputApplicationHandle(new Binder()); mDragApplicationHandle.name = TAG; - mDragApplicationHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + mDragApplicationHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; + mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, displayContent.getDisplayId()); @@ -239,8 +240,7 @@ class TaskPositioner implements IBinder.DeathRecipient { mDragWindowHandle.token = mServerChannel.getToken(); mDragWindowHandle.layoutParamsFlags = 0; mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG; - mDragWindowHandle.dispatchingTimeoutNanos = - WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + mDragWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; mDragWindowHandle.visible = true; mDragWindowHandle.canReceiveKeys = false; mDragWindowHandle.hasFocus = true; diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index ede92f0cad41..0b1d6bc0adfd 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -35,6 +35,7 @@ import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT; import static android.content.pm.PackageManager.FEATURE_PC; import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.os.Process.INVALID_UID; import static android.os.Process.SYSTEM_UID; import static android.os.Process.myPid; @@ -366,9 +367,6 @@ public class WindowManagerService extends IWindowManager.Stub // proceding with safe mode detection. private static final int INPUT_DEVICES_READY_FOR_SAFE_MODE_DETECTION_TIMEOUT_MILLIS = 1000; - // Default input dispatching timeout in nanoseconds. - static final long DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS = 5000 * 1000000L; - // Poll interval in milliseconds for watching boot animation finished. // TODO(b/159045990) Migrate to SystemService.waitForState with dedicated thread. private static final int BOOT_ANIMATION_POLL_INTERVAL = 50; @@ -8090,7 +8088,7 @@ public class WindowManagerService extends IWindowManager.Stub | LayoutParams.FLAG_SLIPPERY); h.layoutParamsFlags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | sanitizedFlags; h.layoutParamsType = type; - h.dispatchingTimeoutNanos = DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + h.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS; h.canReceiveKeys = false; h.hasFocus = false; h.hasWallpaper = false; diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index df59c56f5aff..a58c5646858b 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -19,6 +19,7 @@ package com.android.server.wm; import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.os.Build.VERSION_CODES.Q; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.view.Display.INVALID_DISPLAY; import static com.android.server.am.ActivityManagerService.MY_PID; @@ -30,8 +31,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_RELEA import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM; import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.ActivityTaskManagerService.ACTIVITY_BG_START_GRACE_PERIOD_MS; -import static com.android.server.wm.ActivityTaskManagerService.INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MS; -import static com.android.server.wm.ActivityTaskManagerService.KEY_DISPATCHING_TIMEOUT_MS; +import static com.android.server.wm.ActivityTaskManagerService.INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MILLIS; import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_NONE; import static com.android.server.wm.Task.ActivityState.DESTROYED; import static com.android.server.wm.Task.ActivityState.DESTROYING; @@ -41,6 +41,7 @@ import static com.android.server.wm.Task.ActivityState.RESUMED; import static com.android.server.wm.Task.ActivityState.STARTED; import static com.android.server.wm.Task.ActivityState.STOPPING; + import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; @@ -1064,10 +1065,16 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio return RELAUNCH_REASON_NONE; } - public long getInputDispatchingTimeout() { + /** + * Get the current dispatching timeout. If instrumentation is currently taking place, return + * a longer value. Shorter timeout is returned otherwise. + * @return The timeout in milliseconds + */ + public long getInputDispatchingTimeoutMillis() { synchronized (mAtm.mGlobalLock) { return isInstrumenting() || isUsingWrapper() - ? INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MS : KEY_DISPATCHING_TIMEOUT_MS; + ? INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MILLIS : + DEFAULT_DISPATCHING_TIMEOUT_MILLIS; } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index ef78420a3646..ab78e74b9e37 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -25,6 +25,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.isSplitScreenWindowingMode; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.graphics.GraphicsProtos.dumpPointProto; +import static android.os.IInputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS; import static android.os.PowerManager.DRAW_WAKE_LOCK; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.InsetsState.ITYPE_IME; @@ -1635,10 +1636,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } - public long getInputDispatchingTimeoutNanos() { + public long getInputDispatchingTimeoutMillis() { return mActivityRecord != null - ? mActivityRecord.mInputDispatchingTimeoutNanos - : WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; + ? mActivityRecord.mInputDispatchingTimeoutMillis + : DEFAULT_DISPATCHING_TIMEOUT_MILLIS; } @Override |