tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 4407671260579ab82834a81c18fe72d8f59c77f5
parent fc84989374baf6eac06941c9c953e456ffec0ddc
Author: Karl Tomlinson <karlt+@karlt.net>
Date:   Wed,  8 Oct 2025 05:54:48 +0000

Bug 1992922 Tighten TestSlowStart NotifyInputData() frame count expectations r=pehrsons

The WEBAUDIO_BLOCK_SIZE tolerance was only large enough while aAlreadyBuffered
was always <= WEBAUDIO_BLOCK_SIZE.
A subsequent patch will mean that aAlreadyBuffered is sometimes greater than
WEBAUDIO_BLOCK_SIZE.

The expectation at the end of the test had the incorrect sign on
alreadyBuffered.

Differential Revision: https://phabricator.services.mozilla.com/D267739

Diffstat:
Mdom/media/gtest/TestAudioCallbackDriver.cpp | 37++++++++++++++++++++++++-------------
1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/dom/media/gtest/TestAudioCallbackDriver.cpp b/dom/media/gtest/TestAudioCallbackDriver.cpp @@ -154,29 +154,37 @@ void TestSlowStart(const TrackRate aRate) MOZ_CAN_RUN_SCRIPT_BOUNDARY { nsIThread* mainThread = NS_GetCurrentThread(); Maybe<int64_t> audioStart; - Maybe<uint32_t> alreadyBuffered; + Maybe<uint32_t> firstAlreadyBuffered; int64_t inputFrameCount = 0; int64_t processedFrameCount = -1; ON_CALL(*graph, NotifyInputData) .WillByDefault([&](const AudioDataValue*, size_t aFrames, TrackRate, uint32_t, uint32_t aAlreadyBuffered) { if (!audioStart) { + // GraphDrivers advance state computed time only in block size + // increments and AudioCallbackDriver first advances state computed + // time in the same iteration as NotifyInputData() is first called, + // so the frame after firstAlreadyBuffered.value() aligns with a + // block boundary in state computed time. audioStart = Some(graph->StateComputedTime()); - alreadyBuffered = Some(aAlreadyBuffered); + firstAlreadyBuffered = Some(aAlreadyBuffered); mainThread->Dispatch(NS_NewRunnableFunction(__func__, [&] { // Start processedFrameCount now, ignoring frames processed while // waiting for the fallback driver to stop. processedFrameCount = 0; })); } - EXPECT_NEAR(inputFrameCount, - static_cast<int64_t>(graph->StateComputedTime() - - *audioStart + *alreadyBuffered), - WEBAUDIO_BLOCK_SIZE) + EXPECT_EQ( + PR_ROUNDUP( + inputFrameCount + aAlreadyBuffered - *firstAlreadyBuffered, + WEBAUDIO_BLOCK_SIZE), + static_cast<int64_t>(graph->StateComputedTime() - *audioStart)) << "Input should be behind state time, due to the delayed start. " - "stateComputedTime=" - << graph->StateComputedTime() << ", audioStartTime=" << *audioStart - << ", alreadyBuffered=" << *alreadyBuffered; + << "inputFrameCount=" << inputFrameCount + << ", firstAlreadyBuffered=" << *firstAlreadyBuffered + << ", aAlreadyBuffered=" << aAlreadyBuffered + << ", stateComputedTime=" << graph->StateComputedTime() + << ", audioStartTime=" << *audioStart; inputFrameCount += aFrames; }); @@ -234,10 +242,13 @@ void TestSlowStart(const TrackRate aRate) MOZ_CAN_RUN_SCRIPT_BOUNDARY { processedListener.Disconnect(); EXPECT_EQ(inputFrameCount, processedFrameCount); - EXPECT_NEAR(graph->StateComputedTime() - *audioStart, - inputFrameCount + *alreadyBuffered, WEBAUDIO_BLOCK_SIZE) - << "Graph progresses while audio driver runs. stateComputedTime=" - << graph->StateComputedTime() << ", inputFrameCount=" << inputFrameCount; + EXPECT_EQ( + graph->StateComputedTime() - *audioStart, + PR_ROUNDUP(inputFrameCount - *firstAlreadyBuffered, WEBAUDIO_BLOCK_SIZE)) + << "Graph progresses while audio driver runs. " + << "stateComputedTime=" << graph->StateComputedTime() + << ", inputFrameCount=" << inputFrameCount + << ", firstAlreadyBuffered=" << *firstAlreadyBuffered; } TEST(TestAudioCallbackDriver, SlowStart)