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

Commit a4b693f5 authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

Audio VTS: Fix MMAP tests

Ensure stream test runs for output MMAP profiles.

Enhance checks for MMAP buffer size.

Bug: 144575694
Test: atest VtsHalAudioV6_0TargetTest
Change-Id: I93e66b12c93c466d661e65c4dbbb5deb32772848
Merged-In: I93e66b12c93c466d661e65c4dbbb5deb32772848
parent d041930d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -277,7 +277,7 @@ interface IStream {
     * @return retval OK in case the success.
     *                NOT_SUPPORTED on non mmap mode streams
     *                NOT_INITIALIZED in case of memory allocation error
     *                INVALID_ARGUMENTS if the requested buffer size is too large
     *                INVALID_ARGUMENTS if the requested buffer size is invalid
     *                INVALID_STATE if called out of sequence
     * @return info    a MmapBufferInfo struct containing information on the MMMAP buffer created.
     */
+2 −1
Original line number Diff line number Diff line
@@ -100,7 +100,8 @@ const std::vector<DeviceConfigParameter>& getOutputDeviceConfigParameters() {
                            special = true;
                        }
                        if ((flags & AUDIO_OUTPUT_FLAG_DIRECT) &&
                            !(flags & AUDIO_OUTPUT_FLAG_HW_AV_SYNC)) {
                            !(flags &
                              (AUDIO_OUTPUT_FLAG_HW_AV_SYNC | AUDIO_OUTPUT_FLAG_MMAP_NOIRQ))) {
                            result.emplace_back(device, config,
                                                AudioOutputFlag(AUDIO_OUTPUT_FLAG_DIRECT));
                            special = true;
+9 −11
Original line number Diff line number Diff line
@@ -1203,19 +1203,17 @@ TEST_IO_STREAM(closeTwice, "Make sure a stream can not be closed twice",
        waitForStreamDestruction())
// clang-format on

static void testCreateTooBigMmapBuffer(IStream* stream) {
static void testMmapBufferOfInvalidSize(IStream* stream) {
    for (int32_t value : {-1, 0, std::numeric_limits<int32_t>::max()}) {
        MmapBufferInfo info;
        Result res;
    // Assume that int max is a value too big to be allocated
    // This is true currently with a 32bit media server, but might not when it
    // will run in 64 bit
    auto minSizeFrames = std::numeric_limits<int32_t>::max();
    ASSERT_OK(stream->createMmapBuffer(minSizeFrames, returnIn(res, info)));
    ASSERT_RESULT(invalidArgsOrNotSupported, res);
        EXPECT_OK(stream->createMmapBuffer(value, returnIn(res, info)));
        EXPECT_RESULT(invalidArgsOrNotSupported, res) << "value=" << value;
    }
}

TEST_IO_STREAM(CreateTooBigMmapBuffer, "Create mmap buffer too big should fail",
               testCreateTooBigMmapBuffer(stream.get()))
TEST_IO_STREAM(CreateTooBigMmapBuffer, "Create mmap buffer of invalid size must fail",
               testMmapBufferOfInvalidSize(stream.get()))

static void testGetMmapPositionOfNonMmapedStream(IStream* stream) {
    Result res;