summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/statsd/src/atoms.proto16
-rw-r--r--core/java/com/android/internal/app/IBatteryStats.aidl4
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java10
-rw-r--r--services/core/java/com/android/server/job/JobSchedulerService.java3
-rw-r--r--services/core/java/com/android/server/job/JobServiceContext.java6
5 files changed, 30 insertions, 9 deletions
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index f53ac1b77021..7bd7d6e18930 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -745,6 +745,22 @@ message ScheduledJobStateChanged {
// This is only applicable when the state is FINISHED.
// The default value is STOP_REASON_UNKNOWN.
optional android.app.job.StopReasonEnum stop_reason = 4;
+
+ // The standby bucket of the app that scheduled the job. These match the framework constants
+ // defined in JobSchedulerService.java with the addition of UNKNOWN using -1, as ACTIVE is
+ // already assigned 0.
+ enum Bucket {
+ UNKNOWN = -1;
+ ACTIVE = 0;
+ WORKING_SET = 1;
+ FREQUENT = 2;
+ RARE = 3;
+ NEVER = 4;
+ }
+ optional Bucket standby_bucket = 5 [default = UNKNOWN];
+
+ // The job id (as assigned by the app).
+ optional int32 job_id = 6;
}
/**
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 114d31f207bd..d60d5438b3a7 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -71,8 +71,8 @@ interface IBatteryStats {
void noteSyncStart(String name, int uid);
void noteSyncFinish(String name, int uid);
- void noteJobStart(String name, int uid);
- void noteJobFinish(String name, int uid, int stopReason);
+ void noteJobStart(String name, int uid, int standbyBucket, int jobid);
+ void noteJobFinish(String name, int uid, int stopReason, int standbyBucket, int jobid);
void noteStartWakelock(int uid, int pid, String name, String historyName,
int type, boolean unimportantForLogging);
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index f86ba278138c..e2b59b45e1e6 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -467,23 +467,25 @@ public final class BatteryStatsService extends IBatteryStats.Stub
}
}
- public void noteJobStart(String name, int uid) {
+ /** A scheduled job was started. */
+ public void noteJobStart(String name, int uid, int standbyBucket, int jobid) {
enforceCallingPermission();
synchronized (mStats) {
mStats.noteJobStartLocked(name, uid);
StatsLog.write_non_chained(StatsLog.SCHEDULED_JOB_STATE_CHANGED, uid, null,
name, StatsLog.SCHEDULED_JOB_STATE_CHANGED__STATE__STARTED,
- JobProtoEnums.STOP_REASON_UNKNOWN);
+ JobProtoEnums.STOP_REASON_UNKNOWN, standbyBucket, jobid);
}
}
- public void noteJobFinish(String name, int uid, int stopReason) {
+ /** A scheduled job was finished. */
+ public void noteJobFinish(String name, int uid, int stopReason, int standbyBucket, int jobid) {
enforceCallingPermission();
synchronized (mStats) {
mStats.noteJobFinishLocked(name, uid, stopReason);
StatsLog.write_non_chained(StatsLog.SCHEDULED_JOB_STATE_CHANGED, uid, null,
name, StatsLog.SCHEDULED_JOB_STATE_CHANGED__STATE__FINISHED,
- stopReason);
+ stopReason, standbyBucket, jobid);
}
}
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
index 35a82aef51b5..ea1c49daefb9 100644
--- a/services/core/java/com/android/server/job/JobSchedulerService.java
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -1057,7 +1057,8 @@ public class JobSchedulerService extends com.android.server.SystemService
StatsLog.write_non_chained(StatsLog.SCHEDULED_JOB_STATE_CHANGED,
uId, null, jobStatus.getBatteryName(),
StatsLog.SCHEDULED_JOB_STATE_CHANGED__STATE__SCHEDULED,
- JobProtoEnums.STOP_REASON_CANCELLED);
+ JobProtoEnums.STOP_REASON_CANCELLED, jobStatus.getStandbyBucket(),
+ jobStatus.getJobId());
// If the job is immediately ready to run, then we can just immediately
// put it in the pending list and try to schedule it. This is especially
diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java
index a349d875c1ff..7689bd26a193 100644
--- a/services/core/java/com/android/server/job/JobServiceContext.java
+++ b/services/core/java/com/android/server/job/JobServiceContext.java
@@ -265,7 +265,8 @@ public final class JobServiceContext implements ServiceConnection {
}
mJobPackageTracker.noteActive(job);
try {
- mBatteryStats.noteJobStart(job.getBatteryName(), job.getSourceUid());
+ mBatteryStats.noteJobStart(job.getBatteryName(), job.getSourceUid(),
+ job.getStandbyBucket(), job.getJobId());
} catch (RemoteException e) {
// Whatever.
}
@@ -774,7 +775,8 @@ public final class JobServiceContext implements ServiceConnection {
mJobPackageTracker.noteInactive(completedJob, mParams.getStopReason(), reason);
try {
mBatteryStats.noteJobFinish(mRunningJob.getBatteryName(),
- mRunningJob.getSourceUid(), mParams.getStopReason());
+ mRunningJob.getSourceUid(), mParams.getStopReason(),
+ mRunningJob.getStandbyBucket(), mRunningJob.getJobId());
} catch (RemoteException e) {
// Whatever.
}