summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-26 22:05:31 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-26 22:05:31 +0000
commit8786b90ec7b8c0706ab4173faa4861f6ddc50eca (patch)
tree61a3f4349cd8154d8cf98782ffd0e122e56c17d8 /media
parent86f24311984327d522d060bceb8adacfad64c896 (diff)
downloadchromium_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')
-rw-r--r--media/audio/audio_input_controller.cc16
-rw-r--r--media/audio/audio_input_controller.h4
2 files changed, 7 insertions, 13 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,
diff --git a/media/audio/audio_input_controller.h b/media/audio/audio_input_controller.h
index feeb895..88cfb80 100644
--- a/media/audio/audio_input_controller.h
+++ b/media/audio/audio_input_controller.h
@@ -144,7 +144,7 @@ class MEDIA_EXPORT AudioInputController
SyncWriter* sync_writer);
// Starts recording using the created audio input stream.
- // This method is called on the creator thread.
+ // This method is called on the audio thread.
virtual void Record();
// Closes the audio input stream. The state is changed and the resources
@@ -215,7 +215,7 @@ class MEDIA_EXPORT AudioInputController
// when an audio input device is unplugged whilst recording on Windows.
// See http://crbug.com/79936 for details.
// This member is only touched by the creating thread.
- scoped_ptr<base::DelayTimer<AudioInputController> > no_data_timer_;
+ base::DelayTimer<AudioInputController> no_data_timer_;
// |state_| is written on the audio thread and is read on the hardware audio
// thread. These operations need to be locked. But lock is not required for