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

Unified Diff: cc/trees/blocking_task_runner.cc

Issue 485043003: cc: Use correct message loop proxy in BlockingTaskRunner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Help gn deal with it. 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.cc
diff --git a/cc/trees/blocking_task_runner.cc b/cc/trees/blocking_task_runner.cc
index 2586375436d3684e1910db3ee5dee918b53a6107..9a40a5a4c4830329719c655fd37e522291c86f77 100644
--- a/cc/trees/blocking_task_runner.cc
+++ b/cc/trees/blocking_task_runner.cc
@@ -6,62 +6,29 @@
#include <utility>
+#include "base/callback.h"
#include "base/logging.h"
-#include "base/memory/singleton.h"
#include "base/message_loop/message_loop_proxy.h"
namespace cc {
-struct TaskRunnerPairs {
- static TaskRunnerPairs* GetInstance() {
- return Singleton<TaskRunnerPairs>::get();
- }
-
- base::Lock lock;
- std::vector<scoped_refptr<BlockingTaskRunner> > runners;
-
- private:
- friend struct DefaultSingletonTraits<TaskRunnerPairs>;
-};
-
// static
-scoped_refptr<BlockingTaskRunner> BlockingTaskRunner::current() {
- TaskRunnerPairs* task_runners = TaskRunnerPairs::GetInstance();
- base::PlatformThreadId thread_id = base::PlatformThread::CurrentId();
-
- base::AutoLock lock(task_runners->lock);
-
- scoped_refptr<BlockingTaskRunner> current_task_runner;
-
- for (size_t i = 0; i < task_runners->runners.size(); ++i) {
- if (task_runners->runners[i]->thread_id_ == thread_id) {
- current_task_runner = task_runners->runners[i];
- } else if (task_runners->runners[i]->HasOneRef()) {
- task_runners->runners.erase(task_runners->runners.begin() + i);
- i--;
- }
- }
-
- if (current_task_runner.get())
- return current_task_runner;
-
+scoped_refptr<BlockingTaskRunner> BlockingTaskRunner::Create(
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
scoped_refptr<BlockingTaskRunner> runner =
- new BlockingTaskRunner(base::MessageLoopProxy::current());
- task_runners->runners.push_back(runner);
+ new BlockingTaskRunner(task_runner);
return runner;
}
BlockingTaskRunner::BlockingTaskRunner(
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
- : thread_id_(base::PlatformThread::CurrentId()),
- task_runner_(task_runner),
- capture_(0) {
+ : task_runner_(task_runner), capture_(0) {
}
BlockingTaskRunner::~BlockingTaskRunner() {}
bool BlockingTaskRunner::BelongsToCurrentThread() {
- return base::PlatformThread::CurrentId() == thread_id_;
+ return task_runner_ ? task_runner_->BelongsToCurrentThread() : true;
danakj 2014/08/28 17:10:46 The LayerTreeHostNoMessageLoopTest test passes a N
Sami 2014/08/28 18:21:16 It doesn't crash because of the NULL check, which
Sami 2014/08/28 18:24:41 Whoops, I meant any tasks -- captured or not.
}
bool BlockingTaskRunner::PostTask(const tracked_objects::Location& from_here,
@@ -94,8 +61,9 @@ void BlockingTaskRunner::SetCapture(bool capture) {
tasks[i].Run();
}
-BlockingTaskRunner::CapturePostTasks::CapturePostTasks()
- : blocking_runner_(BlockingTaskRunner::current()) {
+BlockingTaskRunner::CapturePostTasks::CapturePostTasks(
+ scoped_refptr<BlockingTaskRunner> blocking_runner)
+ : blocking_runner_(blocking_runner) {
blocking_runner_->SetCapture(true);
}

Powered by Google App Engine
This is Rietveld 408576698