transcoding: add SimulatedTranscoder to test service

- Add SimulatedTranscoder (which is an upgraded version of
  DummyTranscoder) to allow more testing of the service.

- Add unit test that launches dummy test apps from shell
  to simulate uid policy change.

bug: 154734285
bug: 145233472
test: unit tests

Change-Id: Ic169757d64ad8da7eebd0e1febdcbfb467fe81f4
diff --git a/media/libmediatranscoding/TranscodingUidPolicy.cpp b/media/libmediatranscoding/TranscodingUidPolicy.cpp
index 9c8d3fe..36bb264 100644
--- a/media/libmediatranscoding/TranscodingUidPolicy.cpp
+++ b/media/libmediatranscoding/TranscodingUidPolicy.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-// #define LOG_NDEBUG 0
+//#define LOG_NDEBUG 0
 #define LOG_TAG "TranscodingUidPolicy"
 
 #include <binder/ActivityManager.h>
@@ -224,8 +224,9 @@
 }
 
 void TranscodingUidPolicy::updateTopUid_l() {
-    // Update top uid state.
     mTopUidState = ActivityManager::PROCESS_STATE_UNKNOWN;
+
+    // Find the lowest uid state (ignoring PROCESS_STATE_UNKNOWN) with some monitored uids.
     for (auto stateIt = mStateUidMap.begin(); stateIt != mStateUidMap.end(); stateIt++) {
         if (stateIt->first != ActivityManager::PROCESS_STATE_UNKNOWN && !stateIt->second.empty()) {
             mTopUidState = stateIt->first;
diff --git a/media/libmediatranscoding/include/media/TranscoderInterface.h b/media/libmediatranscoding/include/media/TranscoderInterface.h
index a2afa00..3c72c17 100644
--- a/media/libmediatranscoding/include/media/TranscoderInterface.h
+++ b/media/libmediatranscoding/include/media/TranscoderInterface.h
@@ -22,12 +22,14 @@
 namespace android {
 
 using ::aidl::android::media::TranscodingErrorCode;
+class TranscoderCallbackInterface;
 
 // Interface for the scheduler to call the transcoder to take actions.
 class TranscoderInterface {
 public:
     // TODO(chz): determine what parameters are needed here.
     // For now, always pass in clientId&jobId.
+    virtual void setCallback(const std::shared_ptr<TranscoderCallbackInterface>& cb) = 0;
     virtual void start(int64_t clientId, int32_t jobId) = 0;
     virtual void pause(int64_t clientId, int32_t jobId) = 0;
     virtual void resume(int64_t clientId, int32_t jobId) = 0;
diff --git a/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp b/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp
index 95edf1d..adb16a2 100644
--- a/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp
+++ b/media/libmediatranscoding/tests/TranscodingJobScheduler_tests.cpp
@@ -84,6 +84,8 @@
     virtual ~TestTranscoder() {}
 
     // TranscoderInterface
+    void setCallback(const std::shared_ptr<TranscoderCallbackInterface>& /*cb*/) override {}
+
     void start(int64_t clientId, int32_t jobId) override {
         mEventQueue.push_back(Start(clientId, jobId));
     }
@@ -157,6 +159,7 @@
     Status onTranscodingFinished(int32_t in_jobId,
                                  const TranscodingResultParcel& in_result) override {
         EXPECT_EQ(in_jobId, in_result.jobId);
+        ALOGD("TestClientCallback: received onTranscodingFinished");
         mOwner->onFinished(mClientId, in_jobId);
         return Status::ok();
     }