| 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..b3f179814b3c066a7003266358a381aba2df441b 100644
|
| --- a/cc/trees/blocking_task_runner.cc
|
| +++ b/cc/trees/blocking_task_runner.cc
|
| @@ -6,62 +6,27 @@
|
|
|
| #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> runner =
|
| - new BlockingTaskRunner(base::MessageLoopProxy::current());
|
| - task_runners->runners.push_back(runner);
|
| - return runner;
|
| +scoped_ptr<BlockingTaskRunner> BlockingTaskRunner::Create(
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
|
| + return make_scoped_ptr(new BlockingTaskRunner(task_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;
|
| }
|
|
|
| bool BlockingTaskRunner::PostTask(const tracked_objects::Location& from_here,
|
| @@ -94,8 +59,9 @@ void BlockingTaskRunner::SetCapture(bool capture) {
|
| tasks[i].Run();
|
| }
|
|
|
| -BlockingTaskRunner::CapturePostTasks::CapturePostTasks()
|
| - : blocking_runner_(BlockingTaskRunner::current()) {
|
| +BlockingTaskRunner::CapturePostTasks::CapturePostTasks(
|
| + BlockingTaskRunner* blocking_runner)
|
| + : blocking_runner_(blocking_runner) {
|
| blocking_runner_->SetCapture(true);
|
| }
|
|
|
|
|