summaryrefslogtreecommitdiff
path: root/services/appwidget
diff options
context:
space:
mode:
authorFyodor Kupolov <fkupolov@google.com>2017-07-14 11:39:52 -0700
committerFyodor Kupolov <fkupolov@google.com>2017-07-24 18:44:33 +0000
commit37b966d5bdde09fd9dd680529c35cee0faeaca5d (patch)
tree1273a367badd49e4d6f6db6ecbe4067c1bf85d9d /services/appwidget
parentbfa0ed51105dc3b1a65e25201ffba90a3aabf9dc (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
Diffstat (limited to 'services/appwidget')
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetService.java3
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java3
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