Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(472)

Unified Diff: media/audio/audio_manager_unittest.cc

Issue 2908073002: Make OS audio buffer size limits visible. (Closed)
Patch Set: Remove pulse-related changes. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/BUILD.gn ('k') | media/audio/cras/audio_manager_cras.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_manager_unittest.cc
diff --git a/media/audio/audio_manager_unittest.cc b/media/audio/audio_manager_unittest.cc
index 904ee12fd9847dffdbf3527025e3a8dd1cb09a87..8e45f5e20da13fbe0fb921723daabf6b5665c644 100644
--- a/media/audio/audio_manager_unittest.cc
+++ b/media/audio/audio_manager_unittest.cc
@@ -26,6 +26,7 @@
#include "media/audio/fake_audio_log_factory.h"
#include "media/audio/fake_audio_manager.h"
#include "media/audio/test_audio_thread.h"
+#include "media/base/limits.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -33,6 +34,11 @@
#include "media/audio/alsa/audio_manager_alsa.h"
#endif // defined(USE_ALSA)
+#if defined(OS_MACOSX)
+#include "media/audio/mac/audio_manager_mac.h"
+#include "media/base/mac/audio_latency_mac.h"
+#endif
+
#if defined(OS_WIN)
#include "base/win/scoped_com_initializer.h"
#include "media/audio/win/audio_manager_win.h"
@@ -677,4 +683,97 @@ TEST_F(AudioManagerTest, AudioDebugRecording) {
audio_manager_->DisableOutputDebugRecording();
}
+#if defined(OS_MACOSX) || defined(USE_CRAS)
+class TestAudioSourceCallback : public AudioOutputStream::AudioSourceCallback {
+ public:
+ TestAudioSourceCallback(int expected_frames_per_buffer,
+ base::WaitableEvent* event)
+ : expected_frames_per_buffer_(expected_frames_per_buffer),
+ event_(event){};
+ ~TestAudioSourceCallback() override{};
+
+ int OnMoreData(base::TimeDelta,
+ base::TimeTicks,
+ int,
+ AudioBus* dest) override {
+ EXPECT_EQ(dest->frames(), expected_frames_per_buffer_);
+ event_->Signal();
+ return 0;
+ }
+
+ void OnError() override { FAIL(); }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestAudioSourceCallback);
+
+ const int expected_frames_per_buffer_;
+ base::WaitableEvent* event_;
+};
+
+// Test that we can create an AudioOutputStream with kMinAudioBufferSize and
+// kMaxAudioBufferSize and that the callback AudioBus is the expected size.
+TEST_F(AudioManagerTest, CheckMinMaxAudioBufferSizeCallbacks) {
+ ABORT_AUDIO_TEST_IF_NOT(OutputDevicesAvailable());
+
+#if defined(OS_MACOSX)
+ CreateAudioManagerForTesting<AudioManagerMac>();
+#elif defined(USE_CRAS)
+ CreateAudioManagerForTesting<AudioManagerCras>();
+#endif
+
+ DCHECK(audio_manager_);
+
+ AudioParameters default_params;
+ GetDefaultOutputStreamParameters(&default_params);
+ ASSERT_LT(default_params.frames_per_buffer(),
+ media::limits::kMaxAudioBufferSize);
+
+#if defined(OS_MACOSX)
+ // On OSX the preferred output buffer size is higher than the minimum
+ // but users may request the minimum size explicitly.
+ ASSERT_GT(default_params.frames_per_buffer(),
+ GetMinAudioBufferSizeMacOS(media::limits::kMinAudioBufferSize,
+ default_params.sample_rate()));
+#elif defined(USE_CRAS)
+ // On CRAS the preferred output buffer size varies per board and may be as low
+ // as the minimum for some boards.
+ ASSERT_GE(default_params.frames_per_buffer(),
+ media::limits::kMinAudioBufferSize);
+#else
+ NOTREACHED();
+#endif
+
+ AudioOutputStream* stream;
+ base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
+ base::WaitableEvent::InitialState::NOT_SIGNALED);
+
+ // Create an output stream with the minimum buffer size parameters and ensure
+ // that no errors are returned.
+ AudioParameters min_params = default_params;
+ min_params.set_frames_per_buffer(media::limits::kMinAudioBufferSize);
+ stream = audio_manager_->MakeAudioOutputStreamProxy(min_params, "");
+ ASSERT_TRUE(stream);
+ EXPECT_TRUE(stream->Open());
+ event.Reset();
+ TestAudioSourceCallback min_source(min_params.frames_per_buffer(), &event);
+ stream->Start(&min_source);
+ event.Wait();
+ stream->Stop();
+ stream->Close();
+
+ // Verify the same for the maximum buffer size.
+ AudioParameters max_params = default_params;
+ max_params.set_frames_per_buffer(media::limits::kMaxAudioBufferSize);
+ stream = audio_manager_->MakeAudioOutputStreamProxy(max_params, "");
+ ASSERT_TRUE(stream);
+ EXPECT_TRUE(stream->Open());
+ event.Reset();
+ TestAudioSourceCallback max_source(max_params.frames_per_buffer(), &event);
+ stream->Start(&max_source);
+ event.Wait();
+ stream->Stop();
+ stream->Close();
+}
+#endif
+
} // namespace media
« no previous file with comments | « media/BUILD.gn ('k') | media/audio/cras/audio_manager_cras.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698