summaryrefslogtreecommitdiffstats
path: root/chromecast
diff options
context:
space:
mode:
authormbjorge <mbjorge@chromium.org>2015-11-03 14:48:33 -0800
committerCommit bot <commit-bot@chromium.org>2015-11-03 22:49:20 +0000
commitdeea2eb7fe33f8a82ddf332167d312c2b7bb9417 (patch)
tree1ce40e4498637b0209566b7873f797d72f434b68 /chromecast
parentc2b2a62709e749b45105c65fefef8ea2dbf13ff6 (diff)
downloadchromium_src-deea2eb7fe33f8a82ddf332167d312c2b7bb9417.zip
chromium_src-deea2eb7fe33f8a82ddf332167d312c2b7bb9417.tar.gz
chromium_src-deea2eb7fe33f8a82ddf332167d312c2b7bb9417.tar.bz2
[Chromecast] Fix AudioVideoPipelineDeviceTest by using WeakPtrs in Backend.
CastAudioOutputSteram::Backend was posting tasks with base::Unretained and unit tests would fail. Changed to use WeakPtr. TEST= cast_media_unittests (on unfork_m47 and ToT w/ x86 build) BUG= internal b/25394171 Review URL: https://codereview.chromium.org/1415943008 Cr-Commit-Position: refs/heads/master@{#357664}
Diffstat (limited to 'chromecast')
-rw-r--r--chromecast/media/audio/cast_audio_output_stream.cc25
-rw-r--r--chromecast/media/audio/cast_audio_output_stream.h1
2 files changed, 18 insertions, 8 deletions
diff --git a/chromecast/media/audio/cast_audio_output_stream.cc b/chromecast/media/audio/cast_audio_output_stream.cc
index cd0cb8e..e8f7e59 100644
--- a/chromecast/media/audio/cast_audio_output_stream.cc
+++ b/chromecast/media/audio/cast_audio_output_stream.cc
@@ -68,7 +68,8 @@ class CastAudioOutputStream::Backend : public MediaPipelineBackend::Delegate {
: audio_params_(audio_params),
decoder_(nullptr),
first_start_(true),
- error_(false) {
+ error_(false),
+ weak_factory_(this) {
thread_checker_.DetachFromThread();
}
~Backend() override {}
@@ -174,6 +175,10 @@ class CastAudioOutputStream::Backend : public MediaPipelineBackend::Delegate {
OnPushBufferComplete(decoder_, MediaPipelineBackend::kBufferFailed);
}
+ base::WeakPtr<CastAudioOutputStream::Backend> GetWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+ }
+
private:
const ::media::AudioParameters audio_params_;
scoped_ptr<MediaPipelineBackend> backend_;
@@ -184,6 +189,8 @@ class CastAudioOutputStream::Backend : public MediaPipelineBackend::Delegate {
bool error_;
scoped_refptr<DecoderBufferBase> backend_buffer_;
base::ThreadChecker thread_checker_;
+ base::WeakPtrFactory<CastAudioOutputStream::Backend> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(Backend);
};
@@ -205,7 +212,9 @@ CastAudioOutputStream::CastAudioOutputStream(
<< audio_params_.AsHumanReadableString();
}
-CastAudioOutputStream::~CastAudioOutputStream() {}
+CastAudioOutputStream::~CastAudioOutputStream() {
+ backend_task_runner_->DeleteSoon(FROM_HERE, backend_.release());
+}
bool CastAudioOutputStream::Open() {
DCHECK(audio_task_runner_->BelongsToCurrentThread());
@@ -229,7 +238,7 @@ bool CastAudioOutputStream::Open() {
bool success = false;
base::WaitableEvent completion_event(false, false);
backend_task_runner_->PostTask(
- FROM_HERE, base::Bind(&Backend::Open, base::Unretained(backend_.get()),
+ FROM_HERE, base::Bind(&Backend::Open, backend_->GetWeakPtr(),
audio_manager_, &success, &completion_event));
completion_event.Wait();
@@ -251,7 +260,7 @@ void CastAudioOutputStream::Close() {
VLOG(1) << __FUNCTION__ << " : " << this;
backend_task_runner_->PostTaskAndReply(
- FROM_HERE, base::Bind(&Backend::Close, base::Unretained(backend_.get())),
+ FROM_HERE, base::Bind(&Backend::Close, backend_->GetWeakPtr()),
base::Bind(&CastAudioOutputStream::OnClosed, base::Unretained(this)));
}
@@ -261,7 +270,7 @@ void CastAudioOutputStream::Start(AudioSourceCallback* source_callback) {
source_callback_ = source_callback;
backend_task_runner_->PostTask(
- FROM_HERE, base::Bind(&Backend::Start, base::Unretained(backend_.get())));
+ FROM_HERE, base::Bind(&Backend::Start, backend_->GetWeakPtr()));
next_push_time_ = base::TimeTicks::Now();
if (!push_in_progress_) {
@@ -279,7 +288,7 @@ void CastAudioOutputStream::Stop() {
source_callback_ = nullptr;
backend_task_runner_->PostTask(
- FROM_HERE, base::Bind(&Backend::Stop, base::Unretained(backend_.get())));
+ FROM_HERE, base::Bind(&Backend::Stop, backend_->GetWeakPtr()));
}
void CastAudioOutputStream::SetVolume(double volume) {
@@ -288,7 +297,7 @@ void CastAudioOutputStream::SetVolume(double volume) {
volume_ = volume;
backend_task_runner_->PostTask(
FROM_HERE, base::Bind(&Backend::SetVolume,
- base::Unretained(backend_.get()), volume));
+ backend_->GetWeakPtr(), volume));
}
void CastAudioOutputStream::GetVolume(double* volume) {
@@ -334,7 +343,7 @@ void CastAudioOutputStream::PushBuffer() {
weak_factory_.GetWeakPtr()));
backend_task_runner_->PostTask(FROM_HERE,
base::Bind(&Backend::PushBuffer,
- base::Unretained(backend_.get()),
+ backend_->GetWeakPtr(),
decoder_buffer_,
completion_cb));
}
diff --git a/chromecast/media/audio/cast_audio_output_stream.h b/chromecast/media/audio/cast_audio_output_stream.h
index 6c54fce..18e92e9 100644
--- a/chromecast/media/audio/cast_audio_output_stream.h
+++ b/chromecast/media/audio/cast_audio_output_stream.h
@@ -58,6 +58,7 @@ class CastAudioOutputStream : public ::media::AudioOutputStream {
scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner_;
base::WeakPtrFactory<CastAudioOutputStream> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(CastAudioOutputStream);
};