summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2019-11-01 22:08:50 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-11-01 22:08:50 +0000
commitd5d07c8d0c36ae070501aa285866dd02cb347f37 (patch)
treec6cbe2fa012f9c6348f944e30ffb8d77b219dfeb /core/java/android
parentcdc4a55cd1461474aacc6fc3a9b80e74d122a7ba (diff)
parent152742f27a52f352c0cab736e6279f5115e27d6b (diff)
Merge "Undo the jobscheduler / device idle initialization with callbacks"
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/os/BatteryStats.java48
-rw-r--r--core/java/android/os/PowerManager.java22
2 files changed, 19 insertions, 51 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index fa09cf0bb4e3..3ae1fe63f6cc 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -21,6 +21,7 @@ import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP;
import android.annotation.IntDef;
import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
+import android.app.job.JobParameters;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.server.ServerProtoEnums;
@@ -44,7 +45,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.location.gnssmetrics.GnssMetrics;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
-import com.android.internal.util.Preconditions;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -58,7 +58,6 @@ import java.util.Formatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.function.Function;
/**
* A class providing access to battery usage statistics, including information on
@@ -419,40 +418,6 @@ public abstract class BatteryStats implements Parcelable {
};
/**
- * "Job stop reason codes" from the job scheduler subsystem, which we can't refer to from this
- * class, so we initialize it from the job scheduler side at runtime using
- * {@link #setJobStopReasons}.
- */
- private static int[] sJobStopReasonCodes = {0};
-
- /**
- * A function that converts the "job stop reason codes" to their names.
- *
- * Similarly to {@link #sJobStopReasonCodes} it's initialized by the job scheduler subsystem
- * using {@link #setJobStopReasons}.
- */
- private static Function<Integer, String> sJobStopReasonNameConverter = (x) -> "unknown";
-
- /**
- * Set by the job scheduler subsystem to "push" job stop reasons, and a function that returns
- * the "name" of each code. We do it this way to remove a build time dependency from this
- * class to the job scheduler framework code.
- *
- * Note the passed array will be used as-is, without copying. The caller must not change
- * the array it passed to it.
- *
- * @hide
- */
- public static void setJobStopReasons(int[] reasonCodes,
- Function<Integer, String> jobStopReasonNameConverter) {
- Preconditions.checkArgument(reasonCodes.length > 0);
- Preconditions.checkArgument(jobStopReasonNameConverter != null);
-
- sJobStopReasonCodes = reasonCodes;
- sJobStopReasonNameConverter = jobStopReasonNameConverter;
- }
-
- /**
* State for keeping track of counting information.
*/
public static abstract class Counter {
@@ -4339,15 +4304,16 @@ public abstract class BatteryStats implements Parcelable {
}
}
- final Object[] jobCompletionArgs = new Object[sJobStopReasonCodes.length + 1];
+ final int[] jobStopReasonCodes = JobParameters.getJobStopReasonCodes();
+ final Object[] jobCompletionArgs = new Object[jobStopReasonCodes.length + 1];
final ArrayMap<String, SparseIntArray> completions = u.getJobCompletionStats();
for (int ic=completions.size()-1; ic>=0; ic--) {
SparseIntArray types = completions.valueAt(ic);
if (types != null) {
jobCompletionArgs[0] = "\"" + completions.keyAt(ic) + "\"";
- for (int i = 0; i < sJobStopReasonCodes.length; i++) {
- jobCompletionArgs[i + 1] = types.get(sJobStopReasonCodes[i], 0);
+ for (int i = 0; i < jobStopReasonCodes.length; i++) {
+ jobCompletionArgs[i + 1] = types.get(jobStopReasonCodes[i], 0);
}
dumpLine(pw, uid, category, JOB_COMPLETION_DATA, jobCompletionArgs);
@@ -5967,7 +5933,7 @@ public abstract class BatteryStats implements Parcelable {
pw.print(":");
for (int it=0; it<types.size(); it++) {
pw.print(" ");
- pw.print(sJobStopReasonNameConverter.apply(types.keyAt(it)));
+ pw.print(JobParameters.getReasonCodeDescription(types.keyAt(it)));
pw.print("(");
pw.print(types.valueAt(it));
pw.print("x)");
@@ -7565,7 +7531,7 @@ public abstract class BatteryStats implements Parcelable {
proto.write(UidProto.JobCompletion.NAME, completions.keyAt(ic));
- for (int r : sJobStopReasonCodes) {
+ for (int r : JobParameters.getJobStopReasonCodes()) {
long rToken = proto.start(UidProto.JobCompletion.REASON_COUNT);
proto.write(UidProto.JobCompletion.ReasonCount.NAME, r);
proto.write(UidProto.JobCompletion.ReasonCount.COUNT, types.get(r, 0));
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 794d62e8fd6c..dd1f8c31ebb1 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -37,7 +37,6 @@ import com.android.internal.util.Preconditions;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.Executor;
-import java.util.function.Function;
/**
* This class gives you control of the power state of the device.
@@ -828,13 +827,13 @@ public final class PowerManager {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
final Handler mHandler;
+ /** We lazily initialize it.*/
+ private DeviceIdleManager mDeviceIdleManager;
+
IThermalService mThermalService;
private final ArrayMap<OnThermalStatusChangedListener, IThermalStatusListener>
mListenerMap = new ArrayMap<>();
- private static Function<String, Boolean> sIsIgnoringBatteryOptimizationsCallback =
- (packageName) -> false;
-
/**
* {@hide}
*/
@@ -844,6 +843,14 @@ public final class PowerManager {
mHandler = handler;
}
+ private DeviceIdleManager getDeviceIdleManager() {
+ if (mDeviceIdleManager == null) {
+ // No need for synchronization; getSystemService() will return the same object anyway.
+ mDeviceIdleManager = mContext.getSystemService(DeviceIdleManager.class);
+ }
+ return mDeviceIdleManager;
+ }
+
/**
* Gets the minimum supported screen brightness setting.
* The screen may be allowed to become dimmer than this value but
@@ -1662,12 +1669,7 @@ public final class PowerManager {
* {@link android.provider.Settings#ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS}.
*/
public boolean isIgnoringBatteryOptimizations(String packageName) {
- return sIsIgnoringBatteryOptimizationsCallback.apply(packageName);
- }
-
- /** @hide */
- public static void setIsIgnoringBatteryOptimizationsCallback(Function<String, Boolean> f) {
- sIsIgnoringBatteryOptimizationsCallback = f;
+ return getDeviceIdleManager().isApplicationWhitelisted(packageName);
}
/**