From 4e59db328d8b0cc163d2e3eb0f7f3a108f20a58d Mon Sep 17 00:00:00 2001 From: Mark Lu Date: Fri, 6 Nov 2015 15:26:15 +0800 Subject: [PATCH] Fix system watchdog timeout when reading too many usage events. Symptom: As issue link: https://code.google.com/p/android/issues/detail?id=193100 RootCause: UsageStatsService.onDisplayChanged executed in system main thread, If calling UsageStatsManager.queryEvents with too many events before it (i.e. in daily usage event file, too many activity resume / pause events or configuration change during monkey test), System will be blocked then watchdog timeout. Solution: Let display listener executed in background thread handler Change-Id: Ic894d112612400ed8fb7ba843b3309fdc4f66fe1 --- .../usage/java/com/android/server/usage/UsageStatsService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 4146c1c0111de..c518f77a07161 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -218,7 +218,7 @@ public class UsageStatsService extends SystemService implements synchronized (this) { mScreenOnTime = readScreenOnTimeLocked(); } - mDisplayManager.registerDisplayListener(mDisplayListener, null); + mDisplayManager.registerDisplayListener(mDisplayListener, mHandler); synchronized (this) { updateDisplayLocked(); }