transcoding: use uid instead of pid for scheduling

This change replaces pid usage with uid, there is no functional
change other than that.

bug: 154734285
bug: 145233472
test: unit tests

Change-Id: I2000a84486a561a393211cb0b098e456c2173227
diff --git a/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp b/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp
index d062d93..6bc9e20 100644
--- a/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp
+++ b/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp
@@ -40,16 +40,16 @@
 
 constexpr int64_t kClientId = 1000;
 constexpr int32_t kClientJobId = 0;
-constexpr pid_t kClientPid = 5000;
-constexpr pid_t kInvalidPid = -1;
+constexpr uid_t kClientUid = 5000;
+constexpr uid_t kInvalidUid = (uid_t)-1;
 
 #define CLIENT(n) (kClientId + (n))
 #define JOB(n) (kClientJobId + (n))
-#define PID(n) (kClientPid + (n))
+#define UID(n) (kClientUid + (n))
 
-class TestCallback : public TranscoderInterface, public ProcessInfoInterface {
+class TestCallback : public TranscoderInterface, public UidPolicyInterface {
 public:
-    TestCallback() : mTopPid(-1), mLastError(TranscodingErrorCode::kUnknown) {}
+    TestCallback() : mTopUid(kInvalidUid), mLastError(TranscodingErrorCode::kUnknown) {}
     virtual ~TestCallback() {}
 
     // TranscoderInterface
@@ -63,8 +63,8 @@
         mEventQueue.push_back(Resume(clientId, jobId));
     }
 
-    // ProcessInfoInterface
-    bool isProcessOnTop(pid_t pid) override { return pid == mTopPid; }
+    // UidPolicyInterface
+    bool isUidOnTop(uid_t uid) override { return uid == mTopUid; }
 
     void onFinished(int64_t clientId, int32_t jobId) {
         mEventQueue.push_back(Finished(clientId, jobId));
@@ -75,7 +75,7 @@
         mEventQueue.push_back(Failed(clientId, jobId));
     }
 
-    void setTop(pid_t pid) { mTopPid = pid; }
+    void setTop(uid_t uid) { mTopUid = uid; }
 
     TranscodingErrorCode getLastError() {
         TranscodingErrorCode result = mLastError;
@@ -115,7 +115,7 @@
 private:
     Event mPoppedEvent;
     std::list<Event> mEventQueue;
-    pid_t mTopPid;
+    uid_t mTopUid;
     TranscodingErrorCode mLastError;
 };
 
@@ -197,43 +197,43 @@
 TEST_F(TranscodingJobSchedulerTest, TestSubmitJob) {
     ALOGD("TestSubmitJob");
 
-    // Start with PID(1) on top.
-    mCallback->setTop(PID(1));
+    // Start with UID(1) on top.
+    mCallback->setTop(UID(1));
 
-    // Submit offline job to CLIENT(0) in PID(0).
+    // Submit offline job to CLIENT(0) in UID(0).
     // Should start immediately (because this is the only job).
-    mScheduler->submit(CLIENT(0), JOB(0), PID(0), mOfflineRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(0), UID(0), mOfflineRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), 0));
 
     // Submit real-time job to CLIENT(0).
-    // Should pause offline job and start new job,  even if PID(0) is not on top.
-    mScheduler->submit(CLIENT(0), JOB(1), PID(0), mRealtimeRequest, mClientCallback0);
+    // Should pause offline job and start new job,  even if UID(0) is not on top.
+    mScheduler->submit(CLIENT(0), JOB(1), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(0)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(1)));
 
     // Submit real-time job to CLIENT(0), should be queued after the previous job.
-    mScheduler->submit(CLIENT(0), JOB(2), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(2), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // Submit real-time job to CLIENT(1) in same pid, should be queued after the previous job.
-    mScheduler->submit(CLIENT(1), JOB(0), PID(0), mRealtimeRequest, mClientCallback1);
+    // Submit real-time job to CLIENT(1) in same uid, should be queued after the previous job.
+    mScheduler->submit(CLIENT(1), JOB(0), UID(0), mRealtimeRequest, mClientCallback1);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // Submit real-time job to CLIENT(2) in PID(1).
-    // Should pause previous job and start new job, because PID(1) is top.
-    mCallback->setTop(PID(1));
-    mScheduler->submit(CLIENT(2), JOB(0), PID(1), mRealtimeRequest, mClientCallback2);
+    // Submit real-time job to CLIENT(2) in UID(1).
+    // Should pause previous job and start new job, because UID(1) is top.
+    mCallback->setTop(UID(1));
+    mScheduler->submit(CLIENT(2), JOB(0), UID(1), mRealtimeRequest, mClientCallback2);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(1)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(2), JOB(0)));
 
     // Submit offline job, shouldn't generate any event.
-    mScheduler->submit(CLIENT(2), JOB(1), PID(1), mOfflineRequest, mClientCallback2);
+    mScheduler->submit(CLIENT(2), JOB(1), UID(1), mOfflineRequest, mClientCallback2);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    mCallback->setTop(PID(0));
-    // Submit real-time job to CLIENT(1) in PID(0).
-    // Should pause current job, and resume last job in PID(0).
-    mScheduler->submit(CLIENT(1), JOB(1), PID(0), mRealtimeRequest, mClientCallback1);
+    mCallback->setTop(UID(0));
+    // Submit real-time job to CLIENT(1) in UID(0).
+    // Should pause current job, and resume last job in UID(0).
+    mScheduler->submit(CLIENT(1), JOB(1), UID(0), mRealtimeRequest, mClientCallback1);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(2), JOB(0)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Resume(CLIENT(0), JOB(1)));
 }
@@ -242,15 +242,15 @@
     ALOGD("TestCancelJob");
 
     // Submit real-time job JOB(0), should start immediately.
-    mScheduler->submit(CLIENT(0), JOB(0), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(0), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(0)));
 
     // Submit real-time job JOB(1), should not start.
-    mScheduler->submit(CLIENT(0), JOB(1), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(1), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Submit offline job JOB(2), should not start.
-    mScheduler->submit(CLIENT(0), JOB(2), PID(0), mOfflineRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(2), UID(0), mOfflineRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Cancel queued real-time job.
@@ -262,7 +262,7 @@
     EXPECT_TRUE(mScheduler->cancel(CLIENT(0), JOB(2)));
 
     // Submit offline job JOB(3), shouldn't cause any event.
-    mScheduler->submit(CLIENT(0), JOB(3), PID(0), mOfflineRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(3), UID(0), mOfflineRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Cancel running real-time job JOB(0).
@@ -281,26 +281,26 @@
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Submit offline job JOB(0), should start immediately.
-    mScheduler->submit(CLIENT(0), JOB(0), PID(0), mOfflineRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(0), UID(0), mOfflineRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(0)));
 
     // Submit real-time job JOB(1), should pause offline job and start immediately.
-    mScheduler->submit(CLIENT(0), JOB(1), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(1), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(0)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(1)));
 
     // Submit real-time job JOB(2), should not start.
-    mScheduler->submit(CLIENT(0), JOB(2), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(2), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Fail when the job never started, should be ignored.
     mScheduler->onFinish(CLIENT(0), JOB(2));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // PID(1) moves to top.
-    mCallback->setTop(PID(1));
-    // Submit real-time job to CLIENT(1) in PID(1), should pause previous job and start new job.
-    mScheduler->submit(CLIENT(1), JOB(0), PID(1), mRealtimeRequest, mClientCallback1);
+    // UID(1) moves to top.
+    mCallback->setTop(UID(1));
+    // Submit real-time job to CLIENT(1) in UID(1), should pause previous job and start new job.
+    mScheduler->submit(CLIENT(1), JOB(0), UID(1), mRealtimeRequest, mClientCallback1);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(1)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(1), JOB(0)));
 
@@ -336,26 +336,26 @@
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Submit offline job JOB(0), should start immediately.
-    mScheduler->submit(CLIENT(0), JOB(0), PID(0), mOfflineRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(0), UID(0), mOfflineRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(0)));
 
     // Submit real-time job JOB(1), should pause offline job and start immediately.
-    mScheduler->submit(CLIENT(0), JOB(1), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(1), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(0)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(1)));
 
     // Submit real-time job JOB(2), should not start.
-    mScheduler->submit(CLIENT(0), JOB(2), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(2), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Fail when the job never started, should be ignored.
     mScheduler->onError(CLIENT(0), JOB(2), TranscodingErrorCode::kUnknown);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // PID(1) moves to top.
-    mCallback->setTop(PID(1));
-    // Submit real-time job to CLIENT(1) in PID(1), should pause previous job and start new job.
-    mScheduler->submit(CLIENT(1), JOB(0), PID(1), mRealtimeRequest, mClientCallback1);
+    // UID(1) moves to top.
+    mCallback->setTop(UID(1));
+    // Submit real-time job to CLIENT(1) in UID(1), should pause previous job and start new job.
+    mScheduler->submit(CLIENT(1), JOB(0), UID(1), mRealtimeRequest, mClientCallback1);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(1)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(1), JOB(0)));
 
@@ -384,33 +384,33 @@
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 }
 
-TEST_F(TranscodingJobSchedulerTest, TestTopProcessChanged) {
-    ALOGD("TestTopProcessChanged");
+TEST_F(TranscodingJobSchedulerTest, TestTopUidChanged) {
+    ALOGD("TestTopUidChanged");
 
     // Submit real-time job to CLIENT(0), job should start immediately.
-    mScheduler->submit(CLIENT(0), JOB(0), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(0), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(0)));
 
     // Submit offline job to CLIENT(0), should not start.
-    mScheduler->submit(CLIENT(1), JOB(0), PID(0), mOfflineRequest, mClientCallback1);
+    mScheduler->submit(CLIENT(1), JOB(0), UID(0), mOfflineRequest, mClientCallback1);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // Move PID(1) to top.
-    mCallback->setTop(PID(1));
-    // Submit real-time job to CLIENT(2) in different pid PID(1).
+    // Move UID(1) to top.
+    mCallback->setTop(UID(1));
+    // Submit real-time job to CLIENT(2) in different uid UID(1).
     // Should pause previous job and start new job.
-    mScheduler->submit(CLIENT(2), JOB(0), PID(1), mRealtimeRequest, mClientCallback2);
+    mScheduler->submit(CLIENT(2), JOB(0), UID(1), mRealtimeRequest, mClientCallback2);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(0)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(2), JOB(0)));
 
-    // Bring PID(0) back to top.
-    mCallback->setTop(PID(0));
-    mScheduler->onTopProcessChanged(PID(0));
+    // Bring UID(0) back to top.
+    mCallback->setTop(UID(0));
+    mScheduler->onTopUidChanged(UID(0));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(2), JOB(0)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Resume(CLIENT(0), JOB(0)));
 
-    // Bring invalid process to top.
-    mScheduler->onTopProcessChanged(kInvalidPid);
+    // Bring invalid uid to top.
+    mScheduler->onTopUidChanged(kInvalidUid);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Finish job, next real-time job should resume.
@@ -428,19 +428,19 @@
     ALOGD("TestResourceLost");
 
     // Submit real-time job to CLIENT(0), job should start immediately.
-    mScheduler->submit(CLIENT(0), JOB(0), PID(0), mRealtimeRequest, mClientCallback0);
+    mScheduler->submit(CLIENT(0), JOB(0), UID(0), mRealtimeRequest, mClientCallback0);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(0), JOB(0)));
 
     // Submit offline job to CLIENT(0), should not start.
-    mScheduler->submit(CLIENT(1), JOB(0), PID(0), mOfflineRequest, mClientCallback1);
+    mScheduler->submit(CLIENT(1), JOB(0), UID(0), mOfflineRequest, mClientCallback1);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // Move PID(1) to top.
-    mCallback->setTop(PID(1));
+    // Move UID(1) to top.
+    mCallback->setTop(UID(1));
 
-    // Submit real-time job to CLIENT(2) in different pid PID(1).
+    // Submit real-time job to CLIENT(2) in different uid UID(1).
     // Should pause previous job and start new job.
-    mScheduler->submit(CLIENT(2), JOB(0), PID(1), mRealtimeRequest, mClientCallback2);
+    mScheduler->submit(CLIENT(2), JOB(0), UID(1), mRealtimeRequest, mClientCallback2);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Pause(CLIENT(0), JOB(0)));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::Start(CLIENT(2), JOB(0)));
 
@@ -458,8 +458,8 @@
     mScheduler->onResourceLost();
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // Move PID(0) back to top, should have no resume due to no resource.
-    mScheduler->onTopProcessChanged(PID(0));
+    // Move UID(0) back to top, should have no resume due to no resource.
+    mScheduler->onTopUidChanged(UID(0));
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Signal resource available, CLIENT(0) should resume.
@@ -471,11 +471,11 @@
     mScheduler->onResourceLost();
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
-    // Move PID(2) to top.
-    mCallback->setTop(PID(2));
+    // Move UID(2) to top.
+    mCallback->setTop(UID(2));
 
-    // Submit real-time job to CLIENT(3) in PID(2), job shouldn't start due to no resource.
-    mScheduler->submit(CLIENT(3), JOB(0), PID(2), mRealtimeRequest, mClientCallback3);
+    // Submit real-time job to CLIENT(3) in UID(2), job shouldn't start due to no resource.
+    mScheduler->submit(CLIENT(3), JOB(0), UID(2), mRealtimeRequest, mClientCallback3);
     EXPECT_EQ(mCallback->popEvent(), TestCallback::NoEvent);
 
     // Signal resource available, CLIENT(3)'s job should start.