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

Unified Diff: ppapi/tests/test_audio.cc

Issue 22320004: Add a new parameter |latency| to PPB_Audio. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 3 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 | « ppapi/tests/test_audio.h ('k') | ppapi/thunk/interfaces_ppb_public_stable.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/tests/test_audio.cc
diff --git a/ppapi/tests/test_audio.cc b/ppapi/tests/test_audio.cc
index b3853eaa00c0d6ed5154a8eb5068e9a80d821c94..167efa6c57b81f03be453933706e51a8eca7e69e 100644
--- a/ppapi/tests/test_audio.cc
+++ b/ppapi/tests/test_audio.cc
@@ -24,20 +24,27 @@ TestAudio::TestAudio(TestingInstance* instance)
: TestCase(instance),
audio_callback_method_(NULL),
audio_callback_event_(instance->pp_instance()),
- test_done_(false) {
+ test_done_(false),
+ audio_interface_(NULL),
+ audio_interface_1_0_(NULL),
+ audio_config_interface_(NULL),
+ core_interface_(NULL) {
}
TestAudio::~TestAudio() {
}
bool TestAudio::Init() {
- audio_interface_ = static_cast<const PPB_Audio*>(
- pp::Module::Get()->GetBrowserInterface(PPB_AUDIO_INTERFACE));
+ audio_interface_ = static_cast<const PPB_Audio_1_1*>(
+ pp::Module::Get()->GetBrowserInterface(PPB_AUDIO_INTERFACE_1_1));
+ audio_interface_1_0_ = static_cast<const PPB_Audio_1_0*>(
+ pp::Module::Get()->GetBrowserInterface(PPB_AUDIO_INTERFACE_1_0));
audio_config_interface_ = static_cast<const PPB_AudioConfig*>(
pp::Module::Get()->GetBrowserInterface(PPB_AUDIO_CONFIG_INTERFACE));
core_interface_ = static_cast<const PPB_Core*>(
pp::Module::Get()->GetBrowserInterface(PPB_CORE_INTERFACE));
- return audio_interface_ && audio_config_interface_ && core_interface_;
+ return audio_interface_ && audio_interface_1_0_ && audio_config_interface_ &&
+ core_interface_;
}
void TestAudio::RunTests(const std::string& filter) {
@@ -47,6 +54,7 @@ void TestAudio::RunTests(const std::string& filter) {
RUN_TEST(AudioCallback1, filter);
RUN_TEST(AudioCallback2, filter);
RUN_TEST(AudioCallback3, filter);
+ RUN_TEST(AudioCallback4, filter);
}
// Test creating audio resources for all guaranteed sample rates and various
@@ -118,13 +126,7 @@ std::string TestAudio::TestCreation() {
// Test that releasing the resource without calling |StopPlayback()| "works".
std::string TestAudio::TestDestroyNoStop() {
- const PP_AudioSampleRate kSampleRate = PP_AUDIOSAMPLERATE_44100;
- const uint32_t kRequestFrameCount = 2048;
-
- uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
- instance_->pp_instance(), kSampleRate, kRequestFrameCount);
- PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
- instance_->pp_instance(), kSampleRate, frame_count);
+ PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 2048);
ASSERT_TRUE(ac);
audio_callback_method_ = NULL;
PP_Resource audio = audio_interface_->Create(
@@ -145,16 +147,10 @@ std::string TestAudio::TestDestroyNoStop() {
}
std::string TestAudio::TestFailures() {
- const PP_AudioSampleRate kSampleRate = PP_AUDIOSAMPLERATE_44100;
- const uint32_t kRequestFrameCount = 2048;
-
// Test invalid parameters to |Create()|.
// We want a valid config for some of our tests of |Create()|.
- uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
- instance_->pp_instance(), kSampleRate, kRequestFrameCount);
- PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
- instance_->pp_instance(), kSampleRate, frame_count);
+ PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 2048);
ASSERT_TRUE(ac);
// Failure cases should never lead to the callback being called.
@@ -187,24 +183,17 @@ std::string TestAudio::TestFailures() {
PASS();
}
-// NOTE: |TestAudioCallback1| and |TestAudioCallback2| assume that the audio
-// callback is called at least once. If the audio stream does not start up
-// correctly or is interrupted this may not be the case and these tests will
-// fail. However, in order to properly test the audio callbacks, we must have
-// a configuration where audio can successfully play, so we assume this is the
-// case on bots.
+// NOTE: |TestAudioCallbackN| assumes that the audio callback is called at least
+// once. If the audio stream does not start up correctly or is interrupted this
+// may not be the case and these tests will fail. However, in order to properly
+// test the audio callbacks, we must have a configuration where audio can
+// successfully play, so we assume this is the case on bots.
// This test starts playback and verifies that:
// 1) the audio callback is actually called;
// 2) that |StopPlayback()| waits for the audio callback to finish.
std::string TestAudio::TestAudioCallback1() {
- const PP_AudioSampleRate kSampleRate = PP_AUDIOSAMPLERATE_44100;
- const uint32_t kRequestFrameCount = 1024;
-
- uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
- instance_->pp_instance(), kSampleRate, kRequestFrameCount);
- PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
- instance_->pp_instance(), kSampleRate, frame_count);
+ PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 1024);
ASSERT_TRUE(ac);
audio_callback_method_ = NULL;
PP_Resource audio = audio_interface_->Create(
@@ -234,13 +223,7 @@ std::string TestAudio::TestAudioCallback1() {
// This is the same as |TestAudioCallback1()|, except that instead of calling
// |StopPlayback()|, it just releases the resource.
std::string TestAudio::TestAudioCallback2() {
- const PP_AudioSampleRate kSampleRate = PP_AUDIOSAMPLERATE_44100;
- const uint32_t kRequestFrameCount = 1024;
-
- uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
- instance_->pp_instance(), kSampleRate, kRequestFrameCount);
- PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
- instance_->pp_instance(), kSampleRate, frame_count);
+ PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 1024);
ASSERT_TRUE(ac);
audio_callback_method_ = NULL;
PP_Resource audio = audio_interface_->Create(
@@ -250,7 +233,6 @@ std::string TestAudio::TestAudioCallback2() {
audio_callback_event_.Reset();
test_done_ = false;
- callback_fired_ = false;
audio_callback_method_ = &TestAudio::AudioCallbackTest;
ASSERT_TRUE(audio_interface_->StartPlayback(audio));
@@ -272,13 +254,7 @@ std::string TestAudio::TestAudioCallback2() {
// round of |StartPlayback| and |StopPlayback| to make sure the callback
// function still responds when using the same audio resource.
std::string TestAudio::TestAudioCallback3() {
- const PP_AudioSampleRate kSampleRate = PP_AUDIOSAMPLERATE_44100;
- const uint32_t kRequestFrameCount = 1024;
-
- uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
- instance_->pp_instance(), kSampleRate, kRequestFrameCount);
- PP_Resource ac = audio_config_interface_->CreateStereo16Bit(
- instance_->pp_instance(), kSampleRate, frame_count);
+ PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 1024);
ASSERT_TRUE(ac);
audio_callback_method_ = NULL;
PP_Resource audio = audio_interface_->Create(
@@ -288,7 +264,6 @@ std::string TestAudio::TestAudioCallback3() {
audio_callback_event_.Reset();
test_done_ = false;
- callback_fired_ = false;
audio_callback_method_ = &TestAudio::AudioCallbackTest;
ASSERT_TRUE(audio_interface_->StartPlayback(audio));
@@ -316,6 +291,35 @@ std::string TestAudio::TestAudioCallback3() {
PASS();
}
+// This is the same as |TestAudioCallback1()|, except that it uses
+// PPB_Audio_1_0.
+std::string TestAudio::TestAudioCallback4() {
+ PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 1024);
+ ASSERT_TRUE(ac);
+ audio_callback_method_ = NULL;
+ PP_Resource audio = audio_interface_1_0_->Create(
+ instance_->pp_instance(), ac, AudioCallbackTrampoline1_0, this);
+ core_interface_->ReleaseResource(ac);
+ ac = 0;
+
+ audio_callback_event_.Reset();
+ test_done_ = false;
+
+ audio_callback_method_ = &TestAudio::AudioCallbackTest;
+ ASSERT_TRUE(audio_interface_1_0_->StartPlayback(audio));
+
+ // Wait for the audio callback to be called.
+ audio_callback_event_.Wait();
+ ASSERT_TRUE(audio_interface_1_0_->StopPlayback(audio));
+ test_done_ = true;
+
+ // If any more audio callbacks are generated, we should crash (which is good).
+ audio_callback_method_ = NULL;
+
+ core_interface_->ReleaseResource(audio);
+
+ PASS();
+}
// TODO(raymes): Test that actually playback happens correctly, etc.
@@ -326,6 +330,7 @@ static void Crash() {
// static
void TestAudio::AudioCallbackTrampoline(void* sample_buffer,
uint32_t buffer_size_in_bytes,
+ PP_TimeDelta latency,
void* user_data) {
TestAudio* thiz = static_cast<TestAudio*>(user_data);
@@ -334,19 +339,40 @@ void TestAudio::AudioCallbackTrampoline(void* sample_buffer,
Crash();
AudioCallbackMethod method = thiz->audio_callback_method_;
- (thiz->*method)(sample_buffer, buffer_size_in_bytes);
+ (thiz->*method)(sample_buffer, buffer_size_in_bytes, latency);
+}
+
+// static
+void TestAudio::AudioCallbackTrampoline1_0(void* sample_buffer,
+ uint32_t buffer_size_in_bytes,
+ void* user_data) {
+ AudioCallbackTrampoline(sample_buffer, buffer_size_in_bytes, 0.0, user_data);
}
void TestAudio::AudioCallbackTrivial(void* sample_buffer,
- uint32_t buffer_size_in_bytes) {
+ uint32_t buffer_size_in_bytes,
+ PP_TimeDelta latency) {
+ if (latency < 0)
+ Crash();
+
memset(sample_buffer, 0, buffer_size_in_bytes);
}
void TestAudio::AudioCallbackTest(void* sample_buffer,
- uint32_t buffer_size_in_bytes) {
- if (test_done_)
+ uint32_t buffer_size_in_bytes,
+ PP_TimeDelta latency) {
+ if (test_done_ || latency < 0)
Crash();
memset(sample_buffer, 0, buffer_size_in_bytes);
audio_callback_event_.Signal();
}
+
+PP_Resource TestAudio::CreateAudioConfig(
+ PP_AudioSampleRate sample_rate,
+ uint32_t requested_sample_frame_count) {
+ uint32_t frame_count = audio_config_interface_->RecommendSampleFrameCount(
+ instance_->pp_instance(), sample_rate, requested_sample_frame_count);
+ return audio_config_interface_->CreateStereo16Bit(
+ instance_->pp_instance(), sample_rate, frame_count);
+}
« no previous file with comments | « ppapi/tests/test_audio.h ('k') | ppapi/thunk/interfaces_ppb_public_stable.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698