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/resources/pixel_buffer_raster_worker_pool.h" | 5 #include "cc/resources/pixel_buffer_raster_worker_pool.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/containers/stack_container.h" | 9 #include "base/containers/stack_container.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
11 #include "cc/debug/traced_value.h" | 11 #include "cc/debug/traced_value.h" |
12 #include "cc/resources/resource.h" | 12 #include "cc/resources/resource.h" |
13 | 13 |
14 namespace cc { | 14 namespace cc { |
15 namespace { | 15 namespace { |
16 | 16 |
17 const int kCheckForCompletedRasterTasksDelayMs = 6; | 17 const int kCheckForCompletedRasterTasksDelayMs = 6; |
18 | 18 |
19 const size_t kMaxScheduledRasterTasks = 48; | 19 const size_t kMaxScheduledRasterTasks = 48; |
20 | 20 |
21 typedef base::StackVector<internal::WorkerPoolTask*, kMaxScheduledRasterTasks> | 21 typedef base::StackVector<internal::RasterTask*, kMaxScheduledRasterTasks> |
22 WorkerPoolTaskVector; | 22 RasterTaskVector; |
23 | 23 |
24 } // namespace | 24 } // namespace |
25 | 25 |
26 // static | 26 // static |
27 scoped_ptr<PixelBufferRasterWorkerPool> PixelBufferRasterWorkerPool::Create( | 27 scoped_ptr<RasterWorkerPool> PixelBufferRasterWorkerPool::Create( |
28 base::SequencedTaskRunner* task_runner, | 28 base::SequencedTaskRunner* task_runner, |
29 internal::TaskGraphRunner* task_graph_runner, | |
29 ResourceProvider* resource_provider, | 30 ResourceProvider* resource_provider, |
30 size_t max_transfer_buffer_usage_bytes) { | 31 size_t max_transfer_buffer_usage_bytes) { |
31 return make_scoped_ptr( | 32 return make_scoped_ptr<RasterWorkerPool>( |
32 new PixelBufferRasterWorkerPool(task_runner, | 33 new PixelBufferRasterWorkerPool(task_runner, |
33 GetTaskGraphRunner(), | 34 task_graph_runner, |
34 resource_provider, | 35 resource_provider, |
35 max_transfer_buffer_usage_bytes)); | 36 max_transfer_buffer_usage_bytes)); |
36 } | 37 } |
37 | 38 |
38 PixelBufferRasterWorkerPool::PixelBufferRasterWorkerPool( | 39 PixelBufferRasterWorkerPool::PixelBufferRasterWorkerPool( |
39 base::SequencedTaskRunner* task_runner, | 40 base::SequencedTaskRunner* task_runner, |
40 internal::TaskGraphRunner* task_graph_runner, | 41 internal::TaskGraphRunner* task_graph_runner, |
41 ResourceProvider* resource_provider, | 42 ResourceProvider* resource_provider, |
42 size_t max_transfer_buffer_usage_bytes) | 43 size_t max_transfer_buffer_usage_bytes) |
43 : task_runner_(task_runner), | 44 : task_runner_(task_runner), |
(...skipping 17 matching lines...) Expand all Loading... | |
61 | 62 |
62 PixelBufferRasterWorkerPool::~PixelBufferRasterWorkerPool() { | 63 PixelBufferRasterWorkerPool::~PixelBufferRasterWorkerPool() { |
63 DCHECK(!check_for_completed_raster_tasks_pending_); | 64 DCHECK(!check_for_completed_raster_tasks_pending_); |
64 DCHECK_EQ(0u, raster_task_states_.size()); | 65 DCHECK_EQ(0u, raster_task_states_.size()); |
65 DCHECK_EQ(0u, raster_tasks_with_pending_upload_.size()); | 66 DCHECK_EQ(0u, raster_tasks_with_pending_upload_.size()); |
66 DCHECK_EQ(0u, completed_raster_tasks_.size()); | 67 DCHECK_EQ(0u, completed_raster_tasks_.size()); |
67 DCHECK_EQ(0u, completed_image_decode_tasks_.size()); | 68 DCHECK_EQ(0u, completed_image_decode_tasks_.size()); |
68 DCHECK_EQ(0u, raster_tasks_required_for_activation_count_); | 69 DCHECK_EQ(0u, raster_tasks_required_for_activation_count_); |
69 } | 70 } |
70 | 71 |
71 void PixelBufferRasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { | 72 Rasterizer* PixelBufferRasterWorkerPool::AsRasterizer() { return this; } |
73 | |
74 void PixelBufferRasterWorkerPool::SetClient(RasterizerClient* client) { | |
72 client_ = client; | 75 client_ = client; |
73 } | 76 } |
74 | 77 |
75 void PixelBufferRasterWorkerPool::Shutdown() { | 78 void PixelBufferRasterWorkerPool::Shutdown() { |
76 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::Shutdown"); | 79 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::Shutdown"); |
77 | 80 |
78 shutdown_ = true; | 81 shutdown_ = true; |
79 | 82 |
80 internal::TaskGraph empty; | 83 internal::TaskGraph empty; |
81 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); | 84 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); |
82 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); | 85 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); |
83 | 86 |
84 CheckForCompletedWorkerPoolTasks(); | 87 CheckForCompletedRasterizerTasks(); |
85 CheckForCompletedUploads(); | 88 CheckForCompletedUploads(); |
86 | 89 |
87 check_for_completed_raster_tasks_pending_ = false; | 90 check_for_completed_raster_tasks_pending_ = false; |
88 | 91 |
89 for (RasterTaskState::Vector::iterator it = raster_task_states_.begin(); | 92 for (RasterTaskState::Vector::iterator it = raster_task_states_.begin(); |
90 it != raster_task_states_.end(); | 93 it != raster_task_states_.end(); |
91 ++it) { | 94 ++it) { |
92 RasterTaskState& state = *it; | 95 RasterTaskState& state = *it; |
93 | 96 |
94 // All unscheduled tasks need to be canceled. | 97 // All unscheduled tasks need to be canceled. |
(...skipping 20 matching lines...) Expand all Loading... | |
115 should_notify_client_if_no_tasks_are_pending_ = true; | 118 should_notify_client_if_no_tasks_are_pending_ = true; |
116 should_notify_client_if_no_tasks_required_for_activation_are_pending_ = true; | 119 should_notify_client_if_no_tasks_required_for_activation_are_pending_ = true; |
117 | 120 |
118 raster_tasks_required_for_activation_count_ = 0u; | 121 raster_tasks_required_for_activation_count_ = 0u; |
119 | 122 |
120 // Update raster task state and remove items from old queue. | 123 // Update raster task state and remove items from old queue. |
121 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); | 124 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); |
122 it != queue->items.end(); | 125 it != queue->items.end(); |
123 ++it) { | 126 ++it) { |
124 const RasterTaskQueue::Item& item = *it; | 127 const RasterTaskQueue::Item& item = *it; |
125 internal::WorkerPoolTask* task = item.task; | 128 internal::RasterTask* task = item.task; |
126 | 129 |
127 // Remove any old items that are associated with this task. The result is | 130 // Remove any old items that are associated with this task. The result is |
128 // that the old queue is left with all items not present in this queue, | 131 // that the old queue is left with all items not present in this queue, |
129 // which we use below to determine what tasks need to be canceled. | 132 // which we use below to determine what tasks need to be canceled. |
130 RasterTaskQueue::Item::Vector::iterator old_it = | 133 RasterTaskQueue::Item::Vector::iterator old_it = |
131 std::find_if(raster_tasks_.items.begin(), | 134 std::find_if(raster_tasks_.items.begin(), |
132 raster_tasks_.items.end(), | 135 raster_tasks_.items.end(), |
133 RasterTaskQueue::Item::TaskComparator(task)); | 136 RasterTaskQueue::Item::TaskComparator(task)); |
134 if (old_it != raster_tasks_.items.end()) { | 137 if (old_it != raster_tasks_.items.end()) { |
135 std::swap(*old_it, raster_tasks_.items.back()); | 138 std::swap(*old_it, raster_tasks_.items.back()); |
(...skipping 23 matching lines...) Expand all Loading... | |
159 RasterTaskState(task, item.required_for_activation)); | 162 RasterTaskState(task, item.required_for_activation)); |
160 raster_tasks_required_for_activation_count_ += item.required_for_activation; | 163 raster_tasks_required_for_activation_count_ += item.required_for_activation; |
161 } | 164 } |
162 | 165 |
163 // Determine what tasks in old queue need to be canceled. | 166 // Determine what tasks in old queue need to be canceled. |
164 for (RasterTaskQueue::Item::Vector::const_iterator it = | 167 for (RasterTaskQueue::Item::Vector::const_iterator it = |
165 raster_tasks_.items.begin(); | 168 raster_tasks_.items.begin(); |
166 it != raster_tasks_.items.end(); | 169 it != raster_tasks_.items.end(); |
167 ++it) { | 170 ++it) { |
168 const RasterTaskQueue::Item& item = *it; | 171 const RasterTaskQueue::Item& item = *it; |
169 internal::WorkerPoolTask* task = item.task; | 172 internal::RasterTask* task = item.task; |
170 | 173 |
171 RasterTaskState::Vector::iterator state_it = | 174 RasterTaskState::Vector::iterator state_it = |
172 std::find_if(raster_task_states_.begin(), | 175 std::find_if(raster_task_states_.begin(), |
173 raster_task_states_.end(), | 176 raster_task_states_.end(), |
174 RasterTaskState::TaskComparator(task)); | 177 RasterTaskState::TaskComparator(task)); |
175 // We've already processed completion if we can't find a RasterTaskState for | 178 // We've already processed completion if we can't find a RasterTaskState for |
176 // this task. | 179 // this task. |
177 if (state_it == raster_task_states_.end()) | 180 if (state_it == raster_task_states_.end()) |
178 continue; | 181 continue; |
179 | 182 |
(...skipping 11 matching lines...) Expand all Loading... | |
191 | 194 |
192 // No longer required for activation. | 195 // No longer required for activation. |
193 state.required_for_activation = false; | 196 state.required_for_activation = false; |
194 } | 197 } |
195 | 198 |
196 raster_tasks_.Swap(queue); | 199 raster_tasks_.Swap(queue); |
197 | 200 |
198 // Check for completed tasks when ScheduleTasks() is called as | 201 // Check for completed tasks when ScheduleTasks() is called as |
199 // priorities might have changed and this maximizes the number | 202 // priorities might have changed and this maximizes the number |
200 // of top priority tasks that are scheduled. | 203 // of top priority tasks that are scheduled. |
201 CheckForCompletedWorkerPoolTasks(); | 204 CheckForCompletedRasterizerTasks(); |
202 CheckForCompletedUploads(); | 205 CheckForCompletedUploads(); |
203 FlushUploads(); | 206 FlushUploads(); |
204 | 207 |
205 // Schedule new tasks. | 208 // Schedule new tasks. |
206 ScheduleMoreTasks(); | 209 ScheduleMoreTasks(); |
207 | 210 |
208 // Cancel any pending check for completed raster tasks and schedule | 211 // Cancel any pending check for completed raster tasks and schedule |
209 // another check. | 212 // another check. |
210 check_for_completed_raster_tasks_time_ = base::TimeTicks(); | 213 check_for_completed_raster_tasks_time_ = base::TimeTicks(); |
211 ScheduleCheckForCompletedRasterTasks(); | 214 ScheduleCheckForCompletedRasterTasks(); |
(...skipping 11 matching lines...) Expand all Loading... | |
223 return GL_TEXTURE_2D; | 226 return GL_TEXTURE_2D; |
224 } | 227 } |
225 | 228 |
226 ResourceFormat PixelBufferRasterWorkerPool::GetResourceFormat() const { | 229 ResourceFormat PixelBufferRasterWorkerPool::GetResourceFormat() const { |
227 return resource_provider_->memory_efficient_texture_format(); | 230 return resource_provider_->memory_efficient_texture_format(); |
228 } | 231 } |
229 | 232 |
230 void PixelBufferRasterWorkerPool::CheckForCompletedTasks() { | 233 void PixelBufferRasterWorkerPool::CheckForCompletedTasks() { |
231 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::CheckForCompletedTasks"); | 234 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::CheckForCompletedTasks"); |
232 | 235 |
233 CheckForCompletedWorkerPoolTasks(); | 236 CheckForCompletedRasterizerTasks(); |
234 CheckForCompletedUploads(); | 237 CheckForCompletedUploads(); |
235 FlushUploads(); | 238 FlushUploads(); |
236 | 239 |
237 for (internal::WorkerPoolTask::Vector::const_iterator it = | 240 for (internal::RasterizerTask::Vector::const_iterator it = |
238 completed_image_decode_tasks_.begin(); | 241 completed_image_decode_tasks_.begin(); |
239 it != completed_image_decode_tasks_.end(); | 242 it != completed_image_decode_tasks_.end(); |
240 ++it) { | 243 ++it) { |
241 internal::WorkerPoolTask* task = it->get(); | 244 internal::RasterizerTask* task = it->get(); |
242 task->RunReplyOnOriginThread(); | 245 task->RunReplyOnOriginThread(); |
243 } | 246 } |
244 completed_image_decode_tasks_.clear(); | 247 completed_image_decode_tasks_.clear(); |
245 | 248 |
246 for (internal::WorkerPoolTask::Vector::const_iterator it = | 249 for (internal::RasterTask::Vector::const_iterator it = |
247 completed_raster_tasks_.begin(); | 250 completed_raster_tasks_.begin(); |
248 it != completed_raster_tasks_.end(); | 251 it != completed_raster_tasks_.end(); |
249 ++it) { | 252 ++it) { |
250 internal::WorkerPoolTask* task = it->get(); | 253 internal::RasterTask* task = it->get(); |
251 RasterTaskState::Vector::iterator state_it = | 254 RasterTaskState::Vector::iterator state_it = |
252 std::find_if(raster_task_states_.begin(), | 255 std::find_if(raster_task_states_.begin(), |
253 raster_task_states_.end(), | 256 raster_task_states_.end(), |
254 RasterTaskState::TaskComparator(task)); | 257 RasterTaskState::TaskComparator(task)); |
255 DCHECK(state_it != raster_task_states_.end()); | 258 DCHECK(state_it != raster_task_states_.end()); |
256 DCHECK_EQ(RasterTaskState::COMPLETED, state_it->type); | 259 DCHECK_EQ(RasterTaskState::COMPLETED, state_it->type); |
257 | 260 |
258 std::swap(*state_it, raster_task_states_.back()); | 261 std::swap(*state_it, raster_task_states_.back()); |
259 raster_task_states_.pop_back(); | 262 raster_task_states_.pop_back(); |
260 | 263 |
261 task->RunReplyOnOriginThread(); | 264 task->RunReplyOnOriginThread(); |
262 } | 265 } |
263 completed_raster_tasks_.clear(); | 266 completed_raster_tasks_.clear(); |
264 } | 267 } |
265 | 268 |
266 SkCanvas* PixelBufferRasterWorkerPool::AcquireCanvasForRaster( | 269 SkCanvas* PixelBufferRasterWorkerPool::AcquireCanvasForRaster( |
267 internal::WorkerPoolTask* task, | 270 internal::RasterTask* task) { |
268 const Resource* resource) { | |
269 RasterTaskState::Vector::iterator it = | 271 RasterTaskState::Vector::iterator it = |
270 std::find_if(raster_task_states_.begin(), | 272 std::find_if(raster_task_states_.begin(), |
271 raster_task_states_.end(), | 273 raster_task_states_.end(), |
272 RasterTaskState::TaskComparator(task)); | 274 RasterTaskState::TaskComparator(task)); |
273 DCHECK(it != raster_task_states_.end()); | 275 DCHECK(it != raster_task_states_.end()); |
274 DCHECK(!it->resource); | 276 resource_provider_->AcquirePixelRasterBuffer(task->resource()->id()); |
275 it->resource = resource; | 277 return resource_provider_->MapPixelRasterBuffer(task->resource()->id()); |
276 resource_provider_->AcquirePixelRasterBuffer(resource->id()); | |
277 return resource_provider_->MapPixelRasterBuffer(resource->id()); | |
278 } | 278 } |
279 | 279 |
280 void PixelBufferRasterWorkerPool::ReleaseCanvasForRaster( | 280 void PixelBufferRasterWorkerPool::ReleaseCanvasForRaster( |
281 internal::WorkerPoolTask* task, | 281 internal::RasterTask* task) { |
282 const Resource* resource) { | |
283 RasterTaskState::Vector::iterator it = | 282 RasterTaskState::Vector::iterator it = |
284 std::find_if(raster_task_states_.begin(), | 283 std::find_if(raster_task_states_.begin(), |
285 raster_task_states_.end(), | 284 raster_task_states_.end(), |
286 RasterTaskState::TaskComparator(task)); | 285 RasterTaskState::TaskComparator(task)); |
287 DCHECK(it != raster_task_states_.end()); | 286 DCHECK(it != raster_task_states_.end()); |
288 DCHECK(it->resource == resource); | 287 resource_provider_->ReleasePixelRasterBuffer(task->resource()->id()); |
289 resource_provider_->ReleasePixelRasterBuffer(resource->id()); | |
290 } | 288 } |
291 | 289 |
292 void PixelBufferRasterWorkerPool::OnRasterFinished() { | 290 void PixelBufferRasterWorkerPool::OnRasterFinished() { |
293 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::OnRasterFinished"); | 291 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::OnRasterFinished"); |
294 | 292 |
295 // |should_notify_client_if_no_tasks_are_pending_| can be set to false as | 293 // |should_notify_client_if_no_tasks_are_pending_| can be set to false as |
296 // a result of a scheduled CheckForCompletedRasterTasks() call. No need to | 294 // a result of a scheduled CheckForCompletedRasterTasks() call. No need to |
297 // perform another check in that case as we've already notified the client. | 295 // perform another check in that case as we've already notified the client. |
298 if (!should_notify_client_if_no_tasks_are_pending_) | 296 if (!should_notify_client_if_no_tasks_are_pending_) |
299 return; | 297 return; |
(...skipping 25 matching lines...) Expand all Loading... | |
325 | 323 |
326 void PixelBufferRasterWorkerPool::FlushUploads() { | 324 void PixelBufferRasterWorkerPool::FlushUploads() { |
327 if (!has_performed_uploads_since_last_flush_) | 325 if (!has_performed_uploads_since_last_flush_) |
328 return; | 326 return; |
329 | 327 |
330 resource_provider_->ShallowFlushIfSupported(); | 328 resource_provider_->ShallowFlushIfSupported(); |
331 has_performed_uploads_since_last_flush_ = false; | 329 has_performed_uploads_since_last_flush_ = false; |
332 } | 330 } |
333 | 331 |
334 void PixelBufferRasterWorkerPool::CheckForCompletedUploads() { | 332 void PixelBufferRasterWorkerPool::CheckForCompletedUploads() { |
335 internal::WorkerPoolTask::Vector tasks_with_completed_uploads; | 333 internal::RasterTask::Vector tasks_with_completed_uploads; |
336 | 334 |
337 // First check if any have completed. | 335 // First check if any have completed. |
338 while (!raster_tasks_with_pending_upload_.empty()) { | 336 while (!raster_tasks_with_pending_upload_.empty()) { |
339 internal::WorkerPoolTask* task = | 337 internal::RasterTask* task = |
340 raster_tasks_with_pending_upload_.front().get(); | 338 raster_tasks_with_pending_upload_.front().get(); |
341 RasterTaskState::Vector::const_iterator it = | 339 RasterTaskState::Vector::const_iterator it = |
342 std::find_if(raster_task_states_.begin(), | 340 std::find_if(raster_task_states_.begin(), |
343 raster_task_states_.end(), | 341 raster_task_states_.end(), |
344 RasterTaskState::TaskComparator(task)); | 342 RasterTaskState::TaskComparator(task)); |
345 DCHECK(it != raster_task_states_.end()); | 343 DCHECK(it != raster_task_states_.end()); |
346 DCHECK_EQ(RasterTaskState::UPLOADING, it->type); | 344 DCHECK_EQ(RasterTaskState::UPLOADING, it->type); |
347 | 345 |
348 // Uploads complete in the order they are issued. | 346 // Uploads complete in the order they are issued. |
349 if (!resource_provider_->DidSetPixelsComplete(it->resource->id())) | 347 if (!resource_provider_->DidSetPixelsComplete(task->resource()->id())) |
350 break; | 348 break; |
351 | 349 |
352 tasks_with_completed_uploads.push_back(task); | 350 tasks_with_completed_uploads.push_back(task); |
353 raster_tasks_with_pending_upload_.pop_front(); | 351 raster_tasks_with_pending_upload_.pop_front(); |
354 } | 352 } |
355 | 353 |
356 DCHECK(client_); | 354 DCHECK(client_); |
357 bool should_force_some_uploads_to_complete = | 355 bool should_force_some_uploads_to_complete = |
358 shutdown_ || client_->ShouldForceTasksRequiredForActivationToComplete(); | 356 shutdown_ || client_->ShouldForceTasksRequiredForActivationToComplete(); |
359 | 357 |
360 if (should_force_some_uploads_to_complete) { | 358 if (should_force_some_uploads_to_complete) { |
361 internal::WorkerPoolTask::Vector tasks_with_uploads_to_force; | 359 internal::RasterTask::Vector tasks_with_uploads_to_force; |
362 TaskDeque::iterator it = raster_tasks_with_pending_upload_.begin(); | 360 RasterTaskDeque::iterator it = raster_tasks_with_pending_upload_.begin(); |
363 while (it != raster_tasks_with_pending_upload_.end()) { | 361 while (it != raster_tasks_with_pending_upload_.end()) { |
364 internal::WorkerPoolTask* task = it->get(); | 362 internal::RasterTask* task = it->get(); |
365 RasterTaskState::Vector::const_iterator state_it = | 363 RasterTaskState::Vector::const_iterator state_it = |
366 std::find_if(raster_task_states_.begin(), | 364 std::find_if(raster_task_states_.begin(), |
367 raster_task_states_.end(), | 365 raster_task_states_.end(), |
368 RasterTaskState::TaskComparator(task)); | 366 RasterTaskState::TaskComparator(task)); |
369 DCHECK(state_it != raster_task_states_.end()); | 367 DCHECK(state_it != raster_task_states_.end()); |
370 | 368 |
371 // Force all uploads required for activation to complete. | 369 // Force all uploads required for activation to complete. |
372 // During shutdown, force all pending uploads to complete. | 370 // During shutdown, force all pending uploads to complete. |
373 if (shutdown_ || state_it->required_for_activation) { | 371 if (shutdown_ || state_it->required_for_activation) { |
374 tasks_with_uploads_to_force.push_back(task); | 372 tasks_with_uploads_to_force.push_back(task); |
375 tasks_with_completed_uploads.push_back(task); | 373 tasks_with_completed_uploads.push_back(task); |
376 it = raster_tasks_with_pending_upload_.erase(it); | 374 it = raster_tasks_with_pending_upload_.erase(it); |
377 continue; | 375 continue; |
378 } | 376 } |
379 | 377 |
380 ++it; | 378 ++it; |
381 } | 379 } |
382 | 380 |
383 // Force uploads in reverse order. Since forcing can cause a wait on | 381 // Force uploads in reverse order. Since forcing can cause a wait on |
384 // all previous uploads, we would rather wait only once downstream. | 382 // all previous uploads, we would rather wait only once downstream. |
385 for (internal::WorkerPoolTask::Vector::reverse_iterator it = | 383 for (internal::RasterTask::Vector::reverse_iterator it = |
386 tasks_with_uploads_to_force.rbegin(); | 384 tasks_with_uploads_to_force.rbegin(); |
387 it != tasks_with_uploads_to_force.rend(); | 385 it != tasks_with_uploads_to_force.rend(); |
388 ++it) { | 386 ++it) { |
389 internal::WorkerPoolTask* task = it->get(); | 387 internal::RasterTask* task = it->get(); |
390 RasterTaskState::Vector::const_iterator state_it = | 388 RasterTaskState::Vector::const_iterator state_it = |
391 std::find_if(raster_task_states_.begin(), | 389 std::find_if(raster_task_states_.begin(), |
vmpstr
2014/04/10 18:21:18
This whole find can now be a part of a dcheck
reveman
2014/04/10 19:38:15
Removed this and unnecessary find_if above. We sti
| |
392 raster_task_states_.end(), | 390 raster_task_states_.end(), |
393 RasterTaskState::TaskComparator(task)); | 391 RasterTaskState::TaskComparator(task)); |
394 DCHECK(state_it != raster_task_states_.end()); | 392 DCHECK(state_it != raster_task_states_.end()); |
395 DCHECK(state_it->resource); | |
396 | 393 |
397 resource_provider_->ForceSetPixelsToComplete(state_it->resource->id()); | 394 resource_provider_->ForceSetPixelsToComplete(task->resource()->id()); |
398 has_performed_uploads_since_last_flush_ = true; | 395 has_performed_uploads_since_last_flush_ = true; |
399 } | 396 } |
400 } | 397 } |
401 | 398 |
402 // Release shared memory and move tasks with completed uploads | 399 // Release shared memory and move tasks with completed uploads |
403 // to |completed_raster_tasks_|. | 400 // to |completed_raster_tasks_|. |
404 for (internal::WorkerPoolTask::Vector::const_iterator it = | 401 for (internal::RasterTask::Vector::const_iterator it = |
405 tasks_with_completed_uploads.begin(); | 402 tasks_with_completed_uploads.begin(); |
406 it != tasks_with_completed_uploads.end(); | 403 it != tasks_with_completed_uploads.end(); |
407 ++it) { | 404 ++it) { |
408 internal::WorkerPoolTask* task = it->get(); | 405 internal::RasterTask* task = it->get(); |
409 RasterTaskState::Vector::iterator state_it = | 406 RasterTaskState::Vector::iterator state_it = |
410 std::find_if(raster_task_states_.begin(), | 407 std::find_if(raster_task_states_.begin(), |
411 raster_task_states_.end(), | 408 raster_task_states_.end(), |
412 RasterTaskState::TaskComparator(task)); | 409 RasterTaskState::TaskComparator(task)); |
413 DCHECK(state_it != raster_task_states_.end()); | 410 DCHECK(state_it != raster_task_states_.end()); |
414 RasterTaskState& state = *state_it; | 411 RasterTaskState& state = *state_it; |
415 | 412 |
416 bytes_pending_upload_ -= state.resource->bytes(); | 413 bytes_pending_upload_ -= task->resource()->bytes(); |
417 | 414 |
418 task->WillComplete(); | 415 task->WillComplete(); |
419 task->CompleteOnOriginThread(this); | 416 task->CompleteOnOriginThread(this); |
420 task->DidComplete(); | 417 task->DidComplete(); |
421 | 418 |
422 DCHECK(std::find(completed_raster_tasks_.begin(), | 419 DCHECK(std::find(completed_raster_tasks_.begin(), |
423 completed_raster_tasks_.end(), | 420 completed_raster_tasks_.end(), |
424 task) == completed_raster_tasks_.end()); | 421 task) == completed_raster_tasks_.end()); |
425 completed_raster_tasks_.push_back(task); | 422 completed_raster_tasks_.push_back(task); |
426 state.type = RasterTaskState::COMPLETED; | 423 state.type = RasterTaskState::COMPLETED; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
472 CheckForCompletedRasterTasks(); | 469 CheckForCompletedRasterTasks(); |
473 } | 470 } |
474 | 471 |
475 void PixelBufferRasterWorkerPool::CheckForCompletedRasterTasks() { | 472 void PixelBufferRasterWorkerPool::CheckForCompletedRasterTasks() { |
476 TRACE_EVENT0("cc", | 473 TRACE_EVENT0("cc", |
477 "PixelBufferRasterWorkerPool::CheckForCompletedRasterTasks"); | 474 "PixelBufferRasterWorkerPool::CheckForCompletedRasterTasks"); |
478 | 475 |
479 DCHECK(should_notify_client_if_no_tasks_are_pending_); | 476 DCHECK(should_notify_client_if_no_tasks_are_pending_); |
480 check_for_completed_raster_tasks_time_ = base::TimeTicks(); | 477 check_for_completed_raster_tasks_time_ = base::TimeTicks(); |
481 | 478 |
482 CheckForCompletedWorkerPoolTasks(); | 479 CheckForCompletedRasterizerTasks(); |
483 CheckForCompletedUploads(); | 480 CheckForCompletedUploads(); |
484 FlushUploads(); | 481 FlushUploads(); |
485 | 482 |
486 // Determine what client notifications to generate. | 483 // Determine what client notifications to generate. |
487 bool will_notify_client_that_no_tasks_required_for_activation_are_pending = | 484 bool will_notify_client_that_no_tasks_required_for_activation_are_pending = |
488 (should_notify_client_if_no_tasks_required_for_activation_are_pending_ && | 485 (should_notify_client_if_no_tasks_required_for_activation_are_pending_ && |
489 !raster_required_for_activation_finished_task_pending_ && | 486 !raster_required_for_activation_finished_task_pending_ && |
490 !HasPendingTasksRequiredForActivation()); | 487 !HasPendingTasksRequiredForActivation()); |
491 bool will_notify_client_that_no_tasks_are_pending = | 488 bool will_notify_client_that_no_tasks_are_pending = |
492 (should_notify_client_if_no_tasks_are_pending_ && | 489 (should_notify_client_if_no_tasks_are_pending_ && |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
524 if (will_notify_client_that_no_tasks_are_pending) { | 521 if (will_notify_client_that_no_tasks_are_pending) { |
525 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); | 522 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); |
526 DCHECK(!HasPendingTasksRequiredForActivation()); | 523 DCHECK(!HasPendingTasksRequiredForActivation()); |
527 client_->DidFinishRunningTasks(); | 524 client_->DidFinishRunningTasks(); |
528 } | 525 } |
529 } | 526 } |
530 | 527 |
531 void PixelBufferRasterWorkerPool::ScheduleMoreTasks() { | 528 void PixelBufferRasterWorkerPool::ScheduleMoreTasks() { |
532 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::ScheduleMoreTasks"); | 529 TRACE_EVENT0("cc", "PixelBufferRasterWorkerPool::ScheduleMoreTasks"); |
533 | 530 |
534 WorkerPoolTaskVector tasks; | 531 RasterTaskVector tasks; |
535 WorkerPoolTaskVector tasks_required_for_activation; | 532 RasterTaskVector tasks_required_for_activation; |
536 | 533 |
537 unsigned priority = kRasterTaskPriorityBase; | 534 unsigned priority = kRasterTaskPriorityBase; |
538 | 535 |
539 graph_.Reset(); | 536 graph_.Reset(); |
540 | 537 |
541 size_t bytes_pending_upload = bytes_pending_upload_; | 538 size_t bytes_pending_upload = bytes_pending_upload_; |
542 bool did_throttle_raster_tasks = false; | 539 bool did_throttle_raster_tasks = false; |
543 bool did_throttle_raster_tasks_required_for_activation = false; | 540 bool did_throttle_raster_tasks_required_for_activation = false; |
544 | 541 |
545 for (RasterTaskQueue::Item::Vector::const_iterator it = | 542 for (RasterTaskQueue::Item::Vector::const_iterator it = |
546 raster_tasks_.items.begin(); | 543 raster_tasks_.items.begin(); |
547 it != raster_tasks_.items.end(); | 544 it != raster_tasks_.items.end(); |
548 ++it) { | 545 ++it) { |
549 const RasterTaskQueue::Item& item = *it; | 546 const RasterTaskQueue::Item& item = *it; |
550 internal::RasterWorkerPoolTask* task = item.task; | 547 internal::RasterTask* task = item.task; |
551 | 548 |
552 // |raster_task_states_| contains the state of all tasks that we have not | 549 // |raster_task_states_| contains the state of all tasks that we have not |
553 // yet run reply callbacks for. | 550 // yet run reply callbacks for. |
554 RasterTaskState::Vector::iterator state_it = | 551 RasterTaskState::Vector::iterator state_it = |
555 std::find_if(raster_task_states_.begin(), | 552 std::find_if(raster_task_states_.begin(), |
556 raster_task_states_.end(), | 553 raster_task_states_.end(), |
557 RasterTaskState::TaskComparator(task)); | 554 RasterTaskState::TaskComparator(task)); |
558 if (state_it == raster_task_states_.end()) | 555 if (state_it == raster_task_states_.end()) |
559 continue; | 556 continue; |
560 | 557 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
604 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++); | 601 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++); |
605 | 602 |
606 tasks.container().push_back(task); | 603 tasks.container().push_back(task); |
607 if (item.required_for_activation) | 604 if (item.required_for_activation) |
608 tasks_required_for_activation.container().push_back(task); | 605 tasks_required_for_activation.container().push_back(task); |
609 } | 606 } |
610 | 607 |
611 // Cancel existing OnRasterFinished callbacks. | 608 // Cancel existing OnRasterFinished callbacks. |
612 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); | 609 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); |
613 | 610 |
614 scoped_refptr<internal::WorkerPoolTask> | 611 scoped_refptr<internal::RasterizerTask> |
615 new_raster_required_for_activation_finished_task; | 612 new_raster_required_for_activation_finished_task; |
616 | 613 |
617 size_t scheduled_raster_task_required_for_activation_count = | 614 size_t scheduled_raster_task_required_for_activation_count = |
618 tasks_required_for_activation.container().size(); | 615 tasks_required_for_activation.container().size(); |
619 DCHECK_LE(scheduled_raster_task_required_for_activation_count, | 616 DCHECK_LE(scheduled_raster_task_required_for_activation_count, |
620 raster_tasks_required_for_activation_count_); | 617 raster_tasks_required_for_activation_count_); |
621 // Schedule OnRasterTasksRequiredForActivationFinished call only when | 618 // Schedule OnRasterTasksRequiredForActivationFinished call only when |
622 // notification is pending and throttling is not preventing all pending | 619 // notification is pending and throttling is not preventing all pending |
623 // tasks required for activation from being scheduled. | 620 // tasks required for activation from being scheduled. |
624 if (!did_throttle_raster_tasks_required_for_activation && | 621 if (!did_throttle_raster_tasks_required_for_activation && |
625 should_notify_client_if_no_tasks_required_for_activation_are_pending_) { | 622 should_notify_client_if_no_tasks_required_for_activation_are_pending_) { |
626 new_raster_required_for_activation_finished_task = | 623 new_raster_required_for_activation_finished_task = |
627 CreateRasterRequiredForActivationFinishedTask( | 624 CreateRasterRequiredForActivationFinishedTask( |
628 raster_tasks_.required_for_activation_count, | 625 raster_tasks_.required_for_activation_count, |
629 task_runner_.get(), | 626 task_runner_.get(), |
630 base::Bind(&PixelBufferRasterWorkerPool:: | 627 base::Bind(&PixelBufferRasterWorkerPool:: |
631 OnRasterRequiredForActivationFinished, | 628 OnRasterRequiredForActivationFinished, |
632 raster_finished_weak_ptr_factory_.GetWeakPtr())); | 629 raster_finished_weak_ptr_factory_.GetWeakPtr())); |
633 raster_required_for_activation_finished_task_pending_ = true; | 630 raster_required_for_activation_finished_task_pending_ = true; |
634 InsertNodeForTask(&graph_, | 631 InsertNodeForTask(&graph_, |
635 new_raster_required_for_activation_finished_task.get(), | 632 new_raster_required_for_activation_finished_task.get(), |
636 kRasterRequiredForActivationFinishedTaskPriority, | 633 kRasterRequiredForActivationFinishedTaskPriority, |
637 scheduled_raster_task_required_for_activation_count); | 634 scheduled_raster_task_required_for_activation_count); |
638 for (WorkerPoolTaskVector::ContainerType::const_iterator it = | 635 for (RasterTaskVector::ContainerType::const_iterator it = |
639 tasks_required_for_activation.container().begin(); | 636 tasks_required_for_activation.container().begin(); |
640 it != tasks_required_for_activation.container().end(); | 637 it != tasks_required_for_activation.container().end(); |
641 ++it) { | 638 ++it) { |
642 graph_.edges.push_back(internal::TaskGraph::Edge( | 639 graph_.edges.push_back(internal::TaskGraph::Edge( |
643 *it, new_raster_required_for_activation_finished_task.get())); | 640 *it, new_raster_required_for_activation_finished_task.get())); |
644 } | 641 } |
645 } | 642 } |
646 | 643 |
647 scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task; | 644 scoped_refptr<internal::RasterizerTask> new_raster_finished_task; |
648 | 645 |
649 size_t scheduled_raster_task_count = tasks.container().size(); | 646 size_t scheduled_raster_task_count = tasks.container().size(); |
650 DCHECK_LE(scheduled_raster_task_count, PendingRasterTaskCount()); | 647 DCHECK_LE(scheduled_raster_task_count, PendingRasterTaskCount()); |
651 // Schedule OnRasterTasksFinished call only when notification is pending | 648 // Schedule OnRasterTasksFinished call only when notification is pending |
652 // and throttling is not preventing all pending tasks from being scheduled. | 649 // and throttling is not preventing all pending tasks from being scheduled. |
653 if (!did_throttle_raster_tasks && | 650 if (!did_throttle_raster_tasks && |
654 should_notify_client_if_no_tasks_are_pending_) { | 651 should_notify_client_if_no_tasks_are_pending_) { |
655 new_raster_finished_task = CreateRasterFinishedTask( | 652 new_raster_finished_task = CreateRasterFinishedTask( |
656 task_runner_.get(), | 653 task_runner_.get(), |
657 base::Bind(&PixelBufferRasterWorkerPool::OnRasterFinished, | 654 base::Bind(&PixelBufferRasterWorkerPool::OnRasterFinished, |
658 raster_finished_weak_ptr_factory_.GetWeakPtr())); | 655 raster_finished_weak_ptr_factory_.GetWeakPtr())); |
659 raster_finished_task_pending_ = true; | 656 raster_finished_task_pending_ = true; |
660 InsertNodeForTask(&graph_, | 657 InsertNodeForTask(&graph_, |
661 new_raster_finished_task.get(), | 658 new_raster_finished_task.get(), |
662 kRasterFinishedTaskPriority, | 659 kRasterFinishedTaskPriority, |
663 scheduled_raster_task_count); | 660 scheduled_raster_task_count); |
664 for (WorkerPoolTaskVector::ContainerType::const_iterator it = | 661 for (RasterTaskVector::ContainerType::const_iterator it = |
665 tasks.container().begin(); | 662 tasks.container().begin(); |
666 it != tasks.container().end(); | 663 it != tasks.container().end(); |
667 ++it) { | 664 ++it) { |
668 graph_.edges.push_back( | 665 graph_.edges.push_back( |
669 internal::TaskGraph::Edge(*it, new_raster_finished_task.get())); | 666 internal::TaskGraph::Edge(*it, new_raster_finished_task.get())); |
670 } | 667 } |
671 } | 668 } |
672 | 669 |
673 ScheduleTasksOnOriginThread(this, &graph_); | 670 ScheduleTasksOnOriginThread(this, &graph_); |
674 task_graph_runner_->ScheduleTasks(namespace_token_, &graph_); | 671 task_graph_runner_->ScheduleTasks(namespace_token_, &graph_); |
(...skipping 24 matching lines...) Expand all Loading... | |
699 if (scheduled_raster_task_count_) | 696 if (scheduled_raster_task_count_) |
700 return "rasterizing"; | 697 return "rasterizing"; |
701 if (PendingRasterTaskCount()) | 698 if (PendingRasterTaskCount()) |
702 return "throttled"; | 699 return "throttled"; |
703 if (!raster_tasks_with_pending_upload_.empty()) | 700 if (!raster_tasks_with_pending_upload_.empty()) |
704 return "waiting_for_uploads"; | 701 return "waiting_for_uploads"; |
705 | 702 |
706 return "finishing"; | 703 return "finishing"; |
707 } | 704 } |
708 | 705 |
709 void PixelBufferRasterWorkerPool::CheckForCompletedWorkerPoolTasks() { | 706 void PixelBufferRasterWorkerPool::CheckForCompletedRasterizerTasks() { |
710 TRACE_EVENT0("cc", | 707 TRACE_EVENT0("cc", |
711 "PixelBufferRasterWorkerPool::CheckForCompletedWorkerPoolTasks"); | 708 "PixelBufferRasterWorkerPool::CheckForCompletedRasterizerTasks"); |
712 | 709 |
713 task_graph_runner_->CollectCompletedTasks(namespace_token_, | 710 task_graph_runner_->CollectCompletedTasks(namespace_token_, |
714 &completed_tasks_); | 711 &completed_tasks_); |
715 for (internal::Task::Vector::const_iterator it = completed_tasks_.begin(); | 712 for (internal::Task::Vector::const_iterator it = completed_tasks_.begin(); |
716 it != completed_tasks_.end(); | 713 it != completed_tasks_.end(); |
717 ++it) { | 714 ++it) { |
718 internal::WorkerPoolTask* task = | 715 internal::RasterizerTask* task = |
719 static_cast<internal::WorkerPoolTask*>(it->get()); | 716 static_cast<internal::RasterizerTask*>(it->get()); |
720 | 717 |
721 RasterTaskState::Vector::iterator state_it = | 718 internal::RasterTask* raster_task = task->AsRasterTask(); |
722 std::find_if(raster_task_states_.begin(), | 719 if (!raster_task) { |
723 raster_task_states_.end(), | |
724 RasterTaskState::TaskComparator(task)); | |
725 if (state_it == raster_task_states_.end()) { | |
726 task->WillComplete(); | 720 task->WillComplete(); |
727 task->CompleteOnOriginThread(this); | 721 task->CompleteOnOriginThread(this); |
728 task->DidComplete(); | 722 task->DidComplete(); |
729 | 723 |
730 completed_image_decode_tasks_.push_back(task); | 724 completed_image_decode_tasks_.push_back(task); |
731 continue; | 725 continue; |
732 } | 726 } |
733 | 727 |
728 RasterTaskState::Vector::iterator state_it = | |
729 std::find_if(raster_task_states_.begin(), | |
730 raster_task_states_.end(), | |
731 RasterTaskState::TaskComparator(raster_task)); | |
732 DCHECK(state_it != raster_task_states_.end()); | |
733 | |
734 RasterTaskState& state = *state_it; | 734 RasterTaskState& state = *state_it; |
735 DCHECK_EQ(RasterTaskState::SCHEDULED, state.type); | 735 DCHECK_EQ(RasterTaskState::SCHEDULED, state.type); |
736 DCHECK(state.resource); | |
737 | 736 |
738 // Balanced with MapPixelRasterBuffer() call in AcquireCanvasForRaster(). | 737 // Balanced with MapPixelRasterBuffer() call in AcquireCanvasForRaster(). |
739 bool content_has_changed = | 738 bool content_has_changed = resource_provider_->UnmapPixelRasterBuffer( |
740 resource_provider_->UnmapPixelRasterBuffer(state.resource->id()); | 739 raster_task->resource()->id()); |
741 | 740 |
742 // |content_has_changed| can be false as result of task being canceled or | 741 // |content_has_changed| can be false as result of task being canceled or |
743 // task implementation deciding not to modify bitmap (ie. analysis of raster | 742 // task implementation deciding not to modify bitmap (ie. analysis of raster |
744 // commands detected content as a solid color). | 743 // commands detected content as a solid color). |
745 if (!content_has_changed) { | 744 if (!content_has_changed) { |
746 task->WillComplete(); | 745 raster_task->WillComplete(); |
747 task->CompleteOnOriginThread(this); | 746 raster_task->CompleteOnOriginThread(this); |
748 task->DidComplete(); | 747 raster_task->DidComplete(); |
749 | 748 |
750 if (!task->HasFinishedRunning()) { | 749 if (!raster_task->HasFinishedRunning()) { |
751 // When priorites change, a raster task can be canceled as a result of | 750 // When priorites change, a raster task can be canceled as a result of |
752 // no longer being of high enough priority to fit in our throttled | 751 // no longer being of high enough priority to fit in our throttled |
753 // raster task budget. The task has not yet completed in this case. | 752 // raster task budget. The task has not yet completed in this case. |
754 RasterTaskQueue::Item::Vector::const_iterator item_it = | 753 RasterTaskQueue::Item::Vector::const_iterator item_it = |
755 std::find_if(raster_tasks_.items.begin(), | 754 std::find_if(raster_tasks_.items.begin(), |
756 raster_tasks_.items.end(), | 755 raster_tasks_.items.end(), |
757 RasterTaskQueue::Item::TaskComparator(task)); | 756 RasterTaskQueue::Item::TaskComparator(raster_task)); |
758 if (item_it != raster_tasks_.items.end()) { | 757 if (item_it != raster_tasks_.items.end()) { |
759 state.type = RasterTaskState::UNSCHEDULED; | 758 state.type = RasterTaskState::UNSCHEDULED; |
760 state.resource = NULL; | |
761 continue; | 759 continue; |
762 } | 760 } |
763 } | 761 } |
764 | 762 |
765 DCHECK(std::find(completed_raster_tasks_.begin(), | 763 DCHECK(std::find(completed_raster_tasks_.begin(), |
766 completed_raster_tasks_.end(), | 764 completed_raster_tasks_.end(), |
767 task) == completed_raster_tasks_.end()); | 765 raster_task) == completed_raster_tasks_.end()); |
768 completed_raster_tasks_.push_back(task); | 766 completed_raster_tasks_.push_back(raster_task); |
769 state.type = RasterTaskState::COMPLETED; | 767 state.type = RasterTaskState::COMPLETED; |
770 DCHECK_LE(static_cast<size_t>(state.required_for_activation), | 768 DCHECK_LE(static_cast<size_t>(state.required_for_activation), |
771 raster_tasks_required_for_activation_count_); | 769 raster_tasks_required_for_activation_count_); |
772 raster_tasks_required_for_activation_count_ -= | 770 raster_tasks_required_for_activation_count_ -= |
773 state.required_for_activation; | 771 state.required_for_activation; |
774 continue; | 772 continue; |
775 } | 773 } |
776 | 774 |
777 DCHECK(task->HasFinishedRunning()); | 775 DCHECK(raster_task->HasFinishedRunning()); |
778 | 776 |
779 resource_provider_->BeginSetPixels(state.resource->id()); | 777 resource_provider_->BeginSetPixels(raster_task->resource()->id()); |
780 has_performed_uploads_since_last_flush_ = true; | 778 has_performed_uploads_since_last_flush_ = true; |
781 | 779 |
782 bytes_pending_upload_ += state.resource->bytes(); | 780 bytes_pending_upload_ += raster_task->resource()->bytes(); |
783 raster_tasks_with_pending_upload_.push_back(task); | 781 raster_tasks_with_pending_upload_.push_back(raster_task); |
784 state.type = RasterTaskState::UPLOADING; | 782 state.type = RasterTaskState::UPLOADING; |
785 } | 783 } |
786 completed_tasks_.clear(); | 784 completed_tasks_.clear(); |
787 } | 785 } |
788 | 786 |
789 scoped_ptr<base::Value> PixelBufferRasterWorkerPool::StateAsValue() const { | 787 scoped_ptr<base::Value> PixelBufferRasterWorkerPool::StateAsValue() const { |
790 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue); | 788 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue); |
791 | 789 |
792 state->SetInteger("completed_count", completed_raster_tasks_.size()); | 790 state->SetInteger("completed_count", completed_raster_tasks_.size()); |
793 state->SetInteger("pending_count", raster_task_states_.size()); | 791 state->SetInteger("pending_count", raster_task_states_.size()); |
(...skipping 11 matching lines...) Expand all Loading... | |
805 | 803 |
806 throttle_state->SetInteger("bytes_available_for_upload", | 804 throttle_state->SetInteger("bytes_available_for_upload", |
807 max_bytes_pending_upload_ - bytes_pending_upload_); | 805 max_bytes_pending_upload_ - bytes_pending_upload_); |
808 throttle_state->SetInteger("bytes_pending_upload", bytes_pending_upload_); | 806 throttle_state->SetInteger("bytes_pending_upload", bytes_pending_upload_); |
809 throttle_state->SetInteger("scheduled_raster_task_count", | 807 throttle_state->SetInteger("scheduled_raster_task_count", |
810 scheduled_raster_task_count_); | 808 scheduled_raster_task_count_); |
811 return throttle_state.PassAs<base::Value>(); | 809 return throttle_state.PassAs<base::Value>(); |
812 } | 810 } |
813 | 811 |
814 } // namespace cc | 812 } // namespace cc |
OLD | NEW |