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

Commit 6f86a4b2 authored by Changyeon Jo's avatar Changyeon Jo Committed by Automerger Merge Worker
Browse files

Update CameraStreamBuffering test and correct instance name am: 912b16f8 am: b89bbf56

parents e72b2f48 b89bbf56
Loading
Loading
Loading
Loading
+22 −9
Original line number Original line Diff line number Diff line
@@ -66,8 +66,8 @@ public:


        ASSERT_NE(pEnumerator.get(), nullptr);
        ASSERT_NE(pEnumerator.get(), nullptr);


        // "default" is reserved for EVS manager.
        // "legacy_sw/0" is reserved for EVS manager v1.0 implementation.
        constexpr static char kEvsManagerName[] = "default";
        constexpr static char kEvsManagerName[] = "legacy_sw/0";
        mIsHwModule = service_name.compare(kEvsManagerName);
        mIsHwModule = service_name.compare(kEvsManagerName);
    }
    }


@@ -364,8 +364,14 @@ TEST_P(EvsHidlTest, CameraStreamPerformance) {
TEST_P(EvsHidlTest, CameraStreamBuffering) {
TEST_P(EvsHidlTest, CameraStreamBuffering) {
    ALOGI("Starting CameraStreamBuffering test");
    ALOGI("Starting CameraStreamBuffering test");


    // Arbitrary constant (should be > 1 and not too big)
    // Maximum number of frames in flight this test case will attempt. This test
    static const unsigned int kBuffersToHold = 2;
    // case chooses an arbitrary number that is large enough to run a camera
    // pipeline for a single client.
    constexpr unsigned int kMaxBuffersToHold = 20;

    // Initial value for setMaxFramesInFlight() call. This number should be
    // greater than 1.
    unsigned int buffersToHold = 2;


    // Get the camera list
    // Get the camera list
    loadCameraList();
    loadCameraList();
@@ -381,9 +387,16 @@ TEST_P(EvsHidlTest, CameraStreamBuffering) {
        EXPECT_EQ(EvsResult::BUFFER_NOT_AVAILABLE, badResult);
        EXPECT_EQ(EvsResult::BUFFER_NOT_AVAILABLE, badResult);


        // Now ask for exactly two buffers in flight as we'll test behavior in that case
        // Now ask for exactly two buffers in flight as we'll test behavior in that case
        Return<EvsResult> goodResult = pCam->setMaxFramesInFlight(kBuffersToHold);
        // Find the minimum number of buffers to run a target camera.
        EXPECT_EQ(EvsResult::OK, goodResult);
        while (buffersToHold < kMaxBuffersToHold) {
            Return<EvsResult> goodResult = pCam->setMaxFramesInFlight(buffersToHold);
            if (goodResult == EvsResult::OK) {
                break;
            }


            ++buffersToHold;
        }
        EXPECT_LE(buffersToHold, kMaxBuffersToHold);


        // Set up a frame receiver object which will fire up its own thread.
        // Set up a frame receiver object which will fire up its own thread.
        sp<FrameHandler> frameHandler = new FrameHandler(pCam, cam,
        sp<FrameHandler> frameHandler = new FrameHandler(pCam, cam,
@@ -399,7 +412,7 @@ TEST_P(EvsHidlTest, CameraStreamBuffering) {
        sleep(2);   // 1 second should be enough for at least 5 frames to be delivered worst case
        sleep(2);   // 1 second should be enough for at least 5 frames to be delivered worst case
        unsigned framesReceived = 0;
        unsigned framesReceived = 0;
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        ASSERT_EQ(kBuffersToHold, framesReceived) << "Stream didn't stall at expected buffer limit";
        ASSERT_EQ(buffersToHold, framesReceived) << "Stream didn't stall at expected buffer limit";




        // Give back one buffer
        // Give back one buffer
@@ -410,7 +423,7 @@ TEST_P(EvsHidlTest, CameraStreamBuffering) {
        // filled since we require 10fps minimum -- but give a 10% allowance just in case.
        // filled since we require 10fps minimum -- but give a 10% allowance just in case.
        usleep(110 * kMillisecondsToMicroseconds);
        usleep(110 * kMillisecondsToMicroseconds);
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        EXPECT_EQ(kBuffersToHold+1, framesReceived) << "Stream should've resumed";
        EXPECT_EQ(buffersToHold+1, framesReceived) << "Stream should've resumed";


        // Even when the camera pointer goes out of scope, the FrameHandler object will
        // Even when the camera pointer goes out of scope, the FrameHandler object will
        // keep the stream alive unless we tell it to shutdown.
        // keep the stream alive unless we tell it to shutdown.
+18 −6
Original line number Original line Diff line number Diff line
@@ -534,8 +534,14 @@ TEST_P(EvsHidlTest, CameraStreamPerformance) {
TEST_P(EvsHidlTest, CameraStreamBuffering) {
TEST_P(EvsHidlTest, CameraStreamBuffering) {
    LOG(INFO) << "Starting CameraStreamBuffering test";
    LOG(INFO) << "Starting CameraStreamBuffering test";


    // Arbitrary constant (should be > 1 and not too big)
    // Maximum number of frames in flight this test case will attempt. This test
    static const unsigned int kBuffersToHold = 2;
    // case chooses an arbitrary number that is large enough to run a camera
    // pipeline for a single client.
    constexpr unsigned int kMaxBuffersToHold = 20;

    // Initial value for setMaxFramesInFlight() call. This number should be
    // greater than 1.
    unsigned int buffersToHold = 2;


    // Get the camera list
    // Get the camera list
    loadCameraList();
    loadCameraList();
@@ -567,9 +573,15 @@ TEST_P(EvsHidlTest, CameraStreamBuffering) {
        EXPECT_EQ(EvsResult::BUFFER_NOT_AVAILABLE, badResult);
        EXPECT_EQ(EvsResult::BUFFER_NOT_AVAILABLE, badResult);


        // Now ask for exactly two buffers in flight as we'll test behavior in that case
        // Now ask for exactly two buffers in flight as we'll test behavior in that case
        Return<EvsResult> goodResult = pCam->setMaxFramesInFlight(kBuffersToHold);
        while (buffersToHold < kMaxBuffersToHold) {
        EXPECT_EQ(EvsResult::OK, goodResult);
            Return<EvsResult> goodResult = pCam->setMaxFramesInFlight(buffersToHold);
            if (goodResult == EvsResult::OK) {
                break;
            }


            ++buffersToHold;
        }
        EXPECT_LE(buffersToHold, kMaxBuffersToHold);


        // Set up a frame receiver object which will fire up its own thread.
        // Set up a frame receiver object which will fire up its own thread.
        sp<FrameHandler> frameHandler = new FrameHandler(pCam, cam,
        sp<FrameHandler> frameHandler = new FrameHandler(pCam, cam,
@@ -585,7 +597,7 @@ TEST_P(EvsHidlTest, CameraStreamBuffering) {
        sleep(1);   // 1 second should be enough for at least 5 frames to be delivered worst case
        sleep(1);   // 1 second should be enough for at least 5 frames to be delivered worst case
        unsigned framesReceived = 0;
        unsigned framesReceived = 0;
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        ASSERT_EQ(kBuffersToHold, framesReceived) << "Stream didn't stall at expected buffer limit";
        ASSERT_EQ(buffersToHold, framesReceived) << "Stream didn't stall at expected buffer limit";




        // Give back one buffer
        // Give back one buffer
@@ -596,7 +608,7 @@ TEST_P(EvsHidlTest, CameraStreamBuffering) {
        // filled since we require 10fps minimum -- but give a 10% allowance just in case.
        // filled since we require 10fps minimum -- but give a 10% allowance just in case.
        usleep(110 * kMillisecondsToMicroseconds);
        usleep(110 * kMillisecondsToMicroseconds);
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        frameHandler->getFramesCounters(&framesReceived, nullptr);
        EXPECT_EQ(kBuffersToHold+1, framesReceived) << "Stream should've resumed";
        EXPECT_EQ(buffersToHold+1, framesReceived) << "Stream should've resumed";


        // Even when the camera pointer goes out of scope, the FrameHandler object will
        // Even when the camera pointer goes out of scope, the FrameHandler object will
        // keep the stream alive unless we tell it to shutdown.
        // keep the stream alive unless we tell it to shutdown.