Chromium Code Reviews| Index: cc/trees/blocking_task_runner.h |
| diff --git a/cc/trees/blocking_task_runner.h b/cc/trees/blocking_task_runner.h |
| index 8388a881e607e6bbcf11e4c30b9d659f1dd54909..a9e8764cb8ac3cb12993c167c9848ee3da82a5a7 100644 |
| --- a/cc/trees/blocking_task_runner.h |
| +++ b/cc/trees/blocking_task_runner.h |
| @@ -8,7 +8,7 @@ |
| #include <vector> |
| #include "base/location.h" |
| -#include "base/memory/ref_counted.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/single_thread_task_runner.h" |
| #include "base/synchronization/lock.h" |
| #include "base/threading/platform_thread.h" |
| @@ -25,38 +25,43 @@ namespace cc { |
| // to when they were posted. |
| // |
| // To use this class, post tasks to the task runner returned by |
| -// BlockingTaskRunner::current() on the thread you want the tasks to run. |
| -// Hold a reference to the BlockingTaskRunner as long as you intend to |
| -// post tasks to it. |
| +// BlockingTaskRunner::Create(). The thread it is created on identifies the |
| +// thread you want the tasks to run on. The SingleThreadTaskRunner which is |
| +// passed into Create() is used to run tasks that are posted when not in a |
| +// capturing state. |
| // |
| -// Then, on the thread from which the BlockingTaskRunner was created, you |
| -// may instantiate a BlockingTaskRunner::CapturePostTasks. While this object |
| +// Then, on the thread that the given task runner belongs to, you may |
| +// instantiate a BlockingTaskRunner::CapturePostTasks. While this object |
| // exists, the task runner will collect any PostTasks called on it, posting |
| // tasks to that thread from anywhere. This CapturePostTasks object provides |
| // a window in time where tasks can shortcut past the MessageLoop. As soon |
| // as the CapturePostTasks object is destroyed (goes out of scope), all |
| -// tasks that had been posted to the thread during the window will be exectuted |
| +// tasks that had been posted to the thread during the window will be executed |
| // immediately. |
| // |
| // Beware of re-entrancy, make sure the CapturePostTasks object is destroyed at |
| // a time when it makes sense for the embedder to call arbitrary things. |
| -class CC_EXPORT BlockingTaskRunner |
| - : public base::RefCountedThreadSafe<BlockingTaskRunner> { |
| +class CC_EXPORT BlockingTaskRunner { |
| public: |
| - // Returns the BlockingTaskRunner for the current thread, creating one if |
| - // necessary. |
| - static scoped_refptr<BlockingTaskRunner> current(); |
| + virtual ~BlockingTaskRunner(); |
|
danakj
2014/09/03 19:47:41
is there a reason this is virtual now? I think thi
Sami
2014/09/04 09:30:47
Right, no need for virtual.
|
| + |
| + // Creates a BlockingTaskRunner for a given SingleThreadTaskRunner. |
| + // |task_runner| will be used to run the tasks which are posted while we are |
| + // not capturing. |task_runner| should belong to same the thread on which |
| + // capturing is done. |
| + static scoped_ptr<BlockingTaskRunner> Create( |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
| // While an object of this type is held alive on a thread, any tasks |
| // posted to the thread will be captured and run as soon as the object |
| - // is destroyed, shortcutting past the MessageLoop. |
| + // is destroyed, shortcutting past the task runner. |
| class CC_EXPORT CapturePostTasks { |
| public: |
| - CapturePostTasks(); |
| + explicit CapturePostTasks(BlockingTaskRunner* blocking_runner); |
| ~CapturePostTasks(); |
| private: |
| - scoped_refptr<BlockingTaskRunner> blocking_runner_; |
| + BlockingTaskRunner* blocking_runner_; |
| DISALLOW_COPY_AND_ASSIGN(CapturePostTasks); |
| }; |
| @@ -73,11 +78,8 @@ class CC_EXPORT BlockingTaskRunner |
| const base::Closure& task); |
| private: |
| - friend class base::RefCountedThreadSafe<BlockingTaskRunner>; |
| - |
| explicit BlockingTaskRunner( |
| scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
| - virtual ~BlockingTaskRunner(); |
| void SetCapture(bool capture); |
| @@ -87,6 +89,8 @@ class CC_EXPORT BlockingTaskRunner |
| base::Lock lock_; |
| int capture_; |
| std::vector<base::Closure> captured_tasks_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BlockingTaskRunner); |
| }; |
| } // namespace cc |