diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-26 22:05:31 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-26 22:05:31 +0000 |
commit | 8786b90ec7b8c0706ab4173faa4861f6ddc50eca (patch) | |
tree | 61a3f4349cd8154d8cf98782ffd0e122e56c17d8 /media/audio/audio_input_controller.cc | |
parent | 86f24311984327d522d060bceb8adacfad64c896 (diff) | |
download | chromium_src-8786b90ec7b8c0706ab4173faa4861f6ddc50eca.zip chromium_src-8786b90ec7b8c0706ab4173faa4861f6ddc50eca.tar.gz chromium_src-8786b90ec7b8c0706ab4173faa4861f6ddc50eca.tar.bz2 |
Revert 128993 - Refactor BaseTimer to avoid spamming the MessageLoop with orphaned tasks.
This change maintains the same API promises*, but instead of orphaning tasks when they are stopped, the BaseTimer_Helper class holds on to the task until either (1) it expires or (2) the user requests a delay that would arrive earlier than the pending task. If the user requests a longer delay than the pending task, a followup task will be posted when the pending task fires to span the remaining time.
* The one change of usage is related to threading. The threading requirements are now more strict. It is not allowed to destruct a timer on a different thread than the one used to post tasks. A thread ID DCHECK is now in place that will help catch misuse. Some existing instances are changed as part of this CL.
A side effect of this change is that the BaseTimer and DelayTimer are simplified to use features of BaseTimer_Helper (which is now called Timer).
As suggested in timer.h, I ran the disabled TimerTest tests from linux, and they pass consistently. I also added some new tests to verify correct run states.
BUG=117451,103667,119714,119750
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=128412
Reverted: http://src.chromium.org/viewvc/chrome?view=rev&revision=128506
Review URL: https://chromiumcodereview.appspot.com/9655006
TBR=jbates@chromium.org
Review URL: https://chromiumcodereview.appspot.com/9791009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129018 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/audio_input_controller.cc')
-rw-r--r-- | media/audio/audio_input_controller.cc | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc index bf6f2ea..67623da 100644 --- a/media/audio/audio_input_controller.cc +++ b/media/audio/audio_input_controller.cc @@ -23,13 +23,13 @@ AudioInputController::AudioInputController(EventHandler* handler, : creator_loop_(base::MessageLoopProxy::current()), handler_(handler), stream_(NULL), + ALLOW_THIS_IN_INITIALIZER_LIST(no_data_timer_(FROM_HERE, + base::TimeDelta::FromSeconds(kTimerResetInterval), + this, + &AudioInputController::DoReportNoDataError)), state_(kEmpty), sync_writer_(sync_writer) { DCHECK(creator_loop_); - no_data_timer_.reset(new base::DelayTimer<AudioInputController>(FROM_HERE, - base::TimeDelta::FromSeconds(kTimerResetInterval), - this, - &AudioInputController::DoReportNoDataError)); } AudioInputController::~AudioInputController() { @@ -103,11 +103,6 @@ void AudioInputController::Record() { void AudioInputController::Close(const base::Closure& closed_task) { DCHECK(!closed_task.is_null()); - DCHECK(creator_loop_->BelongsToCurrentThread()); - // See crbug.com/119783: Deleting the timer now to avoid disaster if - // AudioInputController is destructed on a thread other than the creator - // thread. - no_data_timer_.reset(); message_loop_->PostTaskAndReply( FROM_HERE, base::Bind(&AudioInputController::DoClose, this), closed_task); } @@ -185,8 +180,7 @@ void AudioInputController::DoReportNoDataError() { void AudioInputController::DoResetNoDataTimer() { DCHECK(creator_loop_->BelongsToCurrentThread()); - if (no_data_timer_.get()) - no_data_timer_->Reset(); + no_data_timer_.Reset(); } void AudioInputController::OnData(AudioInputStream* stream, const uint8* data, |