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

Unified Diff: content/browser/renderer_host/media/audio_input_debug_writer_unittest.cc

Issue 2390153006: Audio input debug recording refactoring to reduce thread hops and simplify object ownership (Closed)
Patch Set: Rebase Created 4 years, 2 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
Index: content/browser/renderer_host/media/audio_input_debug_writer_unittest.cc
diff --git a/content/browser/renderer_host/media/audio_input_debug_writer_unittest.cc b/content/browser/renderer_host/media/audio_input_debug_writer_unittest.cc
index ee8b5d5cdfd9784f055bca0b9c07640d500ebdc6..d2212ec3501ff32b1ad245c1eec5dc5b7cbddbf6 100644
--- a/content/browser/renderer_host/media/audio_input_debug_writer_unittest.cc
+++ b/content/browser/renderer_host/media/audio_input_debug_writer_unittest.cc
@@ -5,6 +5,8 @@
#include <stdint.h>
#include "base/files/file_util.h"
+#include "base/memory/ptr_util.h"
+#include "base/synchronization/waitable_event.h"
#include "base/sys_byteorder.h"
#include "content/browser/renderer_host/media/audio_input_debug_writer.h"
#include "content/public/browser/browser_thread.h"
@@ -41,7 +43,8 @@ class AudioInputDebugWriterTest
: public testing::TestWithParam<AudioInputDebugWriterTestData> {
public:
AudioInputDebugWriterTest()
- : params_(media::AudioParameters::Format::AUDIO_PCM_LINEAR,
+ : thread_bundle_(content::TestBrowserThreadBundle::REAL_FILE_THREAD),
+ params_(media::AudioParameters::Format::AUDIO_PCM_LINEAR,
std::tr1::get<0>(GetParam()),
std::tr1::get<1>(GetParam()),
kBytesPerSample * 8,
@@ -152,17 +155,10 @@ class AudioInputDebugWriterTest
void TestDoneOnFileThread(const base::Closure& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- // |writer| must be destroyed on FILE thread.
- input_debug_writer_.reset(nullptr);
callback.Run();
}
- void DoDebugRecording(base::File file) {
- if (!file.IsValid())
- return;
-
- input_debug_writer_.reset(
- new AudioInputDebugWriter(std::move(file), params_));
+ void DoDebugRecording() {
// Write tasks are posted to BrowserThread::FILE.
for (int i = 0; i < writes_; ++i) {
std::unique_ptr<media::AudioBus> bus = media::AudioBus::Create(
@@ -175,7 +171,9 @@ class AudioInputDebugWriterTest
input_debug_writer_->Write(std::move(bus));
}
+ }
+ void WaitForRecordingCompletion() {
media::WaitableMessageLoopEvent event;
// Post a task to BrowserThread::FILE indicating that all the writes are
@@ -189,6 +187,28 @@ class AudioInputDebugWriterTest
event.RunAndWait();
}
+ void RecordAndVerifyOnce() {
+ base::FilePath file_path;
+ EXPECT_TRUE(base::CreateTemporaryFile(&file_path));
+
+ input_debug_writer_->Start(file_path);
+
+ DoDebugRecording();
+
+ input_debug_writer_->Stop();
+
+ WaitForRecordingCompletion();
+
+ VerifyRecording(file_path);
+
+ if (::testing::Test::HasFailure()) {
+ LOG(ERROR) << "Test failed; keeping recording(s) at ["
+ << file_path.value().c_str() << "].";
+ } else {
+ EXPECT_TRUE(base::DeleteFile(file_path, false));
+ }
+ }
+
protected:
TestBrowserThreadBundle thread_bundle_;
@@ -211,15 +231,37 @@ class AudioInputDebugWriterTest
DISALLOW_COPY_AND_ASSIGN(AudioInputDebugWriterTest);
};
+class AudioInputDebugWriterBehavioralTest : public AudioInputDebugWriterTest {};
+
TEST_P(AudioInputDebugWriterTest, WaveRecordingTest) {
+ input_debug_writer_.reset(new AudioInputDebugWriter(params_));
+
+ RecordAndVerifyOnce();
+}
+
+TEST_P(AudioInputDebugWriterBehavioralTest,
+ DeletedBeforeRecordingFinishedOnFileThread) {
+ input_debug_writer_.reset(new AudioInputDebugWriter(params_));
+
base::FilePath file_path;
EXPECT_TRUE(base::CreateTemporaryFile(&file_path));
- base::File file(file_path,
- base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
- EXPECT_TRUE(file.IsValid());
+ base::WaitableEvent* wait_for_deletion =
+ new base::WaitableEvent(base::WaitableEvent::ResetPolicy::MANUAL,
+ base::WaitableEvent::InitialState::NOT_SIGNALED);
+
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
+ base::Bind(&base::WaitableEvent::Wait, base::Owned(wait_for_deletion)));
+
+ input_debug_writer_->Start(file_path);
+
+ DoDebugRecording();
- DoDebugRecording(std::move(file));
+ input_debug_writer_.reset();
+ wait_for_deletion->Signal();
+
+ WaitForRecordingCompletion();
VerifyRecording(file_path);
@@ -231,10 +273,36 @@ TEST_P(AudioInputDebugWriterTest, WaveRecordingTest) {
}
}
+TEST_P(AudioInputDebugWriterBehavioralTest, FileCreationError) {
+ input_debug_writer_.reset(new AudioInputDebugWriter(params_));
+ base::FilePath file_path; // Empty file name.
+ input_debug_writer_->Start(file_path);
+ DoDebugRecording();
+}
+
+TEST_P(AudioInputDebugWriterBehavioralTest, StartStopStartStop) {
+ input_debug_writer_.reset(new AudioInputDebugWriter(params_));
+ RecordAndVerifyOnce();
+ RecordAndVerifyOnce();
+}
+
+TEST_P(AudioInputDebugWriterBehavioralTest, DestroyNotStarted) {
+ input_debug_writer_.reset(new AudioInputDebugWriter(params_));
+ input_debug_writer_.reset();
+}
+
+TEST_P(AudioInputDebugWriterBehavioralTest, DestroyStarted) {
+ input_debug_writer_.reset(new AudioInputDebugWriter(params_));
+ base::FilePath file_path;
+ EXPECT_TRUE(base::CreateTemporaryFile(&file_path));
+ input_debug_writer_->Start(file_path);
+ input_debug_writer_.reset();
+}
+
INSTANTIATE_TEST_CASE_P(
AudioInputDebugWriterTest,
AudioInputDebugWriterTest,
- // Using 10ms sframes per buffer everywhere.
+ // Using 10ms frames per buffer everywhere.
testing::Values(
// No writes.
std::tr1::make_tuple(media::ChannelLayout::CHANNEL_LAYOUT_MONO,
@@ -267,4 +335,15 @@ INSTANTIATE_TEST_CASE_P(
48000 / 100,
1500)));
+INSTANTIATE_TEST_CASE_P(
+ AudioInputDebugWriterBehavioralTest,
+ AudioInputDebugWriterBehavioralTest,
+ // Using 10ms frames per buffer everywhere.
+ testing::Values(
+ // No writes.
+ std::tr1::make_tuple(media::ChannelLayout::CHANNEL_LAYOUT_MONO,
+ 44100,
+ 44100 / 100,
+ 100)));
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698