Build JobStatus objects outside the lock

Constructing a JobStatus can be a surprisingly heavy operation, potentially
involving IPC; so do so outside the primary lock when possible in order to
reduce lock contention.

Bug 28946245

Change-Id: I51fffa6d29d566647edb583ae6e46ed6038d36e3
This commit is contained in:
Christopher Tate
2016-05-25 10:44:24 -07:00
parent 15818e1156
commit 3eddecc3bc

View File

@@ -223,10 +223,11 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne
* stop executing.
*/
JobStatus getRunningJob() {
final JobStatus job;
synchronized (mLock) {
return mRunningJob == null ?
null : new JobStatus(mRunningJob);
job = mRunningJob;
}
return job == null ? null : new JobStatus(job);
}
/** Called externally when a job that was scheduled for execution should be cancelled. */