From f25de5aaffea4cd20933c508bd6298d1d8de91a2 Mon Sep 17 00:00:00 2001 From: Paul Adenot Date: Tue, 19 Jan 2021 14:59:44 +0000 Subject: [PATCH] Bug 1678352 - Upload a wav file when the test fails, for diagnosis. r=pehrsons Differential Revision: https://phabricator.services.mozilla.com/D102218 --- dom/media/WavDumper.h | 1 + dom/media/gtest/TestAudioTrackGraph.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/dom/media/WavDumper.h b/dom/media/WavDumper.h index 3fe5dcde85bc..92f0a6774d39 100644 --- a/dom/media/WavDumper.h +++ b/dom/media/WavDumper.h @@ -29,6 +29,7 @@ class WavDumper { fclose(mFile); } } + void Open(const char* aBaseName, uint32_t aChannels, uint32_t aRate) { using namespace mozilla; diff --git a/dom/media/gtest/TestAudioTrackGraph.cpp b/dom/media/gtest/TestAudioTrackGraph.cpp index 874893e18fee..f5dbbb7566ae 100644 --- a/dom/media/gtest/TestAudioTrackGraph.cpp +++ b/dom/media/gtest/TestAudioTrackGraph.cpp @@ -17,6 +17,7 @@ #include "mozilla/Preferences.h" #include "mozilla/SpinEventLoopUntil.h" #include "WaitFor.h" +#include "WavDumper.h" #define DRIFT_BUFFERING_PREF "media.clockdrift.buffering" @@ -534,6 +535,8 @@ TEST(TestAudioTrackGraph, AudioInputTrackDisabling) EXPECT_TRUE(stream->mHasInput); Unused << WaitFor(p); + stream->SetOutputRecordingEnabled(true); + // Wait for a second worth of audio data. GoFaster is dispatched through a // ControlMessage so that it is called in the first audio driver iteration. // Otherwise the audio driver might be going very fast while the fallback @@ -591,6 +594,19 @@ TEST(TestAudioTrackGraph, AudioInputTrackDisabling) Tie(preSilenceSamples, estimatedFreq, nrDiscontinuities) = WaitFor(stream->OutputVerificationEvent()); + const char* dir = getenv("MOZ_UPLOAD_DIR"); + if (dir && nrDiscontinuities != ITERATION_COUNT) { + WavDumper dumper; + char uploadPath[256]; + SprintfLiteral( + uploadPath, "%s/%s.wav", dir, + ::testing::UnitTest::GetInstance()->current_test_info()->name()); + printf("Writing debug WAV to %s\n", uploadPath); + dumper.OpenExplicit(uploadPath, 1, graph->GraphRate()); + auto data = stream->TakeRecordedOutput(); + dumper.Write(data.Elements(), data.Length()); + } + // We're enabling/disabling the track ITERATION_COUNT times, so we expect the // same number of discontinuities. std::cerr << "nrDiscontinuities" << nrDiscontinuities << std::endl;