Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84e9961a authored by Christopher Tate's avatar Christopher Tate Committed by android-build-merger
Browse files

Eliminate unnecessary object churn in job scheduler updating

am: eafb5350

Change-Id: I4b43ea727720e73ad11a0615c221fe23ca9d34c0
parents 7a587e85 eafb5350
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -907,7 +907,11 @@ public final class JobSchedulerService extends com.android.server.SystemService
    private boolean isCurrentlyActiveLocked(JobStatus job) {
        for (int i=0; i<mActiveServices.size(); i++) {
            JobServiceContext serviceContext = mActiveServices.get(i);
            final JobStatus running = serviceContext.getRunningJob();
            // The 'unsafe' direct-internal-reference running-job inspector is okay to
            // use here because we are already holding the necessary lock *and* we
            // immediately discard the returned object reference, if any; we return
            // only a boolean state indicator to the caller.
            final JobStatus running = serviceContext.getRunningJobUnsafeLocked();
            if (running != null && running.matches(job.getUid(), job.getJobId())) {
                return true;
            }
+9 −0
Original line number Diff line number Diff line
@@ -230,6 +230,15 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne
        return job == null ? null : new JobStatus(job);
    }

    /**
     * Internal non-cloning inspection of the currently running job, if any.  The lock
     * must be held when calling this *and* for the entire lifetime of using its returned
     * JobStatus object!
     */
    JobStatus getRunningJobUnsafeLocked() {
        return mRunningJob;
    }

    /** Called externally when a job that was scheduled for execution should be cancelled. */
    void cancelExecutingJob(int reason) {
        mCallbackHandler.obtainMessage(MSG_CANCEL, reason, 0 /* unused */).sendToTarget();