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

Side by Side Diff: cc/resources/raster_worker_pool.cc

Issue 16190002: cc: Add new RasterWorkerPool interface. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Add missing CheckForCompletedTasks calls Created 7 years, 6 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 unified diff | Download patch
« no previous file with comments | « cc/resources/raster_worker_pool.h ('k') | cc/resources/tile_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 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/resources/raster_worker_pool.h" 5 #include "cc/resources/raster_worker_pool.h"
6 6
7 #include "cc/resources/picture_pile_impl.h" 7 #include "cc/resources/picture_pile_impl.h"
8 8
9 namespace cc { 9 namespace cc {
10 10
11 namespace { 11 namespace {
12 12
13 class RasterWorkerPoolContainerTaskImpl : public internal::WorkerPoolTask { 13 void Noop() {}
14
15 class WorkerPoolTaskImpl : public internal::WorkerPoolTask {
14 public: 16 public:
15 RasterWorkerPoolContainerTaskImpl( 17 WorkerPoolTaskImpl(const base::Closure& callback,
16 internal::WorkerPoolTask::TaskVector* dependencies) 18 const base::Closure& reply)
17 : internal::WorkerPoolTask(dependencies) {
18 }
19
20 // Overridden from internal::WorkerPoolTask:
21 virtual void RunOnThread(unsigned thread_index) OVERRIDE {}
22 virtual void DispatchCompletionCallback() OVERRIDE {}
23
24 private:
25 virtual ~RasterWorkerPoolContainerTaskImpl() {}
26 };
27
28 class RasterWorkerPoolTaskImpl : public internal::WorkerPoolTask {
29 public:
30 RasterWorkerPoolTaskImpl(const base::Closure& callback,
31 const RasterWorkerPool::Task::Reply& reply)
32 : callback_(callback), 19 : callback_(callback),
33 reply_(reply) { 20 reply_(reply) {
34 } 21 }
22 explicit WorkerPoolTaskImpl(
23 internal::WorkerPoolTask::TaskVector* dependencies)
24 : internal::WorkerPoolTask(dependencies),
25 callback_(base::Bind(&Noop)),
26 reply_(base::Bind(&Noop)) {
27 }
35 28
36 // Overridden from internal::WorkerPoolTask: 29 // Overridden from internal::WorkerPoolTask:
37 virtual void RunOnThread(unsigned thread_index) OVERRIDE { 30 virtual void RunOnThread(unsigned thread_index) OVERRIDE {
38 callback_.Run(); 31 callback_.Run();
39 } 32 }
40 virtual void DispatchCompletionCallback() OVERRIDE { 33 virtual void DispatchCompletionCallback() OVERRIDE {
34 reply_.Run();
35 }
36
37 private:
38 virtual ~WorkerPoolTaskImpl() {}
39
40 const base::Closure callback_;
41 const base::Closure reply_;
42
43 DISALLOW_COPY_AND_ASSIGN(WorkerPoolTaskImpl);
44 };
45
46 class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
47 public:
48 RasterWorkerPoolTaskImpl(
49 PicturePileImpl* picture_pile,
50 const Resource* resource,
51 const RasterWorkerPool::RasterTask::Callback& callback,
52 const RasterWorkerPool::RasterTask::Reply& reply,
53 internal::WorkerPoolTask::TaskVector* dependencies)
54 : internal::RasterWorkerPoolTask(resource, dependencies),
55 picture_pile_(picture_pile),
56 callback_(callback),
57 reply_(reply) {
58 }
59
60 // Overridden from internal::RasterWorkerPoolTask:
61 virtual bool RunOnThread(SkDevice* device, unsigned thread_index) OVERRIDE {
62 return callback_.Run(
63 device, picture_pile_->GetCloneForDrawingOnThread(thread_index));
64 }
65 virtual void DispatchCompletionCallback() OVERRIDE {
41 reply_.Run(!HasFinishedRunning()); 66 reply_.Run(!HasFinishedRunning());
42 } 67 }
43 68
44 private: 69 private:
45 virtual ~RasterWorkerPoolTaskImpl() {} 70 virtual ~RasterWorkerPoolTaskImpl() {}
46 71
47 const base::Closure callback_; 72 scoped_refptr<PicturePileImpl> picture_pile_;
reveman 2013/05/30 23:25:18 A tile's PicturePileImpl might change during activ
vmpstr 2013/05/31 15:55:10 I think that makes the most sense.
enne (OOO) 2013/05/31 17:05:38 The reason we change the pile during activation is
48 const RasterWorkerPool::Task::Reply reply_; 73 const RasterWorkerPool::RasterTask::Callback callback_;
49 }; 74 const RasterWorkerPool::RasterTask::Reply reply_;
50 75
51 class RasterWorkerPoolPictureTaskImpl : public internal::WorkerPoolTask { 76 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl);
52 public:
53 RasterWorkerPoolPictureTaskImpl(
54 PicturePileImpl* picture_pile,
55 const RasterWorkerPool::PictureTask::Callback& callback,
56 const RasterWorkerPool::Task::Reply& reply,
57 internal::WorkerPoolTask::TaskVector* dependencies)
58 : internal::WorkerPoolTask(dependencies),
59 picture_pile_(picture_pile),
60 callback_(callback),
61 reply_(reply) {
62 DCHECK(picture_pile_);
63 }
64
65 // Overridden from internal::WorkerPoolTask:
66 virtual void RunOnThread(unsigned thread_index) OVERRIDE {
67 callback_.Run(picture_pile_->GetCloneForDrawingOnThread(thread_index));
68 }
69 virtual void DispatchCompletionCallback() OVERRIDE {
70 reply_.Run(!HasFinishedRunning());
71 }
72
73 private:
74 virtual ~RasterWorkerPoolPictureTaskImpl() {}
75
76 scoped_refptr<PicturePileImpl> picture_pile_;
77 const RasterWorkerPool::PictureTask::Callback callback_;
78 const RasterWorkerPool::Task::Reply reply_;
79 }; 77 };
80 78
81 const char* kWorkerThreadNamePrefix = "CompositorRaster"; 79 const char* kWorkerThreadNamePrefix = "CompositorRaster";
82 80
83 const int kCheckForCompletedTasksDelayMs = 6; 81 const int kCheckForCompletedTasksDelayMs = 6;
84 82
85 } // namespace 83 } // namespace
86 84
87 RasterWorkerPool::Task::Queue::Queue() { 85 namespace internal {
86
87 RasterWorkerPoolTask::RasterWorkerPoolTask(
88 const Resource* resource,
89 WorkerPoolTask::TaskVector* dependencies)
90 : did_run_(false),
91 did_complete_(false),
92 resource_(resource) {
93 dependencies_.swap(*dependencies);
88 } 94 }
89 95
90 RasterWorkerPool::Task::Queue::~Queue() { 96 RasterWorkerPoolTask::~RasterWorkerPoolTask() {
91 } 97 }
92 98
93 void RasterWorkerPool::Task::Queue::Append(const Task& task) { 99 void RasterWorkerPoolTask::DidRun() {
100 DCHECK(!did_run_);
101 did_run_ = true;
102 }
103
104 bool RasterWorkerPoolTask::HasFinishedRunning() const {
105 return did_run_;
106 }
107
108 void RasterWorkerPoolTask::DidComplete() {
109 DCHECK(!did_complete_);
110 did_complete_ = true;
111 }
112
113 bool RasterWorkerPoolTask::HasCompleted() const {
114 return did_complete_;
115 }
116
117 } // namespace internal
118
119 RasterWorkerPool::Task::Set::Set() {
120 }
121
122 RasterWorkerPool::Task::Set::~Set() {
123 }
124
125 void RasterWorkerPool::Task::Set::Insert(const Task& task) {
94 DCHECK(!task.is_null()); 126 DCHECK(!task.is_null());
95 tasks_.push_back(task.internal_); 127 tasks_.push_back(task.internal_);
96 } 128 }
97 129
98 RasterWorkerPool::Task::Task() { 130 RasterWorkerPool::Task::Task() {
99 } 131 }
100 132
101 RasterWorkerPool::Task::Task(const base::Closure& callback, 133 RasterWorkerPool::Task::Task(const base::Closure& callback,
102 const Reply& reply) 134 const base::Closure& reply)
103 : internal_(new RasterWorkerPoolTaskImpl(callback, reply)) { 135 : internal_(new WorkerPoolTaskImpl(callback, reply)) {
104 }
105
106 RasterWorkerPool::Task::Task(Queue* dependencies)
107 : internal_(new RasterWorkerPoolContainerTaskImpl(&dependencies->tasks_)) {
108 }
109
110 RasterWorkerPool::Task::Task(scoped_refptr<internal::WorkerPoolTask> internal)
111 : internal_(internal) {
112 } 136 }
113 137
114 RasterWorkerPool::Task::~Task() { 138 RasterWorkerPool::Task::~Task() {
115 } 139 }
116 140
117 void RasterWorkerPool::Task::Reset() { 141 void RasterWorkerPool::Task::Reset() {
118 internal_ = NULL; 142 internal_ = NULL;
119 } 143 }
120 144
121 RasterWorkerPool::PictureTask::PictureTask(PicturePileImpl* picture_pile, 145 RasterWorkerPool::RasterTask::Queue::Queue() {
122 const Callback& callback,
123 const Reply& reply,
124 Task::Queue* dependencies)
125 : RasterWorkerPool::Task(
126 new RasterWorkerPoolPictureTaskImpl(picture_pile,
127 callback,
128 reply,
129 &dependencies->tasks_)) {
130 } 146 }
131 147
132 RasterWorkerPool::RasterWorkerPool(size_t num_threads) : WorkerPool( 148 RasterWorkerPool::RasterTask::Queue::~Queue() {
133 num_threads, 149 }
134 base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs), 150
135 kWorkerThreadNamePrefix) { 151 void RasterWorkerPool::RasterTask::Queue::Append(const RasterTask& task) {
152 DCHECK(!task.is_null());
153 tasks_.push_back(task.internal_);
154 }
155
156 RasterWorkerPool::RasterTask::RasterTask() {
157 }
158
159 RasterWorkerPool::RasterTask::RasterTask(PicturePileImpl* picture_pile,
160 const Resource* resource,
161 const Callback& callback,
162 const Reply& reply,
163 Task::Set* dependencies)
164 : internal_(new RasterWorkerPoolTaskImpl(picture_pile,
165 resource,
166 callback,
167 reply,
168 &dependencies->tasks_)) {
169 }
170
171 void RasterWorkerPool::RasterTask::Reset() {
172 internal_ = NULL;
173 }
174
175 RasterWorkerPool::RasterTask::~RasterTask() {
176 }
177
178 RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider,
179 size_t num_threads)
180 : WorkerPool(
181 num_threads,
182 base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs),
183 kWorkerThreadNamePrefix),
184 resource_provider_(resource_provider) {
136 } 185 }
137 186
138 RasterWorkerPool::~RasterWorkerPool() { 187 RasterWorkerPool::~RasterWorkerPool() {
139 } 188 }
140 189
141 void RasterWorkerPool::Shutdown() { 190 void RasterWorkerPool::Shutdown() {
142 // Cancel all previously scheduled tasks. 191 raster_tasks_.clear();
143 WorkerPool::ScheduleTasks(NULL);
144
145 WorkerPool::Shutdown(); 192 WorkerPool::Shutdown();
146 } 193 }
147 194
148 void RasterWorkerPool::ScheduleTasks(Task* task) { 195 bool RasterWorkerPool::ForceUploadToComplete(const RasterTask& raster_task) {
149 WorkerPool::ScheduleTasks(task ? task->internal_ : NULL); 196 return false;
197 }
198
199 void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) {
200 raster_tasks_.swap(queue->tasks_);
201 }
202
203 void RasterWorkerPool::ScheduleRasterTasks(
204 internal::WorkerPoolTask::TaskVector* raster_tasks) {
205 if (raster_tasks->empty()) {
206 WorkerPool::ScheduleTasks(NULL);
207 return;
208 }
209
210 scoped_refptr<WorkerPoolTaskImpl> root(new WorkerPoolTaskImpl(raster_tasks));
211 WorkerPool::ScheduleTasks(root);
150 } 212 }
151 213
152 } // namespace cc 214 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool.h ('k') | cc/resources/tile_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698