transcoding: instantiate job scheduler with dummy hooks
Instantiate job scheduler with dummy hooks for transcoder
and procInfo to allow more unit testing.
bug: 145233472
test: mediatranscodingservice_tests
Change-Id: I99754d724164c453623fb00affddefca5c84c26c
diff --git a/services/mediatranscoding/MediaTranscodingService.cpp b/services/mediatranscoding/MediaTranscodingService.cpp
index b441449..0289613 100644
--- a/services/mediatranscoding/MediaTranscodingService.cpp
+++ b/services/mediatranscoding/MediaTranscodingService.cpp
@@ -16,9 +16,12 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "MediaTranscodingService"
-#include <MediaTranscodingService.h>
+#include "MediaTranscodingService.h"
+
#include <android/binder_manager.h>
#include <android/binder_process.h>
+#include <media/TranscodingClientManager.h>
+#include <media/TranscodingJobScheduler.h>
#include <private/android_filesystem_config.h>
#include <utils/Log.h>
#include <utils/Vector.h>
@@ -45,8 +48,41 @@
}
}
+// DummyTranscoder and DummyProcessInfo are currently used to instantiate
+// MediaTranscodingService on service side for testing, so that we could
+// actually test the IPC calls of MediaTranscodingService to expose some
+// issues that's observable only over IPC.
+class DummyTranscoder : public TranscoderInterface {
+ void start(int64_t clientId, int32_t jobId) override {
+ (void)clientId;
+ (void)jobId;
+ }
+ void pause(int64_t clientId, int32_t jobId) override {
+ (void)clientId;
+ (void)jobId;
+ }
+ void resume(int64_t clientId, int32_t jobId) override {
+ (void)clientId;
+ (void)jobId;
+ }
+};
+
+class DummyProcessInfo : public ProcessInfoInterface {
+ bool isProcessOnTop(int32_t pid) override {
+ (void)pid;
+ return true;
+ }
+};
+
MediaTranscodingService::MediaTranscodingService()
- : mTranscodingClientManager(TranscodingClientManager::getInstance()) {
+ : MediaTranscodingService(std::make_shared<DummyTranscoder>(),
+ std::make_shared<DummyProcessInfo>()) {}
+
+MediaTranscodingService::MediaTranscodingService(
+ const std::shared_ptr<TranscoderInterface>& transcoder,
+ const std::shared_ptr<ProcessInfoInterface>& procInfo)
+ : mJobScheduler(new TranscodingJobScheduler(transcoder, procInfo)),
+ mClientManager(new TranscodingClientManager(mJobScheduler)) {
ALOGV("MediaTranscodingService is created");
}
@@ -64,7 +100,7 @@
write(fd, result.string(), result.size());
Vector<String16> args;
- mTranscodingClientManager.dumpAllClients(fd, args);
+ mClientManager->dumpAllClients(fd, args);
return OK;
}
@@ -80,13 +116,11 @@
}
Status MediaTranscodingService::registerClient(
- const std::shared_ptr<ITranscodingClientListener>& in_listener,
- const std::string& in_clientName,
- const std::string& in_opPackageName,
- int32_t in_clientUid, int32_t in_clientPid,
- std::shared_ptr<ITranscodingClient>* _aidl_return) {
- if (in_listener == nullptr) {
- ALOGE("Client listener can not be null");
+ const std::shared_ptr<ITranscodingClientCallback>& in_callback,
+ const std::string& in_clientName, const std::string& in_opPackageName, int32_t in_clientUid,
+ int32_t in_clientPid, std::shared_ptr<ITranscodingClient>* _aidl_return) {
+ if (in_callback == nullptr) {
+ ALOGE("Client callback can not be null");
*_aidl_return = nullptr;
return Status::fromServiceSpecificError(ERROR_ILLEGAL_ARGUMENT);
}
@@ -127,8 +161,8 @@
// Creates the client and uses its process id as client id.
std::shared_ptr<ITranscodingClient> newClient;
- status_t err = mTranscodingClientManager.addClient(in_listener,
- in_clientPid, in_clientUid, in_clientName, in_opPackageName, &newClient);
+ status_t err = mClientManager->addClient(in_callback, in_clientPid, in_clientUid, in_clientName,
+ in_opPackageName, &newClient);
if (err != OK) {
*_aidl_return = nullptr;
return STATUS_ERROR_FMT(err, "Failed to add client to TranscodingClientManager");
@@ -140,7 +174,7 @@
Status MediaTranscodingService::getNumOfClients(int32_t* _aidl_return) {
ALOGD("MediaTranscodingService::getNumOfClients");
- *_aidl_return = mTranscodingClientManager.getNumOfClients();
+ *_aidl_return = mClientManager->getNumOfClients();
return Status::ok();
}