Merge "Log global JobScheduler state changes." into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-09-24 03:47:47 +00:00
committed by Android (Google) Code Review
5 changed files with 38 additions and 3 deletions

View File

@@ -68,6 +68,11 @@ public final class BatteryController extends RestrictingController {
*/ */
private final ArraySet<JobStatus> mChangedJobs = new ArraySet<>(); private final ArraySet<JobStatus> mChangedJobs = new ArraySet<>();
@GuardedBy("mLock")
private Boolean mLastReportedStatsdBatteryNotLow = null;
@GuardedBy("mLock")
private Boolean mLastReportedStatsdStablePower = null;
public BatteryController(JobSchedulerService service) { public BatteryController(JobSchedulerService service) {
super(service); super(service);
mPowerTracker = new PowerTracker(); mPowerTracker = new PowerTracker();
@@ -173,6 +178,19 @@ public final class BatteryController extends RestrictingController {
Slog.d(TAG, "maybeReportNewChargingStateLocked: " Slog.d(TAG, "maybeReportNewChargingStateLocked: "
+ powerConnected + "/" + stablePower + "/" + batteryNotLow); + powerConnected + "/" + stablePower + "/" + batteryNotLow);
} }
if (mLastReportedStatsdStablePower == null
|| mLastReportedStatsdStablePower != stablePower) {
logDeviceWideConstraintStateToStatsd(JobStatus.CONSTRAINT_CHARGING, stablePower);
mLastReportedStatsdStablePower = stablePower;
}
if (mLastReportedStatsdBatteryNotLow == null
|| mLastReportedStatsdBatteryNotLow != stablePower) {
logDeviceWideConstraintStateToStatsd(JobStatus.CONSTRAINT_BATTERY_NOT_LOW,
batteryNotLow);
mLastReportedStatsdBatteryNotLow = batteryNotLow;
}
final long nowElapsed = sElapsedRealtimeClock.millis(); final long nowElapsed = sElapsedRealtimeClock.millis();
for (int i = mTrackedTasks.size() - 1; i >= 0; i--) { for (int i = mTrackedTasks.size() - 1; i >= 0; i--) {
final JobStatus ts = mTrackedTasks.valueAt(i); final JobStatus ts = mTrackedTasks.valueAt(i);

View File

@@ -153,6 +153,8 @@ public final class DeviceIdleJobsController extends StateController {
changed = true; changed = true;
} }
mDeviceIdleMode = enabled; mDeviceIdleMode = enabled;
logDeviceWideConstraintStateToStatsd(JobStatus.CONSTRAINT_DEVICE_NOT_DOZING,
!mDeviceIdleMode);
if (DEBUG) Slog.d(TAG, "mDeviceIdleMode=" + mDeviceIdleMode); if (DEBUG) Slog.d(TAG, "mDeviceIdleMode=" + mDeviceIdleMode);
mDeviceIdleUpdateFunctor.prepare(); mDeviceIdleUpdateFunctor.prepare();
if (enabled) { if (enabled) {

View File

@@ -93,6 +93,8 @@ public final class IdleController extends RestrictingController implements Idlen
@Override @Override
public void reportNewIdleState(boolean isIdle) { public void reportNewIdleState(boolean isIdle) {
synchronized (mLock) { synchronized (mLock) {
logDeviceWideConstraintStateToStatsd(JobStatus.CONSTRAINT_IDLE, isIdle);
final long nowElapsed = sElapsedRealtimeClock.millis(); final long nowElapsed = sElapsedRealtimeClock.millis();
for (int i = mTrackedTasks.size()-1; i >= 0; i--) { for (int i = mTrackedTasks.size()-1; i >= 0; i--) {
mTrackedTasks.valueAt(i).setIdleConstraintSatisfied(nowElapsed, isIdle); mTrackedTasks.valueAt(i).setIdleConstraintSatisfied(nowElapsed, isIdle);

View File

@@ -151,13 +151,12 @@ public final class JobStatus {
*/ */
private static final int STATSD_CONSTRAINTS_TO_LOG = CONSTRAINT_CONTENT_TRIGGER private static final int STATSD_CONSTRAINTS_TO_LOG = CONSTRAINT_CONTENT_TRIGGER
| CONSTRAINT_DEADLINE | CONSTRAINT_DEADLINE
| CONSTRAINT_IDLE
| CONSTRAINT_PREFETCH | CONSTRAINT_PREFETCH
| CONSTRAINT_TARE_WEALTH | CONSTRAINT_TARE_WEALTH
| CONSTRAINT_TIMING_DELAY | CONSTRAINT_TIMING_DELAY
| CONSTRAINT_WITHIN_QUOTA; | CONSTRAINT_WITHIN_QUOTA;
// TODO(b/129954980) // TODO(b/129954980): ensure this doesn't spam statsd, especially at boot
private static final boolean STATS_LOG_ENABLED = false; private static final boolean STATS_LOG_ENABLED = false;
// No override. // No override.
@@ -1864,7 +1863,7 @@ public final class JobStatus {
} }
/** Returns a {@link JobServerProtoEnums.Constraint} enum value for the given constraint. */ /** Returns a {@link JobServerProtoEnums.Constraint} enum value for the given constraint. */
private int getProtoConstraint(int constraint) { static int getProtoConstraint(int constraint) {
switch (constraint) { switch (constraint) {
case CONSTRAINT_BACKGROUND_NOT_RESTRICTED: case CONSTRAINT_BACKGROUND_NOT_RESTRICTED:
return JobServerProtoEnums.CONSTRAINT_BACKGROUND_NOT_RESTRICTED; return JobServerProtoEnums.CONSTRAINT_BACKGROUND_NOT_RESTRICTED;
@@ -1882,8 +1881,12 @@ public final class JobStatus {
return JobServerProtoEnums.CONSTRAINT_DEVICE_NOT_DOZING; return JobServerProtoEnums.CONSTRAINT_DEVICE_NOT_DOZING;
case CONSTRAINT_IDLE: case CONSTRAINT_IDLE:
return JobServerProtoEnums.CONSTRAINT_IDLE; return JobServerProtoEnums.CONSTRAINT_IDLE;
case CONSTRAINT_PREFETCH:
return JobServerProtoEnums.CONSTRAINT_PREFETCH;
case CONSTRAINT_STORAGE_NOT_LOW: case CONSTRAINT_STORAGE_NOT_LOW:
return JobServerProtoEnums.CONSTRAINT_STORAGE_NOT_LOW; return JobServerProtoEnums.CONSTRAINT_STORAGE_NOT_LOW;
case CONSTRAINT_TARE_WEALTH:
return JobServerProtoEnums.CONSTRAINT_TARE_WEALTH;
case CONSTRAINT_TIMING_DELAY: case CONSTRAINT_TIMING_DELAY:
return JobServerProtoEnums.CONSTRAINT_TIMING_DELAY; return JobServerProtoEnums.CONSTRAINT_TIMING_DELAY;
case CONSTRAINT_WITHIN_QUOTA: case CONSTRAINT_WITHIN_QUOTA:

View File

@@ -26,6 +26,7 @@ import android.util.Slog;
import android.util.proto.ProtoOutputStream; import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.job.JobSchedulerService; import com.android.server.job.JobSchedulerService;
import com.android.server.job.JobSchedulerService.Constants; import com.android.server.job.JobSchedulerService.Constants;
import com.android.server.job.StateChangedListener; import com.android.server.job.StateChangedListener;
@@ -165,6 +166,15 @@ public abstract class StateController {
return mService.areComponentsInPlaceLocked(jobStatus); return mService.areComponentsInPlaceLocked(jobStatus);
} }
protected void logDeviceWideConstraintStateToStatsd(int constraint, boolean satisfied) {
FrameworkStatsLog.write(
FrameworkStatsLog.DEVICE_WIDE_JOB_CONSTRAINT_CHANGED,
JobStatus.getProtoConstraint(constraint),
satisfied
? FrameworkStatsLog.DEVICE_WIDE_JOB_CONSTRAINT_CHANGED__STATE__SATISFIED
: FrameworkStatsLog.DEVICE_WIDE_JOB_CONSTRAINT_CHANGED__STATE__UNSATISFIED);
}
public abstract void dumpControllerStateLocked(IndentingPrintWriter pw, public abstract void dumpControllerStateLocked(IndentingPrintWriter pw,
Predicate<JobStatus> predicate); Predicate<JobStatus> predicate);
public void dumpControllerStateLocked(ProtoOutputStream proto, long fieldId, public void dumpControllerStateLocked(ProtoOutputStream proto, long fieldId,