1
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
5
#ifndef BASE_DEFERRED_SEQUENCED_TASKRUNNER_H_
6
#define BASE_DEFERRED_SEQUENCED_TASKRUNNER_H_
10
#include "base/base_export.h"
11
#include "base/basictypes.h"
12
#include "base/callback.h"
13
#include "base/compiler_specific.h"
14
#include "base/memory/ref_counted.h"
15
#include "base/sequenced_task_runner.h"
16
#include "base/synchronization/lock.h"
17
#include "base/time/time.h"
18
#include "base/tracked_objects.h"
22
// A DeferredSequencedTaskRunner is a subclass of SequencedTaskRunner that
23
// queues up all requests until the first call to Start() is issued.
24
class BASE_EXPORT DeferredSequencedTaskRunner : public SequencedTaskRunner {
26
explicit DeferredSequencedTaskRunner(
27
const scoped_refptr<SequencedTaskRunner>& target_runner);
29
// TaskRunner implementation
30
virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
32
TimeDelta delay) OVERRIDE;
33
virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
35
// SequencedTaskRunner implementation
36
virtual bool PostNonNestableDelayedTask(
37
const tracked_objects::Location& from_here,
39
TimeDelta delay) OVERRIDE;
41
// Start the execution - posts all queued tasks to the target executor. The
42
// deferred tasks are posted with their initial delay, meaning that the task
43
// execution delay is actually measured from Start.
44
// Fails when called a second time.
52
tracked_objects::Location posted_from;
54
// The delay this task was initially posted with.
59
virtual ~DeferredSequencedTaskRunner();
61
// Creates a |Task| object and adds it to |deferred_tasks_queue_|.
62
void QueueDeferredTask(const tracked_objects::Location& from_here,
65
bool is_non_nestable);
67
// // Protects |started_| and |deferred_tasks_queue_|.
71
const scoped_refptr<SequencedTaskRunner> target_task_runner_;
72
std::vector<DeferredTask> deferred_tasks_queue_;
74
DISALLOW_COPY_AND_ASSIGN(DeferredSequencedTaskRunner);
79
#endif // BASE_DEFERRED_SEQUENCED_TASKRUNNER_H_