diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2017-07-14 11:39:52 -0700 |
---|---|---|
committer | Fyodor Kupolov <fkupolov@google.com> | 2017-07-24 18:44:33 +0000 |
commit | 37b966d5bdde09fd9dd680529c35cee0faeaca5d (patch) | |
tree | 1273a367badd49e4d6f6db6ecbe4067c1bf85d9d | |
parent | bfa0ed51105dc3b1a65e25201ffba90a3aabf9dc (diff) |
Handle onUnlockUser on fg thread
AppWidgetService.onUserUnlocked can block ActivityManager thread
for 500+ ms. The code is guarded by mLock, so it's safe to simply
offload it to the worker thread without additional synchronization.
Test: Setup widgets/rebooted the device and unlocked
Test: Create/switch to guest user + setup widgets
Bug: 63389529
Change-Id: Ib3bc76f79bdbc707c0ac270d7fc35c8b27af9af0
-rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetService.java | 3 | ||||
-rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java | 3 |
2 files changed, 5 insertions, 1 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java index 9cc53f02de1c..c9c7adc45697 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java @@ -19,6 +19,7 @@ package com.android.server.appwidget; import android.content.Context; import com.android.server.AppWidgetBackupBridge; +import com.android.server.FgThread; import com.android.server.SystemService; /** @@ -48,7 +49,7 @@ public class AppWidgetService extends SystemService { @Override public void onUnlockUser(int userHandle) { - mImpl.onUserUnlocked(userHandle); + FgThread.getHandler().post(() -> mImpl.onUserUnlocked(userHandle)); } @Override diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 7ebda358afb4..80b54770e4b7 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -2645,6 +2645,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku Slog.w(TAG, "User " + userId + " is no longer unlocked - exiting"); return; } + long time = SystemClock.elapsedRealtime(); synchronized (mLock) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "appwidget ensure"); ensureGroupStateLoadedLocked(userId); @@ -2673,6 +2674,8 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } } } + Slog.i(TAG, "Async processing of onUserUnlocked u" + userId + " took " + + (SystemClock.elapsedRealtime() - time) + " ms"); } // only call from initialization -- it assumes that the data structures are all empty |