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

Side by Side Diff: content/renderer/media/webrtc_audio_renderer.cc

Issue 178153007: Avoid hitting the thread check when WebRtcAudioRenderer is going away. (Closed) Base URL: http://git.chromium.org/chromium/src.git@libjingle_get_stats
Patch Set: Created 6 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/webrtc_audio_renderer.h" 5 #include "content/renderer/media/webrtc_audio_renderer.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 415
416 DCHECK_EQ(state_, PLAYING); 416 DCHECK_EQ(state_, PLAYING);
417 DCHECK_GT(play_ref_count_, 0); 417 DCHECK_GT(play_ref_count_, 0);
418 if (!--play_ref_count_) 418 if (!--play_ref_count_)
419 state_ = PAUSED; 419 state_ = PAUSED;
420 } 420 }
421 421
422 void WebRtcAudioRenderer::Stop() { 422 void WebRtcAudioRenderer::Stop() {
423 DVLOG(1) << "WebRtcAudioRenderer::Stop()"; 423 DVLOG(1) << "WebRtcAudioRenderer::Stop()";
424 DCHECK(thread_checker_.CalledOnValidThread()); 424 DCHECK(thread_checker_.CalledOnValidThread());
425 // Make sure to stop the sink while _not_ holding the lock since the Render()
426 // callback may currently be executing and try to grab the lock while we're
427 // stopping the thread on which it runs.
428 // Stop the sink before calling RemoveAudioRenderer() on the source to make
429 // sure that no more callback will get into the source.
tommi (sloooow) - chröme 2014/03/04 20:48:39 nit: // Stop the sink before calling RemoveAudioRe
no longer working on chromium 2014/03/05 13:01:04 Done.
430 sink_->Stop();
431
425 { 432 {
426 base::AutoLock auto_lock(lock_); 433 base::AutoLock auto_lock(lock_);
427 if (state_ == UNINITIALIZED) 434 if (state_ == UNINITIALIZED)
428 return; 435 return;
429 436
430 if (--start_ref_count_) 437 if (--start_ref_count_)
431 return; 438 return;
432 439
433 DVLOG(1) << "Calling RemoveAudioRenderer and Stop()."; 440 DVLOG(1) << "Calling RemoveAudioRenderer and Stop().";
434 441
435 source_->RemoveAudioRenderer(this); 442 source_->RemoveAudioRenderer(this);
436 source_ = NULL; 443 source_ = NULL;
437 state_ = UNINITIALIZED; 444 state_ = UNINITIALIZED;
438 } 445 }
439
440 // Make sure to stop the sink while _not_ holding the lock since the Render()
441 // callback may currently be executing and try to grab the lock while we're
442 // stopping the thread on which it runs.
443 sink_->Stop();
444 } 446 }
445 447
446 void WebRtcAudioRenderer::SetVolume(float volume) { 448 void WebRtcAudioRenderer::SetVolume(float volume) {
447 DCHECK(thread_checker_.CalledOnValidThread()); 449 DCHECK(thread_checker_.CalledOnValidThread());
448 DCHECK(volume >= 0.0f && volume <= 1.0f); 450 DCHECK(volume >= 0.0f && volume <= 1.0f);
449 451
450 playing_state_.set_volume(volume); 452 playing_state_.set_volume(volume);
451 OnPlayStateChanged(media_stream_, &playing_state_); 453 OnPlayStateChanged(media_stream_, &playing_state_);
452 } 454 }
453 455
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 if (RemovePlayingState(source, state)) 585 if (RemovePlayingState(source, state))
584 EnterPauseState(); 586 EnterPauseState();
585 } else if (AddPlayingState(source, state)) { 587 } else if (AddPlayingState(source, state)) {
586 EnterPlayState(); 588 EnterPlayState();
587 } 589 }
588 UpdateSourceVolume(source); 590 UpdateSourceVolume(source);
589 } 591 }
590 } 592 }
591 593
592 } // namespace content 594 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698