OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/trees/blocking_task_runner.h" | 5 #include "cc/trees/blocking_task_runner.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 bool BlockingTaskRunner::PostTask(const tracked_objects::Location& from_here, | 67 bool BlockingTaskRunner::PostTask(const tracked_objects::Location& from_here, |
68 const base::Closure& task) { | 68 const base::Closure& task) { |
69 base::AutoLock lock(lock_); | 69 base::AutoLock lock(lock_); |
70 DCHECK(task_runner_.get() || capture_); | 70 DCHECK(task_runner_.get() || capture_); |
71 if (!capture_) | 71 if (!capture_) |
72 return task_runner_->PostTask(from_here, task); | 72 return task_runner_->PostTask(from_here, task); |
73 captured_tasks_.push_back(task); | 73 captured_tasks_.push_back(task); |
74 return true; | 74 return true; |
75 } | 75 } |
76 | 76 |
| 77 void BlockingTaskRunner::SetTaskRunner( |
| 78 scoped_refptr<base::SingleThreadTaskRunner> task_runner) { |
| 79 base::AutoLock lock(lock_); |
| 80 DCHECK(!capture_); |
| 81 task_runner_ = task_runner; |
| 82 } |
| 83 |
77 void BlockingTaskRunner::SetCapture(bool capture) { | 84 void BlockingTaskRunner::SetCapture(bool capture) { |
78 DCHECK(BelongsToCurrentThread()); | 85 DCHECK(BelongsToCurrentThread()); |
79 | 86 |
80 std::vector<base::Closure> tasks; | 87 std::vector<base::Closure> tasks; |
81 | 88 |
82 { | 89 { |
83 base::AutoLock lock(lock_); | 90 base::AutoLock lock(lock_); |
84 capture_ += capture ? 1 : -1; | 91 capture_ += capture ? 1 : -1; |
85 DCHECK_GE(capture_, 0); | 92 DCHECK_GE(capture_, 0); |
86 | 93 |
(...skipping 10 matching lines...) Expand all Loading... |
97 BlockingTaskRunner::CapturePostTasks::CapturePostTasks() | 104 BlockingTaskRunner::CapturePostTasks::CapturePostTasks() |
98 : blocking_runner_(BlockingTaskRunner::current()) { | 105 : blocking_runner_(BlockingTaskRunner::current()) { |
99 blocking_runner_->SetCapture(true); | 106 blocking_runner_->SetCapture(true); |
100 } | 107 } |
101 | 108 |
102 BlockingTaskRunner::CapturePostTasks::~CapturePostTasks() { | 109 BlockingTaskRunner::CapturePostTasks::~CapturePostTasks() { |
103 blocking_runner_->SetCapture(false); | 110 blocking_runner_->SetCapture(false); |
104 } | 111 } |
105 | 112 |
106 } // namespace cc | 113 } // namespace cc |
OLD | NEW |