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

Commit 2b0e9ee4 authored by Patrick Rohr's avatar Patrick Rohr
Browse files

Fix time measurement in FilterDelayHintTest

The startTime needs to be set before setting the delayHint timeout as
that is when the callback scheduler's clock start ticking.

In addition, we need to await the first callback before starting the
test to make sure the scheduler thread has been run at least once (so
the timeout should be initialized correctly).

Test: atest TunerFilterAidlTest#FilterDelayHintTest
Bug: 210943300
Change-Id: I0b2443f3e7d33977fb6666ba09d3ff51d8b1f152
parent 81e149cd
Loading
Loading
Loading
Loading
+14 −6
Original line number Original line Diff line number Diff line
@@ -704,6 +704,9 @@ void TunerFilterAidlTest::testDelayHint(const FilterConfig& filterConf) {
    bool mediaFilter = isMediaFilter(filterConf);
    bool mediaFilter = isMediaFilter(filterConf);
    auto filter = mFilterTests.getFilterById(filterId);
    auto filter = mFilterTests.getFilterById(filterId);


    // startTime needs to be set before calling setDelayHint.
    auto startTime = std::chrono::steady_clock::now();

    auto timeDelayInMs = std::chrono::milliseconds(filterConf.timeDelayInMs);
    auto timeDelayInMs = std::chrono::milliseconds(filterConf.timeDelayInMs);
    if (timeDelayInMs.count() > 0) {
    if (timeDelayInMs.count() > 0) {
        FilterDelayHint delayHint;
        FilterDelayHint delayHint;
@@ -724,15 +727,22 @@ void TunerFilterAidlTest::testDelayHint(const FilterConfig& filterConf) {
        ASSERT_EQ(filter->setDelayHint(delayHint).isOk(), !mediaFilter);
        ASSERT_EQ(filter->setDelayHint(delayHint).isOk(), !mediaFilter);
    }
    }


    // start and stop filter in order to circumvent callback scheduler race
    // start and stop filter (and wait for first callback) in order to
    // conditions after adjusting filter delays.
    // circumvent callback scheduler race conditions after adjusting filter
    // delays.
    auto cb = mFilterTests.getFilterCallbacks().at(filterId);
    auto future =
            cb->verifyFilterCallback([](const std::vector<DemuxFilterEvent>&) { return true; });
    mFilterTests.startFilter(filterId);
    mFilterTests.startFilter(filterId);

    auto timeout = std::chrono::seconds(30);
    ASSERT_EQ(future.wait_for(timeout), std::future_status::ready);

    mFilterTests.stopFilter(filterId);
    mFilterTests.stopFilter(filterId);


    if (!mediaFilter) {
    if (!mediaFilter) {
        auto cb = mFilterTests.getFilterCallbacks().at(filterId);
        int callbackSize = 0;
        int callbackSize = 0;
        auto future = cb->verifyFilterCallback(
        future = cb->verifyFilterCallback(
                [&callbackSize](const std::vector<DemuxFilterEvent>& events) {
                [&callbackSize](const std::vector<DemuxFilterEvent>& events) {
                    for (const auto& event : events) {
                    for (const auto& event : events) {
                        callbackSize += getDemuxFilterEventDataLength(event);
                        callbackSize += getDemuxFilterEventDataLength(event);
@@ -744,11 +754,9 @@ void TunerFilterAidlTest::testDelayHint(const FilterConfig& filterConf) {
        // hint beforehand.
        // hint beforehand.
        ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
        ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));


        auto startTime = std::chrono::steady_clock::now();
        ASSERT_TRUE(mFilterTests.startFilter(filterId));
        ASSERT_TRUE(mFilterTests.startFilter(filterId));


        // block and wait for callback to be received.
        // block and wait for callback to be received.
        auto timeout = std::chrono::seconds(30);
        ASSERT_EQ(future.wait_for(timeout), std::future_status::ready);
        ASSERT_EQ(future.wait_for(timeout), std::future_status::ready);
        auto duration = std::chrono::steady_clock::now() - startTime;
        auto duration = std::chrono::steady_clock::now() - startTime;