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

Unified Diff: content/renderer/media/audio_device.cc

Issue 9104043: Monitor the IO message loop in the AudioDevice classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 11 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/renderer/media/audio_device.cc
diff --git a/content/renderer/media/audio_device.cc b/content/renderer/media/audio_device.cc
index 19349c9116169543d521b6fd4fd336726bdcb294..7f787dc6cf526548c146ad91dcae700b90924472 100644
--- a/content/renderer/media/audio_device.cc
+++ b/content/renderer/media/audio_device.cc
@@ -4,7 +4,6 @@
#include "content/renderer/media/audio_device.h"
-#include "base/bind.h"
#include "base/debug/trace_event.h"
#include "base/message_loop.h"
#include "base/threading/thread_restrictions.h"
@@ -100,13 +99,12 @@ void AudioDevice::Start() {
params.bits_per_sample = bits_per_sample_;
params.samples_per_packet = buffer_size_;
- ChildProcess::current()->io_message_loop()->PostTask(
- FROM_HERE,
+ loop()->PostTask(FROM_HERE,
base::Bind(&AudioDevice::InitializeOnIOThread, this, params));
}
void AudioDevice::Stop() {
- DCHECK(MessageLoop::current() != ChildProcess::current()->io_message_loop());
+ DCHECK(!loop()->BelongsToCurrentThread());
// Stop and shutdown the audio thread from the IO thread.
// This operation must be synchronous for now since the |callback_| pointer
@@ -114,21 +112,19 @@ void AudioDevice::Stop() {
// returns (and FireRenderCallback might dereference a bogus pointer).
// TODO(tommi): Add an Uninitialize() method to AudioRendererSink?
base::WaitableEvent done(true, false);
- ChildProcess::current()->io_message_loop()->PostTask(
- FROM_HERE,
- base::Bind(&AudioDevice::ShutDownOnIOThread, this, &done));
- done.Wait();
+ if (loop()->PostTask(FROM_HERE,
+ base::Bind(&AudioDevice::ShutDownOnIOThread, this, &done))) {
+ done.Wait();
+ }
}
void AudioDevice::Play() {
- ChildProcess::current()->io_message_loop()->PostTask(
- FROM_HERE,
+ loop()->PostTask(FROM_HERE,
base::Bind(&AudioDevice::PlayOnIOThread, this));
}
void AudioDevice::Pause(bool flush) {
- ChildProcess::current()->io_message_loop()->PostTask(
- FROM_HERE,
+ loop()->PostTask(FROM_HERE,
base::Bind(&AudioDevice::PauseOnIOThread, this, flush));
}
@@ -136,9 +132,10 @@ bool AudioDevice::SetVolume(double volume) {
if (volume < 0 || volume > 1.0)
return false;
- ChildProcess::current()->io_message_loop()->PostTask(
- FROM_HERE,
- base::Bind(&AudioDevice::SetVolumeOnIOThread, this, volume));
+ if (!loop()->PostTask(FROM_HERE,
+ base::Bind(&AudioDevice::SetVolumeOnIOThread, this, volume))) {
+ return false;
+ }
volume_ = volume;
@@ -151,7 +148,7 @@ void AudioDevice::GetVolume(double* volume) {
}
void AudioDevice::InitializeOnIOThread(const AudioParameters& params) {
- DCHECK_EQ(MessageLoop::current(), ChildProcess::current()->io_message_loop());
+ DCHECK(loop()->BelongsToCurrentThread());
// Make sure we don't create the stream more than once.
DCHECK_EQ(0, stream_id_);
if (stream_id_)
@@ -162,7 +159,7 @@ void AudioDevice::InitializeOnIOThread(const AudioParameters& params) {
}
void AudioDevice::PlayOnIOThread() {
- DCHECK_EQ(MessageLoop::current(), ChildProcess::current()->io_message_loop());
+ DCHECK(loop()->BelongsToCurrentThread());
if (stream_id_ && is_started_)
Send(new AudioHostMsg_PlayStream(stream_id_));
else
@@ -170,7 +167,7 @@ void AudioDevice::PlayOnIOThread() {
}
void AudioDevice::PauseOnIOThread(bool flush) {
- DCHECK_EQ(MessageLoop::current(), ChildProcess::current()->io_message_loop());
+ DCHECK(loop()->BelongsToCurrentThread());
if (stream_id_ && is_started_) {
Send(new AudioHostMsg_PauseStream(stream_id_));
if (flush)
@@ -183,7 +180,7 @@ void AudioDevice::PauseOnIOThread(bool flush) {
}
void AudioDevice::ShutDownOnIOThread(base::WaitableEvent* signal) {
- DCHECK_EQ(MessageLoop::current(), ChildProcess::current()->io_message_loop());
+ DCHECK(loop()->BelongsToCurrentThread());
// Make sure we don't call shutdown more than once.
if (stream_id_) {
@@ -196,11 +193,12 @@ void AudioDevice::ShutDownOnIOThread(base::WaitableEvent* signal) {
ShutDownAudioThread();
}
- signal->Signal();
+ if (signal)
+ signal->Signal();
}
void AudioDevice::SetVolumeOnIOThread(double volume) {
- DCHECK_EQ(MessageLoop::current(), ChildProcess::current()->io_message_loop());
+ DCHECK(loop()->BelongsToCurrentThread());
if (stream_id_)
Send(new AudioHostMsg_SetVolume(stream_id_, volume));
}
@@ -216,8 +214,7 @@ void AudioDevice::OnStateChanged(AudioStreamState state) {
}
}
-void AudioDevice::OnCreated(
- base::SharedMemoryHandle handle, uint32 length) {
+void AudioDevice::OnCreated(base::SharedMemoryHandle handle, uint32 length) {
// Not needed in this simple implementation.
}
@@ -225,7 +222,7 @@ void AudioDevice::OnLowLatencyCreated(
base::SharedMemoryHandle handle,
base::SyncSocket::Handle socket_handle,
uint32 length) {
- DCHECK_EQ(MessageLoop::current(), ChildProcess::current()->io_message_loop());
+ DCHECK(loop()->BelongsToCurrentThread());
DCHECK_GE(length, buffer_size_ * sizeof(int16) * channels_);
#if defined(OS_WIN)
DCHECK(handle);
@@ -328,7 +325,7 @@ size_t AudioDevice::FireRenderCallback(int16* data) {
}
void AudioDevice::ShutDownAudioThread() {
- DCHECK_EQ(MessageLoop::current(), ChildProcess::current()->io_message_loop());
+ DCHECK(loop()->BelongsToCurrentThread());
if (audio_thread_.get()) {
// Close the socket to terminate the main thread function in the

Powered by Google App Engine
This is Rietveld 408576698