| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | 
							- // Copyright (c) 2013 The Chromium Authors. All rights reserved.
 
- // Use of this source code is governed by a BSD-style license that can be
 
- // found in the LICENSE file.
 
- #ifndef BASE_DEFERRED_SEQUENCED_TASK_RUNNER_H_
 
- #define BASE_DEFERRED_SEQUENCED_TASK_RUNNER_H_
 
- #include <vector>
 
- #include "base/base_export.h"
 
- #include "base/callback.h"
 
- #include "base/compiler_specific.h"
 
- #include "base/macros.h"
 
- #include "base/memory/ref_counted.h"
 
- #include "base/sequenced_task_runner.h"
 
- #include "base/synchronization/lock.h"
 
- #include "base/threading/platform_thread.h"
 
- #include "base/time/time.h"
 
- namespace base {
 
- // A DeferredSequencedTaskRunner is a subclass of SequencedTaskRunner that
 
- // queues up all requests until the first call to Start() is issued.
 
- // DeferredSequencedTaskRunner may be created in two ways:
 
- // . with an explicit SequencedTaskRunner that the events are flushed to
 
- // . without a SequencedTaskRunner. In this configuration the
 
- //   SequencedTaskRunner is supplied in StartWithTaskRunner().
 
- class BASE_EXPORT DeferredSequencedTaskRunner : public SequencedTaskRunner {
 
-  public:
 
-   explicit DeferredSequencedTaskRunner(
 
-       scoped_refptr<SequencedTaskRunner> target_runner);
 
-   // Use this constructor when you don't have the target SequencedTaskRunner.
 
-   // When using this call StartWithTaskRunner().
 
-   DeferredSequencedTaskRunner();
 
-   // TaskRunner implementation
 
-   bool PostDelayedTask(const Location& from_here,
 
-                        OnceClosure task,
 
-                        TimeDelta delay) override;
 
-   bool RunsTasksInCurrentSequence() const override;
 
-   // SequencedTaskRunner implementation
 
-   bool PostNonNestableDelayedTask(const Location& from_here,
 
-                                   OnceClosure task,
 
-                                   TimeDelta delay) override;
 
-   // Start the execution - posts all queued tasks to the target executor. The
 
-   // deferred tasks are posted with their initial delay, meaning that the task
 
-   // execution delay is actually measured from Start.
 
-   // Fails when called a second time.
 
-   void Start();
 
-   // Same as Start(), but must be used with the no-arg constructor.
 
-   void StartWithTaskRunner(
 
-       scoped_refptr<SequencedTaskRunner> target_task_runner);
 
-  private:
 
-   struct DeferredTask  {
 
-     DeferredTask();
 
-     DeferredTask(DeferredTask&& other);
 
-     ~DeferredTask();
 
-     DeferredTask& operator=(DeferredTask&& other);
 
-     Location posted_from;
 
-     OnceClosure task;
 
-     // The delay this task was initially posted with.
 
-     TimeDelta delay;
 
-     bool is_non_nestable;
 
-   };
 
-   ~DeferredSequencedTaskRunner() override;
 
-   // Both variants of Start() call into this.
 
-   void StartImpl();
 
-   // Creates a |Task| object and adds it to |deferred_tasks_queue_|.
 
-   void QueueDeferredTask(const Location& from_here,
 
-                          OnceClosure task,
 
-                          TimeDelta delay,
 
-                          bool is_non_nestable);
 
-   // // Protects |started_| and |deferred_tasks_queue_|.
 
-   mutable Lock lock_;
 
-   const PlatformThreadId created_thread_id_;
 
-   bool started_ = false;
 
-   scoped_refptr<SequencedTaskRunner> target_task_runner_;
 
-   std::vector<DeferredTask> deferred_tasks_queue_;
 
-   DISALLOW_COPY_AND_ASSIGN(DeferredSequencedTaskRunner);
 
- };
 
- }  // namespace base
 
- #endif  // BASE_DEFERRED_SEQUENCED_TASK_RUNNER_H_
 
 
  |