transcoder: plumb uid/pid to transcoder createCodec

Instead of using ResourceManagerService::overrideProcessInfo to
override the procinfo of the native MediaTranscodingService,
use the newly added AMediaCodec create methods with UID/PID.
This will allow the codec instance to be attributed to the
actual client (for battery reporting as well resource managerment
purposes), instead of all to media.transcoding.

Plumb uid/pid to transcoder to create the codec with them.

Fix up the unit test after the change.

bug: 159172726
test: transcoder unit tests.
Change-Id: Ie7e6fd813ec53f125590665ab3466758a0fd4601
diff --git a/media/libmediatranscoding/TranscodingResourcePolicy.cpp b/media/libmediatranscoding/TranscodingResourcePolicy.cpp
index 4fd8338..f2e973a 100644
--- a/media/libmediatranscoding/TranscodingResourcePolicy.cpp
+++ b/media/libmediatranscoding/TranscodingResourcePolicy.cpp
@@ -41,7 +41,7 @@
 }
 
 struct TranscodingResourcePolicy::ResourceObserver : public BnResourceObserver {
-    explicit ResourceObserver(TranscodingResourcePolicy* owner) : mOwner(owner), mPid(getpid()) {}
+    explicit ResourceObserver(TranscodingResourcePolicy* owner) : mOwner(owner) {}
 
     // IResourceObserver
     ::ndk::ScopedAStatus onStatusChanged(
@@ -51,12 +51,12 @@
               ::aidl::android::media::toString(event).c_str(), uid, pid,
               toString(observables[0]).c_str());
 
-        // Only report kIdle event for codec resources from other processes.
-        if (((uint64_t)event & (uint64_t)MediaObservableEvent::kIdle) != 0 && (pid != mPid)) {
+        // Only report kIdle event.
+        if (((uint64_t)event & (uint64_t)MediaObservableEvent::kIdle) != 0) {
             for (auto& observable : observables) {
                 if (observable.type == MediaObservableType::kVideoSecureCodec ||
                     observable.type == MediaObservableType::kVideoNonSecureCodec) {
-                    mOwner->onResourceAvailable();
+                    mOwner->onResourceAvailable(pid);
                     break;
                 }
             }
@@ -65,7 +65,6 @@
     }
 
     TranscodingResourcePolicy* mOwner;
-    const pid_t mPid;
 };
 
 // static
@@ -83,7 +82,9 @@
 }
 
 TranscodingResourcePolicy::TranscodingResourcePolicy()
-      : mRegistered(false), mDeathRecipient(AIBinder_DeathRecipient_new(BinderDiedCallback)) {
+      : mRegistered(false),
+        mResourceLostPid(-1),
+        mDeathRecipient(AIBinder_DeathRecipient_new(BinderDiedCallback)) {
     registerSelf();
 }
 
@@ -155,11 +156,20 @@
     mResourcePolicyCallback = cb;
 }
 
-void TranscodingResourcePolicy::onResourceAvailable() {
+void TranscodingResourcePolicy::setPidResourceLost(pid_t pid) {
+    std::scoped_lock lock{mCallbackLock};
+    mResourceLostPid = pid;
+}
+
+void TranscodingResourcePolicy::onResourceAvailable(pid_t pid) {
     std::shared_ptr<ResourcePolicyCallbackInterface> cb;
     {
         std::scoped_lock lock{mCallbackLock};
-        cb = mResourcePolicyCallback.lock();
+        // Only callback if codec resource is released from other processes.
+        if (mResourceLostPid != -1 && mResourceLostPid != pid) {
+            cb = mResourcePolicyCallback.lock();
+            mResourceLostPid = -1;
+        }
     }
 
     if (cb != nullptr) {