Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75222189 authored by Chong Zhang's avatar Chong Zhang
Browse files

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
parent 88aba179
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -224,8 +224,9 @@ void TranscodingUidPolicy::onUidStateChanged(uid_t uid, int32_t procState) {
}

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;
+2 −0
Original line number Diff line number Diff line
@@ -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;
+3 −0
Original line number Diff line number Diff line
@@ -84,6 +84,8 @@ public:
    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 @@ struct TestClientCallback : public BnTranscodingClientCallback {
    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();
    }
+8 −1
Original line number Diff line number Diff line
@@ -2,7 +2,10 @@
cc_library_shared {
    name: "libmediatranscodingservice",

    srcs: ["MediaTranscodingService.cpp"],
    srcs: [
        "MediaTranscodingService.cpp",
        "SimulatedTranscoder.cpp",
    ],

    shared_libs: [
        "libbase",
@@ -12,6 +15,10 @@ cc_library_shared {
        "libutils",
    ],
    
    export_shared_lib_headers: [
        "libmediatranscoding",
    ],

    static_libs: [
        "mediatranscoding_aidl_interface-ndk_platform",
    ],
+5 −19
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
#include <utils/Log.h>
#include <utils/Vector.h>

#include "SimulatedTranscoder.h"

namespace android {

// Convenience methods for constructing binder::Status objects for error returns
@@ -49,26 +51,8 @@ static bool isTrustedCallingUid(uid_t uid) {
    }
}

// DummyTranscoder is 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;
    }
};

MediaTranscodingService::MediaTranscodingService()
      : MediaTranscodingService(std::make_shared<DummyTranscoder>(),
      : MediaTranscodingService(std::make_shared<SimulatedTranscoder>(),
                                std::make_shared<TranscodingUidPolicy>()) {}

MediaTranscodingService::MediaTranscodingService(
@@ -77,6 +61,8 @@ MediaTranscodingService::MediaTranscodingService(
      : mJobScheduler(new TranscodingJobScheduler(transcoder, uidPolicy)),
        mClientManager(new TranscodingClientManager(mJobScheduler)) {
    ALOGV("MediaTranscodingService is created");

    transcoder->setCallback(mJobScheduler);
    uidPolicy->setCallback(mJobScheduler);
}

Loading