Chromium Code Reviews| 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); |
| } |