summaryrefslogtreecommitdiff
path: root/core/java/android/os/BatteryStats.java
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2019-08-07 12:15:43 -0700
committerMakoto Onuki <omakoto@google.com>2019-08-08 15:33:37 -0700
commit9111d1dcece690790270cd88e90756fc2b2aa830 (patch)
treebb59bd4d9009992050d342328023023f9b3e05df /core/java/android/os/BatteryStats.java
parent57de01e12e40ab9a118237c2b2c72f78ed7c7a4e (diff)
Remove build time dependency from BatteryStats to JobParameters
In preparation of moving the jobscheduler framework code to its own jar. Bug: 138793378 Test: dumpsys batterystats -c | grep jbc and make sure the line looks correct Change-Id: I9938c99e37bd44e522e5f8d8e95772e69d5be492
Diffstat (limited to 'core/java/android/os/BatteryStats.java')
-rw-r--r--core/java/android/os/BatteryStats.java63
1 files changed, 46 insertions, 17 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index a399e8362874..c5c09458da3f 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -21,7 +21,6 @@ import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE_LOCAT
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;
@@ -45,6 +44,7 @@ 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;
@@ -56,6 +56,7 @@ 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
@@ -407,6 +408,40 @@ 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 {
@@ -4260,17 +4295,18 @@ public abstract class BatteryStats implements Parcelable {
}
}
+ final Object[] jobCompletionArgs = new Object[sJobStopReasonCodes.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) {
- dumpLine(pw, uid, category, JOB_COMPLETION_DATA,
- "\"" + completions.keyAt(ic) + "\"",
- types.get(JobParameters.REASON_CANCELED, 0),
- types.get(JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED, 0),
- types.get(JobParameters.REASON_PREEMPT, 0),
- types.get(JobParameters.REASON_TIMEOUT, 0),
- types.get(JobParameters.REASON_DEVICE_IDLE, 0));
+ jobCompletionArgs[0] = "\"" + completions.keyAt(ic) + "\"";
+ for (int i = 0; i < sJobStopReasonCodes.length; i++) {
+ jobCompletionArgs[i + 1] = types.get(sJobStopReasonCodes[i], 0);
+ }
+
+ dumpLine(pw, uid, category, JOB_COMPLETION_DATA, jobCompletionArgs);
}
}
@@ -5887,7 +5923,7 @@ public abstract class BatteryStats implements Parcelable {
pw.print(":");
for (int it=0; it<types.size(); it++) {
pw.print(" ");
- pw.print(JobParameters.getReasonName(types.keyAt(it)));
+ pw.print(sJobStopReasonNameConverter.apply(types.keyAt(it)));
pw.print("(");
pw.print(types.valueAt(it));
pw.print("x)");
@@ -7478,13 +7514,6 @@ public abstract class BatteryStats implements Parcelable {
// Job completion (JOB_COMPLETION_DATA)
final ArrayMap<String, SparseIntArray> completions = u.getJobCompletionStats();
- final int[] reasons = new int[]{
- JobParameters.REASON_CANCELED,
- JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED,
- JobParameters.REASON_PREEMPT,
- JobParameters.REASON_TIMEOUT,
- JobParameters.REASON_DEVICE_IDLE,
- };
for (int ic = 0; ic < completions.size(); ++ic) {
SparseIntArray types = completions.valueAt(ic);
if (types != null) {
@@ -7492,7 +7521,7 @@ public abstract class BatteryStats implements Parcelable {
proto.write(UidProto.JobCompletion.NAME, completions.keyAt(ic));
- for (int r : reasons) {
+ for (int r : sJobStopReasonCodes) {
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));