From 2c75eb86a1e561e46acc7d8914a35b876e84b316 Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Mon, 13 Jul 2020 11:49:43 -0700 Subject: [PATCH] Moving AppStandbyController to the module background thread. Move AppStandbyController's handler to use the JS mainline module's background thread looper to decouple it from the rest of the system and from BackgroundThread. Bug: 160873128 Test: atest CtsUsageStatsTestCases:UsageStatsTest Test: atest FrameworksServicesTests:AppIdleHistoryTests Test: atest FrameworksServicesTests:AppStandbyControllerTes Change-Id: Ic64ccf6b4437060cb4ea83b1c5c6053421081ef8 --- .../java/com/android/server/usage/AppStandbyInternal.java | 8 +++----- .../com/android/server/usage/AppStandbyController.java | 5 +++-- .../java/com/android/server/usage/UsageStatsService.java | 3 +-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java index 2a4081ae16f82..398ccb69fbe88 100644 --- a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java +++ b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java @@ -7,7 +7,6 @@ import android.app.usage.UsageEvents; import android.app.usage.UsageStatsManager.StandbyBuckets; import android.app.usage.UsageStatsManager.SystemForcedReasons; import android.content.Context; -import android.os.Looper; import android.util.IndentingPrintWriter; import java.io.PrintWriter; @@ -21,13 +20,12 @@ public interface AppStandbyInternal { * TODO AppStandbyController should probably be a binder service, and then we shouldn't need * this method. */ - static AppStandbyInternal newAppStandbyController(ClassLoader loader, Context context, - Looper looper) { + static AppStandbyInternal newAppStandbyController(ClassLoader loader, Context context) { try { final Class clazz = Class.forName("com.android.server.usage.AppStandbyController", true, loader); - final Constructor ctor = clazz.getConstructor(Context.class, Looper.class); - return (AppStandbyInternal) ctor.newInstance(context, looper); + final Constructor ctor = clazz.getConstructor(Context.class); + return (AppStandbyInternal) ctor.newInstance(context); } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException | ClassNotFoundException e) { throw new RuntimeException("Unable to instantiate AppStandbyController!", e); diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java index 5059e09796f8a..24436ea5180b6 100644 --- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java @@ -110,6 +110,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IBatteryStats; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ConcurrentUtils; +import com.android.server.JobSchedulerBackgroundThread; import com.android.server.LocalServices; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.usage.AppIdleHistory.AppUsageHistory; @@ -418,8 +419,8 @@ public class AppStandbyController implements AppStandbyInternal { } } - public AppStandbyController(Context context, Looper looper) { - this(new Injector(context, looper)); + public AppStandbyController(Context context) { + this(new Injector(context, JobSchedulerBackgroundThread.get().getLooper())); } AppStandbyController(Injector injector) { diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 321657d5d626a..9b18ec644ceb0 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -215,8 +215,7 @@ public class UsageStatsService extends SystemService implements mHandler = new H(BackgroundThread.get().getLooper()); mAppStandby = AppStandbyInternal.newAppStandbyController( - UsageStatsService.class.getClassLoader(), getContext(), - BackgroundThread.get().getLooper()); + UsageStatsService.class.getClassLoader(), getContext()); mAppTimeLimit = new AppTimeLimitController( new AppTimeLimitController.TimeLimitCallbackListener() {