OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/tile_manager.h" | 5 #include "cc/resources/tile_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/debug/trace_event_argument.h" | 12 #include "base/debug/trace_event_argument.h" |
13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
16 #include "cc/debug/devtools_instrumentation.h" | 16 #include "cc/debug/devtools_instrumentation.h" |
17 #include "cc/debug/frame_viewer_instrumentation.h" | 17 #include "cc/debug/frame_viewer_instrumentation.h" |
18 #include "cc/debug/traced_value.h" | 18 #include "cc/debug/traced_value.h" |
19 #include "cc/layers/picture_layer_impl.h" | 19 #include "cc/layers/picture_layer_impl.h" |
20 #include "cc/resources/raster_buffer.h" | 20 #include "cc/resources/raster_buffer.h" |
21 #include "cc/resources/rasterizer.h" | |
22 #include "cc/resources/tile.h" | 21 #include "cc/resources/tile.h" |
| 22 #include "cc/resources/tile_task_runner.h" |
23 #include "ui/gfx/geometry/rect_conversions.h" | 23 #include "ui/gfx/geometry/rect_conversions.h" |
24 | 24 |
25 namespace cc { | 25 namespace cc { |
26 namespace { | 26 namespace { |
27 | 27 |
28 // Flag to indicate whether we should try and detect that | 28 // Flag to indicate whether we should try and detect that |
29 // a tile is of solid color. | 29 // a tile is of solid color. |
30 const bool kUseColorEstimator = true; | 30 const bool kUseColorEstimator = true; |
31 | 31 |
32 class RasterTaskImpl : public RasterTask { | 32 class RasterTaskImpl : public RasterTask { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 | 66 |
67 if (analyze_picture_) { | 67 if (analyze_picture_) { |
68 Analyze(raster_source_.get()); | 68 Analyze(raster_source_.get()); |
69 if (analysis_.is_solid_color) | 69 if (analysis_.is_solid_color) |
70 return; | 70 return; |
71 } | 71 } |
72 | 72 |
73 Raster(raster_source_.get()); | 73 Raster(raster_source_.get()); |
74 } | 74 } |
75 | 75 |
76 // Overridden from RasterizerTask: | 76 // Overridden from TileTask: |
77 void ScheduleOnOriginThread(RasterizerTaskClient* client) override { | 77 void ScheduleOnOriginThread(TileTaskClient* client) override { |
78 DCHECK(!raster_buffer_); | 78 DCHECK(!raster_buffer_); |
79 raster_buffer_ = client->AcquireBufferForRaster(resource()); | 79 raster_buffer_ = client->AcquireBufferForRaster(resource()); |
80 } | 80 } |
81 void CompleteOnOriginThread(RasterizerTaskClient* client) override { | 81 void CompleteOnOriginThread(TileTaskClient* client) override { |
82 client->ReleaseBufferForRaster(raster_buffer_.Pass()); | 82 client->ReleaseBufferForRaster(raster_buffer_.Pass()); |
83 } | 83 } |
84 void RunReplyOnOriginThread() override { | 84 void RunReplyOnOriginThread() override { |
85 DCHECK(!raster_buffer_); | 85 DCHECK(!raster_buffer_); |
86 reply_.Run(analysis_, !HasFinishedRunning()); | 86 reply_.Run(analysis_, !HasFinishedRunning()); |
87 } | 87 } |
88 | 88 |
89 protected: | 89 protected: |
90 ~RasterTaskImpl() override { DCHECK(!raster_buffer_); } | 90 ~RasterTaskImpl() override { DCHECK(!raster_buffer_); } |
91 | 91 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 void RunOnWorkerThread() override { | 151 void RunOnWorkerThread() override { |
152 TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread"); | 152 TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread"); |
153 | 153 |
154 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( | 154 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( |
155 pixel_ref_.get()); | 155 pixel_ref_.get()); |
156 // This will cause the image referred to by pixel ref to be decoded. | 156 // This will cause the image referred to by pixel ref to be decoded. |
157 pixel_ref_->lockPixels(); | 157 pixel_ref_->lockPixels(); |
158 pixel_ref_->unlockPixels(); | 158 pixel_ref_->unlockPixels(); |
159 } | 159 } |
160 | 160 |
161 // Overridden from RasterizerTask: | 161 // Overridden from TileTask: |
162 void ScheduleOnOriginThread(RasterizerTaskClient* client) override {} | 162 void ScheduleOnOriginThread(TileTaskClient* client) override {} |
163 void CompleteOnOriginThread(RasterizerTaskClient* client) override {} | 163 void CompleteOnOriginThread(TileTaskClient* client) override {} |
164 void RunReplyOnOriginThread() override { reply_.Run(!HasFinishedRunning()); } | 164 void RunReplyOnOriginThread() override { reply_.Run(!HasFinishedRunning()); } |
165 | 165 |
166 protected: | 166 protected: |
167 ~ImageDecodeTaskImpl() override {} | 167 ~ImageDecodeTaskImpl() override {} |
168 | 168 |
169 private: | 169 private: |
170 skia::RefPtr<SkPixelRef> pixel_ref_; | 170 skia::RefPtr<SkPixelRef> pixel_ref_; |
171 int layer_id_; | 171 int layer_id_; |
172 RenderingStatsInstrumentation* rendering_stats_; | 172 RenderingStatsInstrumentation* rendering_stats_; |
173 const base::Callback<void(bool was_canceled)> reply_; | 173 const base::Callback<void(bool was_canceled)> reply_; |
(...skipping 27 matching lines...) Expand all Loading... |
201 state->SetInteger("completed_count", stats.completed_count); | 201 state->SetInteger("completed_count", stats.completed_count); |
202 state->SetInteger("canceled_count", stats.canceled_count); | 202 state->SetInteger("canceled_count", stats.canceled_count); |
203 return state; | 203 return state; |
204 } | 204 } |
205 | 205 |
206 // static | 206 // static |
207 scoped_ptr<TileManager> TileManager::Create( | 207 scoped_ptr<TileManager> TileManager::Create( |
208 TileManagerClient* client, | 208 TileManagerClient* client, |
209 base::SequencedTaskRunner* task_runner, | 209 base::SequencedTaskRunner* task_runner, |
210 ResourcePool* resource_pool, | 210 ResourcePool* resource_pool, |
211 Rasterizer* rasterizer, | 211 TileTaskRunner* tile_task_runner, |
212 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 212 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
213 size_t scheduled_raster_task_limit) { | 213 size_t scheduled_raster_task_limit) { |
214 return make_scoped_ptr(new TileManager(client, | 214 return make_scoped_ptr(new TileManager( |
215 task_runner, | 215 client, task_runner, resource_pool, tile_task_runner, |
216 resource_pool, | 216 rendering_stats_instrumentation, scheduled_raster_task_limit)); |
217 rasterizer, | |
218 rendering_stats_instrumentation, | |
219 scheduled_raster_task_limit)); | |
220 } | 217 } |
221 | 218 |
222 TileManager::TileManager( | 219 TileManager::TileManager( |
223 TileManagerClient* client, | 220 TileManagerClient* client, |
224 const scoped_refptr<base::SequencedTaskRunner>& task_runner, | 221 const scoped_refptr<base::SequencedTaskRunner>& task_runner, |
225 ResourcePool* resource_pool, | 222 ResourcePool* resource_pool, |
226 Rasterizer* rasterizer, | 223 TileTaskRunner* tile_task_runner, |
227 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 224 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
228 size_t scheduled_raster_task_limit) | 225 size_t scheduled_raster_task_limit) |
229 : client_(client), | 226 : client_(client), |
230 task_runner_(task_runner), | 227 task_runner_(task_runner), |
231 resource_pool_(resource_pool), | 228 resource_pool_(resource_pool), |
232 rasterizer_(rasterizer), | 229 tile_task_runner_(tile_task_runner), |
233 scheduled_raster_task_limit_(scheduled_raster_task_limit), | 230 scheduled_raster_task_limit_(scheduled_raster_task_limit), |
234 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), | 231 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), |
235 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 232 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
236 did_check_for_completed_tasks_since_last_schedule_tasks_(true), | 233 did_check_for_completed_tasks_since_last_schedule_tasks_(true), |
237 did_oom_on_last_assign_(false), | 234 did_oom_on_last_assign_(false), |
238 ready_to_activate_check_notifier_( | 235 ready_to_activate_check_notifier_( |
239 task_runner_.get(), | 236 task_runner_.get(), |
240 base::Bind(&TileManager::CheckIfReadyToActivate, | 237 base::Bind(&TileManager::CheckIfReadyToActivate, |
241 base::Unretained(this))), | 238 base::Unretained(this))), |
242 ready_to_draw_check_notifier_( | 239 ready_to_draw_check_notifier_( |
243 task_runner_.get(), | 240 task_runner_.get(), |
244 base::Bind(&TileManager::CheckIfReadyToDraw, base::Unretained(this))), | 241 base::Bind(&TileManager::CheckIfReadyToDraw, base::Unretained(this))), |
245 did_notify_ready_to_activate_(false), | 242 did_notify_ready_to_activate_(false), |
246 did_notify_ready_to_draw_(false) { | 243 did_notify_ready_to_draw_(false) { |
247 rasterizer_->SetClient(this); | 244 tile_task_runner_->SetClient(this); |
248 } | 245 } |
249 | 246 |
250 TileManager::~TileManager() { | 247 TileManager::~TileManager() { |
251 // Reset global state and manage. This should cause | 248 // Reset global state and manage. This should cause |
252 // our memory usage to drop to zero. | 249 // our memory usage to drop to zero. |
253 global_state_ = GlobalStateThatImpactsTilePriority(); | 250 global_state_ = GlobalStateThatImpactsTilePriority(); |
254 | 251 |
255 RasterTaskQueue empty; | 252 TileTaskQueue empty; |
256 rasterizer_->ScheduleTasks(&empty); | 253 tile_task_runner_->ScheduleTasks(&empty); |
257 orphan_raster_tasks_.clear(); | 254 orphan_raster_tasks_.clear(); |
258 | 255 |
259 // This should finish all pending tasks and release any uninitialized | 256 // This should finish all pending tasks and release any uninitialized |
260 // resources. | 257 // resources. |
261 rasterizer_->Shutdown(); | 258 tile_task_runner_->Shutdown(); |
262 rasterizer_->CheckForCompletedTasks(); | 259 tile_task_runner_->CheckForCompletedTasks(); |
263 | 260 |
264 FreeResourcesForReleasedTiles(); | 261 FreeResourcesForReleasedTiles(); |
265 CleanUpReleasedTiles(); | 262 CleanUpReleasedTiles(); |
266 } | 263 } |
267 | 264 |
268 void TileManager::Release(Tile* tile) { | 265 void TileManager::Release(Tile* tile) { |
269 released_tiles_.push_back(tile); | 266 released_tiles_.push_back(tile); |
270 } | 267 } |
271 | 268 |
272 TaskSetCollection TileManager::TasksThatShouldBeForcedToComplete() const { | 269 TaskSetCollection TileManager::TasksThatShouldBeForcedToComplete() const { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 if (--layer_it->second == 0) { | 302 if (--layer_it->second == 0) { |
306 used_layer_counts_.erase(layer_it); | 303 used_layer_counts_.erase(layer_it); |
307 image_decode_tasks_.erase(tile->layer_id()); | 304 image_decode_tasks_.erase(tile->layer_id()); |
308 } | 305 } |
309 | 306 |
310 delete tile; | 307 delete tile; |
311 it = released_tiles_.erase(it); | 308 it = released_tiles_.erase(it); |
312 } | 309 } |
313 } | 310 } |
314 | 311 |
315 void TileManager::DidFinishRunningTasks(TaskSet task_set) { | 312 void TileManager::DidFinishRunningTileTasks(TaskSet task_set) { |
316 TRACE_EVENT1("cc", "TileManager::DidFinishRunningTasks", "task_set", | 313 TRACE_EVENT1("cc", "TileManager::DidFinishRunningTileTasks", "task_set", |
317 TaskSetName(task_set)); | 314 TaskSetName(task_set)); |
318 | 315 |
319 switch (task_set) { | 316 switch (task_set) { |
320 case ALL: { | 317 case ALL: { |
321 bool memory_usage_above_limit = | 318 bool memory_usage_above_limit = |
322 resource_pool_->total_memory_usage_bytes() > | 319 resource_pool_->total_memory_usage_bytes() > |
323 global_state_.soft_memory_limit_in_bytes; | 320 global_state_.soft_memory_limit_in_bytes; |
324 | 321 |
325 // When OOM, keep re-assigning memory until we reach a steady state | 322 // When OOM, keep re-assigning memory until we reach a steady state |
326 // where top-priority tiles are initialized. | 323 // where top-priority tiles are initialized. |
327 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ && | 324 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ && |
328 !memory_usage_above_limit) | 325 !memory_usage_above_limit) |
329 return; | 326 return; |
330 | 327 |
331 rasterizer_->CheckForCompletedTasks(); | 328 tile_task_runner_->CheckForCompletedTasks(); |
332 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 329 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
333 | 330 |
334 TileVector tiles_that_need_to_be_rasterized; | 331 TileVector tiles_that_need_to_be_rasterized; |
335 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); | 332 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); |
336 | 333 |
337 // |tiles_that_need_to_be_rasterized| will be empty when we reach a | 334 // |tiles_that_need_to_be_rasterized| will be empty when we reach a |
338 // steady memory state. Keep scheduling tasks until we reach this state. | 335 // steady memory state. Keep scheduling tasks until we reach this state. |
339 if (!tiles_that_need_to_be_rasterized.empty()) { | 336 if (!tiles_that_need_to_be_rasterized.empty()) { |
340 ScheduleTasks(tiles_that_need_to_be_rasterized); | 337 ScheduleTasks(tiles_that_need_to_be_rasterized); |
341 return; | 338 return; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 ready_to_activate_check_notifier_.Schedule(); | 390 ready_to_activate_check_notifier_.Schedule(); |
394 return; | 391 return; |
395 case REQUIRED_FOR_DRAW: | 392 case REQUIRED_FOR_DRAW: |
396 ready_to_draw_check_notifier_.Schedule(); | 393 ready_to_draw_check_notifier_.Schedule(); |
397 return; | 394 return; |
398 } | 395 } |
399 | 396 |
400 NOTREACHED(); | 397 NOTREACHED(); |
401 } | 398 } |
402 | 399 |
403 void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { | 400 void TileManager::PrepareTiles( |
404 TRACE_EVENT0("cc", "TileManager::ManageTiles"); | 401 const GlobalStateThatImpactsTilePriority& state) { |
| 402 TRACE_EVENT0("cc", "TileManager::PrepareTiles"); |
405 | 403 |
406 global_state_ = state; | 404 global_state_ = state; |
407 | 405 |
408 // We need to call CheckForCompletedTasks() once in-between each call | 406 // We need to call CheckForCompletedTasks() once in-between each call |
409 // to ScheduleTasks() to prevent canceled tasks from being scheduled. | 407 // to ScheduleTasks() to prevent canceled tasks from being scheduled. |
410 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { | 408 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { |
411 rasterizer_->CheckForCompletedTasks(); | 409 tile_task_runner_->CheckForCompletedTasks(); |
412 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 410 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
413 } | 411 } |
414 | 412 |
415 FreeResourcesForReleasedTiles(); | 413 FreeResourcesForReleasedTiles(); |
416 CleanUpReleasedTiles(); | 414 CleanUpReleasedTiles(); |
417 | 415 |
418 TileVector tiles_that_need_to_be_rasterized; | 416 TileVector tiles_that_need_to_be_rasterized; |
419 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); | 417 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); |
420 | 418 |
421 // Schedule rasterizer tasks. | 419 // Schedule tile tasks. |
422 ScheduleTasks(tiles_that_need_to_be_rasterized); | 420 ScheduleTasks(tiles_that_need_to_be_rasterized); |
423 | 421 |
424 did_notify_ready_to_activate_ = false; | 422 did_notify_ready_to_activate_ = false; |
425 did_notify_ready_to_draw_ = false; | 423 did_notify_ready_to_draw_ = false; |
426 | 424 |
427 TRACE_EVENT_INSTANT1("cc", | 425 TRACE_EVENT_INSTANT1("cc", "DidPrepare", TRACE_EVENT_SCOPE_THREAD, "state", |
428 "DidManage", | |
429 TRACE_EVENT_SCOPE_THREAD, | |
430 "state", | |
431 BasicStateAsValue()); | 426 BasicStateAsValue()); |
432 | 427 |
433 TRACE_COUNTER_ID1("cc", | 428 TRACE_COUNTER_ID1("cc", |
434 "unused_memory_bytes", | 429 "unused_memory_bytes", |
435 this, | 430 this, |
436 resource_pool_->total_memory_usage_bytes() - | 431 resource_pool_->total_memory_usage_bytes() - |
437 resource_pool_->acquired_memory_usage_bytes()); | 432 resource_pool_->acquired_memory_usage_bytes()); |
438 } | 433 } |
439 | 434 |
440 void TileManager::UpdateVisibleTiles() { | 435 void TileManager::UpdateVisibleTiles() { |
441 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles"); | 436 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles"); |
442 | 437 |
443 rasterizer_->CheckForCompletedTasks(); | 438 tile_task_runner_->CheckForCompletedTasks(); |
444 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 439 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
445 | 440 |
446 TRACE_EVENT_INSTANT1( | 441 TRACE_EVENT_INSTANT1( |
447 "cc", | 442 "cc", |
448 "DidUpdateVisibleTiles", | 443 "DidUpdateVisibleTiles", |
449 TRACE_EVENT_SCOPE_THREAD, | 444 TRACE_EVENT_SCOPE_THREAD, |
450 "stats", | 445 "stats", |
451 RasterTaskCompletionStatsAsValue(update_visible_tiles_stats_)); | 446 RasterTaskCompletionStatsAsValue(update_visible_tiles_stats_)); |
452 update_visible_tiles_stats_ = RasterTaskCompletionStats(); | 447 update_visible_tiles_stats_ = RasterTaskCompletionStats(); |
453 } | 448 } |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
691 if (!mts.raster_task.get()) | 686 if (!mts.raster_task.get()) |
692 mts.raster_task = CreateRasterTask(tile); | 687 mts.raster_task = CreateRasterTask(tile); |
693 | 688 |
694 TaskSetCollection task_sets; | 689 TaskSetCollection task_sets; |
695 if (tile->required_for_activation()) | 690 if (tile->required_for_activation()) |
696 task_sets.set(REQUIRED_FOR_ACTIVATION); | 691 task_sets.set(REQUIRED_FOR_ACTIVATION); |
697 if (tile->required_for_draw()) | 692 if (tile->required_for_draw()) |
698 task_sets.set(REQUIRED_FOR_DRAW); | 693 task_sets.set(REQUIRED_FOR_DRAW); |
699 task_sets.set(ALL); | 694 task_sets.set(ALL); |
700 raster_queue_.items.push_back( | 695 raster_queue_.items.push_back( |
701 RasterTaskQueue::Item(mts.raster_task.get(), task_sets)); | 696 TileTaskQueue::Item(mts.raster_task.get(), task_sets)); |
702 } | 697 } |
703 | 698 |
704 // We must reduce the amount of unused resoruces before calling | 699 // We must reduce the amount of unused resoruces before calling |
705 // ScheduleTasks to prevent usage from rising above limits. | 700 // ScheduleTasks to prevent usage from rising above limits. |
706 resource_pool_->ReduceResourceUsage(); | 701 resource_pool_->ReduceResourceUsage(); |
707 | 702 |
708 // Schedule running of |raster_queue_|. This replaces any previously | 703 // Schedule running of |raster_queue_|. This replaces any previously |
709 // scheduled tasks and effectively cancels all tasks not present | 704 // scheduled tasks and effectively cancels all tasks not present |
710 // in |raster_queue_|. | 705 // in |raster_queue_|. |
711 rasterizer_->ScheduleTasks(&raster_queue_); | 706 tile_task_runner_->ScheduleTasks(&raster_queue_); |
712 | 707 |
713 // It's now safe to clean up orphan tasks as raster worker pool is not | 708 // It's now safe to clean up orphan tasks as raster worker pool is not |
714 // allowed to keep around unreferenced raster tasks after ScheduleTasks() has | 709 // allowed to keep around unreferenced raster tasks after ScheduleTasks() has |
715 // been called. | 710 // been called. |
716 orphan_raster_tasks_.clear(); | 711 orphan_raster_tasks_.clear(); |
717 | 712 |
718 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; | 713 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; |
719 } | 714 } |
720 | 715 |
721 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( | 716 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 layer_id, | 841 layer_id, |
847 source_frame_number, | 842 source_frame_number, |
848 flags)); | 843 flags)); |
849 DCHECK(tiles_.find(tile->id()) == tiles_.end()); | 844 DCHECK(tiles_.find(tile->id()) == tiles_.end()); |
850 | 845 |
851 tiles_[tile->id()] = tile.get(); | 846 tiles_[tile->id()] = tile.get(); |
852 used_layer_counts_[tile->layer_id()]++; | 847 used_layer_counts_[tile->layer_id()]++; |
853 return tile; | 848 return tile; |
854 } | 849 } |
855 | 850 |
856 void TileManager::SetRasterizerForTesting(Rasterizer* rasterizer) { | 851 void TileManager::SetTileTaskRunnerForTesting( |
857 rasterizer_ = rasterizer; | 852 TileTaskRunner* tile_task_runner) { |
858 rasterizer_->SetClient(this); | 853 tile_task_runner_ = tile_task_runner; |
| 854 tile_task_runner_->SetClient(this); |
859 } | 855 } |
860 | 856 |
861 bool TileManager::IsReadyToActivate() const { | 857 bool TileManager::IsReadyToActivate() const { |
862 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); | 858 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); |
863 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); | 859 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); |
864 | 860 |
865 for (const auto& layer : layers) { | 861 for (const auto& layer : layers) { |
866 if (!layer->AllTilesRequiredForActivationAreReadyToDraw()) | 862 if (!layer->AllTilesRequiredForActivationAreReadyToDraw()) |
867 return false; | 863 return false; |
868 } | 864 } |
869 | 865 |
870 return true; | 866 return true; |
871 } | 867 } |
872 | 868 |
873 bool TileManager::IsReadyToDraw() const { | 869 bool TileManager::IsReadyToDraw() const { |
874 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); | 870 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); |
875 | 871 |
876 for (const auto& layer : layers) { | 872 for (const auto& layer : layers) { |
877 if (!layer->AllTilesRequiredForDrawAreReadyToDraw()) | 873 if (!layer->AllTilesRequiredForDrawAreReadyToDraw()) |
878 return false; | 874 return false; |
879 } | 875 } |
880 | 876 |
881 return true; | 877 return true; |
882 } | 878 } |
883 | 879 |
884 void TileManager::CheckIfReadyToActivate() { | 880 void TileManager::CheckIfReadyToActivate() { |
885 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToActivate"); | 881 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToActivate"); |
886 | 882 |
887 rasterizer_->CheckForCompletedTasks(); | 883 tile_task_runner_->CheckForCompletedTasks(); |
888 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 884 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
889 | 885 |
890 if (did_notify_ready_to_activate_) | 886 if (did_notify_ready_to_activate_) |
891 return; | 887 return; |
892 if (!IsReadyToActivate()) | 888 if (!IsReadyToActivate()) |
893 return; | 889 return; |
894 | 890 |
895 client_->NotifyReadyToActivate(); | 891 client_->NotifyReadyToActivate(); |
896 did_notify_ready_to_activate_ = true; | 892 did_notify_ready_to_activate_ = true; |
897 } | 893 } |
898 | 894 |
899 void TileManager::CheckIfReadyToDraw() { | 895 void TileManager::CheckIfReadyToDraw() { |
900 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToDraw"); | 896 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToDraw"); |
901 | 897 |
902 rasterizer_->CheckForCompletedTasks(); | 898 tile_task_runner_->CheckForCompletedTasks(); |
903 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 899 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
904 | 900 |
905 if (did_notify_ready_to_draw_) | 901 if (did_notify_ready_to_draw_) |
906 return; | 902 return; |
907 if (!IsReadyToDraw()) | 903 if (!IsReadyToDraw()) |
908 return; | 904 return; |
909 | 905 |
910 client_->NotifyReadyToDraw(); | 906 client_->NotifyReadyToDraw(); |
911 did_notify_ready_to_draw_ = true; | 907 did_notify_ready_to_draw_ = true; |
912 } | 908 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 result -= other; | 951 result -= other; |
956 return result; | 952 return result; |
957 } | 953 } |
958 | 954 |
959 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { | 955 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { |
960 return memory_bytes_ > limit.memory_bytes_ || | 956 return memory_bytes_ > limit.memory_bytes_ || |
961 resource_count_ > limit.resource_count_; | 957 resource_count_ > limit.resource_count_; |
962 } | 958 } |
963 | 959 |
964 } // namespace cc | 960 } // namespace cc |
OLD | NEW |