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

Unified Diff: media/audio/audio_output_controller.cc

Issue 2889613003: Remove unnecessary lock in AOC; use atomic ref count instead. (Closed)
Patch Set: Fix comments. 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_output_controller.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_output_controller.cc
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc
index fbc8efd4ef874102582d85479bbaf28a20ac2e7a..8be7b811912cce7a4036921eb261d0e659a490ca 100644
--- a/media/audio/audio_output_controller.cc
+++ b/media/audio/audio_output_controller.cc
@@ -34,6 +34,7 @@ AudioOutputController::AudioOutputController(
output_device_id_(output_device_id),
stream_(NULL),
diverting_to_stream_(NULL),
+ should_duplicate_(0),
volume_(1.0),
state_(kEmpty),
sync_reader_(sync_reader),
@@ -272,12 +273,7 @@ int AudioOutputController::OnMoreData(base::TimeDelta delay,
sync_reader_->RequestMoreData(delay, delay_timestamp, prior_frames_skipped);
- bool need_to_duplicate = false;
- {
- base::AutoLock lock(duplication_targets_lock_);
- need_to_duplicate = !duplication_targets_.empty();
- }
- if (need_to_duplicate) {
+ if (base::AtomicRefCountIsOne(&should_duplicate_)) {
const base::TimeTicks reference_time = delay_timestamp + delay;
std::unique_ptr<AudioBus> copy(AudioBus::Create(params_));
miu 2017/05/18 03:06:29 BTW--The call to AudioBus::Create() here could als
dest->CopyTo(copy.get());
@@ -443,7 +439,9 @@ void AudioOutputController::DoStartDuplicating(AudioPushSink* to_stream) {
if (state_ == kClosed)
return;
- base::AutoLock lock(duplication_targets_lock_);
+ if (duplication_targets_.empty())
+ base::AtomicRefCountInc(&should_duplicate_);
+
duplication_targets_.insert(to_stream);
}
@@ -451,8 +449,11 @@ void AudioOutputController::DoStopDuplicating(AudioPushSink* to_stream) {
DCHECK(message_loop_->BelongsToCurrentThread());
to_stream->Close();
- base::AutoLock lock(duplication_targets_lock_);
duplication_targets_.erase(to_stream);
+ if (duplication_targets_.empty()) {
+ const bool is_nonzero = base::AtomicRefCountDec(&should_duplicate_);
+ DCHECK(!is_nonzero);
+ }
}
std::pair<float, bool> AudioOutputController::ReadCurrentPowerAndClip() {
« no previous file with comments | « media/audio/audio_output_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698