Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Unified Diff: cc/trees/blocking_task_runner.h

Issue 485043003: cc: Use correct message loop proxy in BlockingTaskRunner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..ca9fec710296346656277f65bd50429a27c46924 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,42 @@ 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 SingleThreadTaskRunner passed to that
danakj 2014/09/03 16:09:36 This comment needs updating to reflect that task r
Sami 2014/09/03 17:59:12 Wordsmith'd.
+// function identifies the thread you want the tasks to run on. It is also 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();
+
+ // 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,20 +77,18 @@ 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);
- base::PlatformThreadId thread_id_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
base::Lock lock_;
int capture_;
std::vector<base::Closure> captured_tasks_;
+
+ DISALLOW_COPY_AND_ASSIGN(BlockingTaskRunner);
};
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698