Index: webkit/dom_storage/dom_storage_task_runner.cc |
=================================================================== |
--- webkit/dom_storage/dom_storage_task_runner.cc (revision 126447) |
+++ webkit/dom_storage/dom_storage_task_runner.cc (working copy) |
@@ -21,47 +21,53 @@ |
DomStorageTaskRunner::~DomStorageTaskRunner() { |
} |
-bool DomStorageTaskRunner::PostTask( |
+bool DomStorageTaskRunner::PostDelayedTask( |
const tracked_objects::Location& from_here, |
- const base::Closure& task) { |
- return message_loop_->PostTask(from_here, task); |
+ const base::Closure& task, |
+ base::TimeDelta delay) { |
+ return message_loop_->PostDelayedTask(from_here, task, delay); |
} |
bool DomStorageTaskRunner::PostDelayedTask( |
const tracked_objects::Location& from_here, |
const base::Closure& task, |
- base::TimeDelta delay) { |
- return message_loop_->PostDelayedTask(from_here, task, delay); |
+ int64 delay_ms) { |
+ return PostDelayedTask( |
+ from_here, task, base::TimeDelta::FromMilliseconds(delay_ms)); |
} |
+bool DomStorageTaskRunner::RunsTasksOnCurrentThread() const { |
+ return true; |
+} |
+ |
// DomStorageWorkerPoolTaskRunner |
DomStorageWorkerPoolTaskRunner::DomStorageWorkerPoolTaskRunner( |
base::SequencedWorkerPool* sequenced_worker_pool, |
+ base::SequencedWorkerPool::SequenceToken sequence_token, |
base::MessageLoopProxy* delayed_task_loop) |
: DomStorageTaskRunner(delayed_task_loop), |
sequenced_worker_pool_(sequenced_worker_pool), |
- sequence_token_( |
- sequenced_worker_pool->GetNamedSequenceToken("dom_storage_token")) { |
+ sequence_token_(sequence_token) { |
} |
DomStorageWorkerPoolTaskRunner::~DomStorageWorkerPoolTaskRunner() { |
} |
-bool DomStorageWorkerPoolTaskRunner::PostTask( |
- const tracked_objects::Location& from_here, |
- const base::Closure& task) { |
- // We can skip on shutdown as the destructor of DomStorageArea will ensure |
- // that any remaining data is committed to disk. |
- return sequenced_worker_pool_->PostSequencedWorkerTaskWithShutdownBehavior( |
- sequence_token_, from_here, task, |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
-} |
- |
bool DomStorageWorkerPoolTaskRunner::PostDelayedTask( |
const tracked_objects::Location& from_here, |
const base::Closure& task, |
base::TimeDelta delay) { |
+ // Note base::TaskRunner implements PostTask in terms of PostDelayedTask |
+ // with a delay of zero, we detect that usage and avoid the unecessary |
+ // trip thru the message_loop. |
+ if (delay == base::TimeDelta()) { |
+ // We can skip on shutdown as the destructor of DomStorageArea will ensure |
+ // that any remaining data is committed to disk. |
+ return sequenced_worker_pool_->PostSequencedWorkerTaskWithShutdownBehavior( |
+ sequence_token_, from_here, task, |
+ base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
+ } |
// Post a task to call this->PostTask() after the delay. |
return message_loop_->PostDelayedTask( |
FROM_HERE, |
@@ -81,8 +87,9 @@ |
const tracked_objects::Location& from_here, |
const base::Closure& task, |
base::TimeDelta delay) { |
- // Don't wait in unit tests. |
- return PostTask(from_here, task); |
+ // Squash all delays to zero in our mock. |
+ return DomStorageTaskRunner::PostDelayedTask( |
+ from_here, task, base::TimeDelta()); |
} |
} // namespace dom_storage |