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
diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java
index 4fd1350..31528e5 100644
--- a/services/core/java/com/android/server/job/JobServiceContext.java
+++ b/services/core/java/com/android/server/job/JobServiceContext.java
@@ -223,10 +223,11 @@
      * 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. */