Loading ProtoLibraries.bp +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ gensrcs { "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)", srcs: [ ":aconfigd_protos", ":ipconnectivity-proto-src", ":libstats_atom_enum_protos", ":libstats_atom_message_protos", Loading apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +8 −1 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.os.WorkSource; import android.os.storage.StorageManagerInternal; Loading Loading @@ -179,6 +180,8 @@ public class JobSchedulerService extends com.android.server.SystemService public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); public static final boolean DEBUG_STANDBY = DEBUG || false; public static final String TRACE_TRACK_NAME = "JobScheduler"; /** The maximum number of jobs that we allow an app to schedule */ private static final int MAX_JOBS_PER_APP = 150; /** The number of the most recently completed jobs to keep track of for debugging purposes. */ Loading Loading @@ -4344,7 +4347,11 @@ public class JobSchedulerService extends com.android.server.SystemService final boolean wasConsideredCharging = isConsideredCharging(); mChargingPolicy = newPolicy; if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, "CHARGING POLICY CHANGED#" + mChargingPolicy); } if (isConsideredCharging() != wasConsideredCharging) { for (int c = mControllers.size() - 1; c >= 0; --c) { mControllers.get(c).onBatteryStateChangedLocked(); Loading apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +10 −22 Original line number Diff line number Diff line Loading @@ -535,29 +535,17 @@ public final class JobServiceContext implements ServiceConnection { sEnqueuedJwiAtJobStart.logSampleWithUid(job.getUid(), job.getWorkCount()); final String sourcePackage = job.getSourcePackageName(); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { final String componentPackage = job.getServiceComponent().getPackageName(); String traceTag = "*job*<" + job.getSourceUid() + ">" + sourcePackage; if (!sourcePackage.equals(componentPackage)) { traceTag += ":" + componentPackage; } traceTag += "/" + job.getServiceComponent().getShortClassName(); if (!componentPackage.equals(job.serviceProcessName)) { traceTag += "$" + job.serviceProcessName; } if (job.getNamespace() != null) { traceTag += "@" + job.getNamespace(); } traceTag += "#" + job.getJobId(); // Use the context's ID to distinguish traces since there'll only be one job // running per context. Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "JobScheduler", traceTag, getId()); Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, job.computeSystemTraceTag(), getId()); } if (job.getAppTraceTag() != null) { // Use the job's ID to distinguish traces since the ID will be unique per app. Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, "JobScheduler", job.getAppTraceTag(), job.getJobId()); Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, JobSchedulerService.TRACE_TRACK_NAME, job.getAppTraceTag(), job.getJobId()); } try { mBatteryStats.noteJobStart(job.getBatteryName(), job.getSourceUid()); Loading Loading @@ -1605,12 +1593,12 @@ public final class JobServiceContext implements ServiceConnection { completedJob.getFilteredTraceTag(), completedJob.getFilteredDebugTags()); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_SYSTEM_SERVER, "JobScheduler", getId()); Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, getId()); } if (completedJob.getAppTraceTag() != null) { Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, "JobScheduler", completedJob.getJobId()); Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, JobSchedulerService.TRACE_TRACK_NAME, completedJob.getJobId()); } try { mBatteryStats.noteJobFinish(mRunningJob.getBatteryName(), mRunningJob.getSourceUid(), Loading apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +35 −0 Original line number Diff line number Diff line Loading @@ -572,6 +572,9 @@ public final class JobStatus { /** The reason a job most recently went from ready to not ready. */ private int mReasonReadyToUnready = JobParameters.STOP_REASON_UNDEFINED; /** The system trace tag for this job. */ private String mSystemTraceTag; /** * Core constructor for JobStatus instances. All other ctors funnel down to this one. * Loading Loading @@ -1058,6 +1061,38 @@ public final class JobStatus { return job.getTraceTag(); } /** Returns a trace tag using debug information provided by job scheduler service. */ @NonNull public String computeSystemTraceTag() { // Guarded by JobSchedulerService.mLock, no need for synchronization. if (mSystemTraceTag != null) { return mSystemTraceTag; } mSystemTraceTag = computeSystemTraceTagInner(); return mSystemTraceTag; } @NonNull private String computeSystemTraceTagInner() { final String componentPackage = getServiceComponent().getPackageName(); StringBuilder traceTag = new StringBuilder(128); traceTag.append("*job*<").append(sourceUid).append(">").append(sourcePackageName); if (!sourcePackageName.equals(componentPackage)) { traceTag.append(":").append(componentPackage); } traceTag.append("/").append(getServiceComponent().getShortClassName()); if (!componentPackage.equals(serviceProcessName)) { traceTag.append("$").append(serviceProcessName); } if (mNamespace != null && !mNamespace.trim().isEmpty()) { traceTag.append("@").append(mNamespace); } traceTag.append("#").append(getJobId()); return traceTag.toString(); } /** Returns whether this job was scheduled by one app on behalf of another. */ public boolean isProxyJob() { return mIsProxyJob; Loading apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +28 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.os.Trace; import android.os.UserHandle; import android.provider.DeviceConfig; import android.util.ArraySet; Loading Loading @@ -2181,6 +2182,12 @@ public final class QuotaController extends StateController { } scheduleCutoff(); } } else { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, "QC/- " + mPkg); } } } Loading Loading @@ -2720,6 +2727,11 @@ public final class QuotaController extends StateController { if (timeRemainingMs <= 50) { // Less than 50 milliseconds left. Start process of shutting down jobs. if (DEBUG) Slog.d(TAG, pkg + " has reached its quota."); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, pkg + "#" + MSG_REACHED_TIME_QUOTA); } mStateChangedListener.onControllerStateChanged( maybeUpdateConstraintForPkgLocked( sElapsedRealtimeClock.millis(), Loading Loading @@ -2748,6 +2760,11 @@ public final class QuotaController extends StateController { pkg.userId, pkg.packageName); if (timeRemainingMs <= 0) { if (DEBUG) Slog.d(TAG, pkg + " has reached its EJ quota."); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, pkg + "#" + MSG_REACHED_EJ_TIME_QUOTA); } mStateChangedListener.onControllerStateChanged( maybeUpdateConstraintForPkgLocked( sElapsedRealtimeClock.millis(), Loading @@ -2772,6 +2789,12 @@ public final class QuotaController extends StateController { Slog.d(TAG, pkg + " has reached its count quota."); } if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, pkg + "#" + MSG_REACHED_COUNT_QUOTA); } mStateChangedListener.onControllerStateChanged( maybeUpdateConstraintForPkgLocked( sElapsedRealtimeClock.millis(), Loading Loading @@ -2928,6 +2951,11 @@ public final class QuotaController extends StateController { } mTempAllowlistGraceCache.delete(uid); mTopAppGraceCache.delete(uid); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, "<" + uid + ">#" + MSG_END_GRACE_PERIOD); } final ArraySet<String> packages = mService.getPackagesForUidLocked(uid); if (packages != null) { final int userId = UserHandle.getUserId(uid); Loading Loading
ProtoLibraries.bp +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ gensrcs { "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)", srcs: [ ":aconfigd_protos", ":ipconnectivity-proto-src", ":libstats_atom_enum_protos", ":libstats_atom_message_protos", Loading
apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +8 −1 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.os.WorkSource; import android.os.storage.StorageManagerInternal; Loading Loading @@ -179,6 +180,8 @@ public class JobSchedulerService extends com.android.server.SystemService public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); public static final boolean DEBUG_STANDBY = DEBUG || false; public static final String TRACE_TRACK_NAME = "JobScheduler"; /** The maximum number of jobs that we allow an app to schedule */ private static final int MAX_JOBS_PER_APP = 150; /** The number of the most recently completed jobs to keep track of for debugging purposes. */ Loading Loading @@ -4344,7 +4347,11 @@ public class JobSchedulerService extends com.android.server.SystemService final boolean wasConsideredCharging = isConsideredCharging(); mChargingPolicy = newPolicy; if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, "CHARGING POLICY CHANGED#" + mChargingPolicy); } if (isConsideredCharging() != wasConsideredCharging) { for (int c = mControllers.size() - 1; c >= 0; --c) { mControllers.get(c).onBatteryStateChangedLocked(); Loading
apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +10 −22 Original line number Diff line number Diff line Loading @@ -535,29 +535,17 @@ public final class JobServiceContext implements ServiceConnection { sEnqueuedJwiAtJobStart.logSampleWithUid(job.getUid(), job.getWorkCount()); final String sourcePackage = job.getSourcePackageName(); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { final String componentPackage = job.getServiceComponent().getPackageName(); String traceTag = "*job*<" + job.getSourceUid() + ">" + sourcePackage; if (!sourcePackage.equals(componentPackage)) { traceTag += ":" + componentPackage; } traceTag += "/" + job.getServiceComponent().getShortClassName(); if (!componentPackage.equals(job.serviceProcessName)) { traceTag += "$" + job.serviceProcessName; } if (job.getNamespace() != null) { traceTag += "@" + job.getNamespace(); } traceTag += "#" + job.getJobId(); // Use the context's ID to distinguish traces since there'll only be one job // running per context. Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "JobScheduler", traceTag, getId()); Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, job.computeSystemTraceTag(), getId()); } if (job.getAppTraceTag() != null) { // Use the job's ID to distinguish traces since the ID will be unique per app. Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, "JobScheduler", job.getAppTraceTag(), job.getJobId()); Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, JobSchedulerService.TRACE_TRACK_NAME, job.getAppTraceTag(), job.getJobId()); } try { mBatteryStats.noteJobStart(job.getBatteryName(), job.getSourceUid()); Loading Loading @@ -1605,12 +1593,12 @@ public final class JobServiceContext implements ServiceConnection { completedJob.getFilteredTraceTag(), completedJob.getFilteredDebugTags()); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_SYSTEM_SERVER, "JobScheduler", getId()); Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, getId()); } if (completedJob.getAppTraceTag() != null) { Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, "JobScheduler", completedJob.getJobId()); Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, JobSchedulerService.TRACE_TRACK_NAME, completedJob.getJobId()); } try { mBatteryStats.noteJobFinish(mRunningJob.getBatteryName(), mRunningJob.getSourceUid(), Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +35 −0 Original line number Diff line number Diff line Loading @@ -572,6 +572,9 @@ public final class JobStatus { /** The reason a job most recently went from ready to not ready. */ private int mReasonReadyToUnready = JobParameters.STOP_REASON_UNDEFINED; /** The system trace tag for this job. */ private String mSystemTraceTag; /** * Core constructor for JobStatus instances. All other ctors funnel down to this one. * Loading Loading @@ -1058,6 +1061,38 @@ public final class JobStatus { return job.getTraceTag(); } /** Returns a trace tag using debug information provided by job scheduler service. */ @NonNull public String computeSystemTraceTag() { // Guarded by JobSchedulerService.mLock, no need for synchronization. if (mSystemTraceTag != null) { return mSystemTraceTag; } mSystemTraceTag = computeSystemTraceTagInner(); return mSystemTraceTag; } @NonNull private String computeSystemTraceTagInner() { final String componentPackage = getServiceComponent().getPackageName(); StringBuilder traceTag = new StringBuilder(128); traceTag.append("*job*<").append(sourceUid).append(">").append(sourcePackageName); if (!sourcePackageName.equals(componentPackage)) { traceTag.append(":").append(componentPackage); } traceTag.append("/").append(getServiceComponent().getShortClassName()); if (!componentPackage.equals(serviceProcessName)) { traceTag.append("$").append(serviceProcessName); } if (mNamespace != null && !mNamespace.trim().isEmpty()) { traceTag.append("@").append(mNamespace); } traceTag.append("#").append(getJobId()); return traceTag.toString(); } /** Returns whether this job was scheduled by one app on behalf of another. */ public boolean isProxyJob() { return mIsProxyJob; Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +28 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.os.Trace; import android.os.UserHandle; import android.provider.DeviceConfig; import android.util.ArraySet; Loading Loading @@ -2181,6 +2182,12 @@ public final class QuotaController extends StateController { } scheduleCutoff(); } } else { if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, "QC/- " + mPkg); } } } Loading Loading @@ -2720,6 +2727,11 @@ public final class QuotaController extends StateController { if (timeRemainingMs <= 50) { // Less than 50 milliseconds left. Start process of shutting down jobs. if (DEBUG) Slog.d(TAG, pkg + " has reached its quota."); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, pkg + "#" + MSG_REACHED_TIME_QUOTA); } mStateChangedListener.onControllerStateChanged( maybeUpdateConstraintForPkgLocked( sElapsedRealtimeClock.millis(), Loading Loading @@ -2748,6 +2760,11 @@ public final class QuotaController extends StateController { pkg.userId, pkg.packageName); if (timeRemainingMs <= 0) { if (DEBUG) Slog.d(TAG, pkg + " has reached its EJ quota."); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, pkg + "#" + MSG_REACHED_EJ_TIME_QUOTA); } mStateChangedListener.onControllerStateChanged( maybeUpdateConstraintForPkgLocked( sElapsedRealtimeClock.millis(), Loading @@ -2772,6 +2789,12 @@ public final class QuotaController extends StateController { Slog.d(TAG, pkg + " has reached its count quota."); } if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, pkg + "#" + MSG_REACHED_COUNT_QUOTA); } mStateChangedListener.onControllerStateChanged( maybeUpdateConstraintForPkgLocked( sElapsedRealtimeClock.millis(), Loading Loading @@ -2928,6 +2951,11 @@ public final class QuotaController extends StateController { } mTempAllowlistGraceCache.delete(uid); mTopAppGraceCache.delete(uid); if (Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) { Trace.instantForTrack(Trace.TRACE_TAG_SYSTEM_SERVER, JobSchedulerService.TRACE_TRACK_NAME, "<" + uid + ">#" + MSG_END_GRACE_PERIOD); } final ArraySet<String> packages = mService.getPackagesForUidLocked(uid); if (packages != null) { final int userId = UserHandle.getUserId(uid); Loading