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

Unified Diff: media/audio/audio_debug_file_writer.cc

Issue 2891983002: Make AudioDebugFileWriter::AudioFileWriter use a SequencedTaskRunner (Closed)
Patch Set: move semantic Created 3 years, 7 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/audio/audio_debug_file_writer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_debug_file_writer.cc
diff --git a/media/audio/audio_debug_file_writer.cc b/media/audio/audio_debug_file_writer.cc
index ba181e9e4c24f3f98c27e20d3323e83884f139f2..583f9433b8198ce6da5e0ca646de771d23f879c0 100644
--- a/media/audio/audio_debug_file_writer.cc
+++ b/media/audio/audio_debug_file_writer.cc
@@ -12,6 +12,7 @@
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/sys_byteorder.h"
+#include "base/threading/thread_restrictions.h"
#include "media/base/audio_bus.h"
#include "media/base/audio_sample_types.h"
@@ -134,27 +135,22 @@ void WriteWavHeader(WavHeaderBuffer* buf,
} // namespace
// Manages the debug recording file and writes to it. Can be created on any
-// thread. All the operations must be executed on |task_runner_|. Must be
-// destroyed on |task_runner_|.
+// thread. All the operations must be executed on a thread that has IO
+// permissions.
class AudioDebugFileWriter::AudioFileWriter {
public:
static AudioFileWriterUniquePtr Create(
const base::FilePath& file_name,
const AudioParameters& params,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+ scoped_refptr<base::SequencedTaskRunner> task_runner);
~AudioFileWriter();
// Write data from |data| to file.
void Write(const AudioBus* data);
- scoped_refptr<base::SingleThreadTaskRunner> task_runner() {
- return task_runner_;
- }
-
private:
- AudioFileWriter(const AudioParameters& params,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+ AudioFileWriter(const AudioParameters& params);
// Write wave header to file. Called on the |task_runner_| twice: on
// construction
@@ -179,25 +175,26 @@ class AudioDebugFileWriter::AudioFileWriter {
std::unique_ptr<int16_t[]> interleaved_data_;
int interleaved_data_size_;
- // The task runner this class operates on.
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ SEQUENCE_CHECKER(sequence_checker_);
};
-AudioDebugFileWriter::OnThreadDeleter::OnThreadDeleter() {}
+AudioDebugFileWriter::OnSequenceDeleter::OnSequenceDeleter() {}
+
+AudioDebugFileWriter::OnSequenceDeleter::OnSequenceDeleter(
+ AudioDebugFileWriter::OnSequenceDeleter&& other) = default;
-AudioDebugFileWriter::OnThreadDeleter::OnThreadDeleter(
- const OnThreadDeleter& other)
- : task_runner_(other.task_runner_) {}
+AudioDebugFileWriter::OnSequenceDeleter&
+AudioDebugFileWriter::OnSequenceDeleter::operator=(
+ AudioDebugFileWriter::OnSequenceDeleter&&) = default;
-AudioDebugFileWriter::OnThreadDeleter::OnThreadDeleter(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner)
- : task_runner_(task_runner) {}
+AudioDebugFileWriter::OnSequenceDeleter::OnSequenceDeleter(
+ scoped_refptr<base::SequencedTaskRunner> task_runner)
+ : task_runner_(std::move(task_runner)) {}
-AudioDebugFileWriter::OnThreadDeleter::~OnThreadDeleter() {}
+AudioDebugFileWriter::OnSequenceDeleter::~OnSequenceDeleter() {}
-// AudioFileWriter deleter. Inspired by
-// content::BrowserThread::DeleteOnFileThread.
-void AudioDebugFileWriter::OnThreadDeleter::operator()(
+// AudioFileWriter deleter.
+void AudioDebugFileWriter::OnSequenceDeleter::operator()(
AudioDebugFileWriter::AudioFileWriter* ptr) const {
if (!task_runner_->DeleteSoon(FROM_HERE, ptr)) {
#if defined(UNIT_TEST)
@@ -213,9 +210,9 @@ AudioDebugFileWriter::AudioFileWriterUniquePtr
AudioDebugFileWriter::AudioFileWriter::Create(
const base::FilePath& file_name,
const AudioParameters& params,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
- AudioFileWriterUniquePtr file_writer(new AudioFileWriter(params, task_runner),
- OnThreadDeleter(task_runner));
+ scoped_refptr<base::SequencedTaskRunner> task_runner) {
+ AudioFileWriterUniquePtr file_writer(new AudioFileWriter(params),
+ OnSequenceDeleter(task_runner));
// base::Unretained is safe, because destructor is called on
// |task_runner|.
@@ -227,21 +224,19 @@ AudioDebugFileWriter::AudioFileWriter::Create(
}
AudioDebugFileWriter::AudioFileWriter::AudioFileWriter(
- const AudioParameters& params,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner)
- : samples_(0),
- params_(params),
- interleaved_data_size_(0),
- task_runner_(std::move(task_runner)) {}
+ const AudioParameters& params)
+ : samples_(0), params_(params), interleaved_data_size_(0) {
+ DETACH_FROM_SEQUENCE(sequence_checker_);
+}
AudioDebugFileWriter::AudioFileWriter::~AudioFileWriter() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (file_.IsValid())
WriteHeader();
}
void AudioDebugFileWriter::AudioFileWriter::Write(const AudioBus* data) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK_EQ(params_.channels(), data->channels());
if (!file_.IsValid())
return;
@@ -268,7 +263,7 @@ void AudioDebugFileWriter::AudioFileWriter::Write(const AudioBus* data) {
}
void AudioDebugFileWriter::AudioFileWriter::WriteHeader() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (!file_.IsValid())
return;
WavHeaderBuffer buf;
@@ -282,7 +277,8 @@ void AudioDebugFileWriter::AudioFileWriter::WriteHeader() {
void AudioDebugFileWriter::AudioFileWriter::CreateRecordingFile(
const base::FilePath& file_name) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ base::ThreadRestrictions::AssertIOAllowed();
DCHECK(!file_.IsValid());
file_ = base::File(file_name,
« no previous file with comments | « media/audio/audio_debug_file_writer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698