Merge "Log global JobScheduler state changes." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3a48979836
@@ -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);
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user