| 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" | 21 #include "cc/resources/tile_task_runner.h" |
| 22 #include "cc/resources/tile.h" | 22 #include "cc/resources/tile.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 |
| (...skipping 34 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 } | 398 } |
| 402 | 399 |
| 403 void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { | 400 void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { |
| 404 TRACE_EVENT0("cc", "TileManager::ManageTiles"); | 401 TRACE_EVENT0("cc", "TileManager::ManageTiles"); |
| 405 | 402 |
| 406 global_state_ = state; | 403 global_state_ = state; |
| 407 | 404 |
| 408 // We need to call CheckForCompletedTasks() once in-between each call | 405 // We need to call CheckForCompletedTasks() once in-between each call |
| 409 // to ScheduleTasks() to prevent canceled tasks from being scheduled. | 406 // to ScheduleTasks() to prevent canceled tasks from being scheduled. |
| 410 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { | 407 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { |
| 411 rasterizer_->CheckForCompletedTasks(); | 408 tile_task_runner_->CheckForCompletedTasks(); |
| 412 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 409 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
| 413 } | 410 } |
| 414 | 411 |
| 415 FreeResourcesForReleasedTiles(); | 412 FreeResourcesForReleasedTiles(); |
| 416 CleanUpReleasedTiles(); | 413 CleanUpReleasedTiles(); |
| 417 | 414 |
| 418 TileVector tiles_that_need_to_be_rasterized; | 415 TileVector tiles_that_need_to_be_rasterized; |
| 419 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); | 416 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); |
| 420 | 417 |
| 421 // Schedule rasterizer tasks. | 418 // Schedule tile tasks. |
| 422 ScheduleTasks(tiles_that_need_to_be_rasterized); | 419 ScheduleTasks(tiles_that_need_to_be_rasterized); |
| 423 | 420 |
| 424 did_notify_ready_to_activate_ = false; | 421 did_notify_ready_to_activate_ = false; |
| 425 did_notify_ready_to_draw_ = false; | 422 did_notify_ready_to_draw_ = false; |
| 426 | 423 |
| 427 TRACE_EVENT_INSTANT1("cc", | 424 TRACE_EVENT_INSTANT1("cc", |
| 428 "DidManage", | 425 "DidManage", |
| 429 TRACE_EVENT_SCOPE_THREAD, | 426 TRACE_EVENT_SCOPE_THREAD, |
| 430 "state", | 427 "state", |
| 431 BasicStateAsValue()); | 428 BasicStateAsValue()); |
| 432 | 429 |
| 433 TRACE_COUNTER_ID1("cc", | 430 TRACE_COUNTER_ID1("cc", |
| 434 "unused_memory_bytes", | 431 "unused_memory_bytes", |
| 435 this, | 432 this, |
| 436 resource_pool_->total_memory_usage_bytes() - | 433 resource_pool_->total_memory_usage_bytes() - |
| 437 resource_pool_->acquired_memory_usage_bytes()); | 434 resource_pool_->acquired_memory_usage_bytes()); |
| 438 } | 435 } |
| 439 | 436 |
| 440 void TileManager::UpdateVisibleTiles() { | 437 void TileManager::UpdateVisibleTiles() { |
| 441 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles"); | 438 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles"); |
| 442 | 439 |
| 443 rasterizer_->CheckForCompletedTasks(); | 440 tile_task_runner_->CheckForCompletedTasks(); |
| 444 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 441 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
| 445 | 442 |
| 446 TRACE_EVENT_INSTANT1( | 443 TRACE_EVENT_INSTANT1( |
| 447 "cc", | 444 "cc", |
| 448 "DidUpdateVisibleTiles", | 445 "DidUpdateVisibleTiles", |
| 449 TRACE_EVENT_SCOPE_THREAD, | 446 TRACE_EVENT_SCOPE_THREAD, |
| 450 "stats", | 447 "stats", |
| 451 RasterTaskCompletionStatsAsValue(update_visible_tiles_stats_)); | 448 RasterTaskCompletionStatsAsValue(update_visible_tiles_stats_)); |
| 452 update_visible_tiles_stats_ = RasterTaskCompletionStats(); | 449 update_visible_tiles_stats_ = RasterTaskCompletionStats(); |
| 453 } | 450 } |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 if (!mts.raster_task.get()) | 688 if (!mts.raster_task.get()) |
| 692 mts.raster_task = CreateRasterTask(tile); | 689 mts.raster_task = CreateRasterTask(tile); |
| 693 | 690 |
| 694 TaskSetCollection task_sets; | 691 TaskSetCollection task_sets; |
| 695 if (tile->required_for_activation()) | 692 if (tile->required_for_activation()) |
| 696 task_sets.set(REQUIRED_FOR_ACTIVATION); | 693 task_sets.set(REQUIRED_FOR_ACTIVATION); |
| 697 if (tile->required_for_draw()) | 694 if (tile->required_for_draw()) |
| 698 task_sets.set(REQUIRED_FOR_DRAW); | 695 task_sets.set(REQUIRED_FOR_DRAW); |
| 699 task_sets.set(ALL); | 696 task_sets.set(ALL); |
| 700 raster_queue_.items.push_back( | 697 raster_queue_.items.push_back( |
| 701 RasterTaskQueue::Item(mts.raster_task.get(), task_sets)); | 698 TileTaskQueue::Item(mts.raster_task.get(), task_sets)); |
| 702 } | 699 } |
| 703 | 700 |
| 704 // We must reduce the amount of unused resoruces before calling | 701 // We must reduce the amount of unused resoruces before calling |
| 705 // ScheduleTasks to prevent usage from rising above limits. | 702 // ScheduleTasks to prevent usage from rising above limits. |
| 706 resource_pool_->ReduceResourceUsage(); | 703 resource_pool_->ReduceResourceUsage(); |
| 707 | 704 |
| 708 // Schedule running of |raster_queue_|. This replaces any previously | 705 // Schedule running of |raster_queue_|. This replaces any previously |
| 709 // scheduled tasks and effectively cancels all tasks not present | 706 // scheduled tasks and effectively cancels all tasks not present |
| 710 // in |raster_queue_|. | 707 // in |raster_queue_|. |
| 711 rasterizer_->ScheduleTasks(&raster_queue_); | 708 tile_task_runner_->ScheduleTasks(&raster_queue_); |
| 712 | 709 |
| 713 // It's now safe to clean up orphan tasks as raster worker pool is not | 710 // 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 | 711 // allowed to keep around unreferenced raster tasks after ScheduleTasks() has |
| 715 // been called. | 712 // been called. |
| 716 orphan_raster_tasks_.clear(); | 713 orphan_raster_tasks_.clear(); |
| 717 | 714 |
| 718 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; | 715 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; |
| 719 } | 716 } |
| 720 | 717 |
| 721 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( | 718 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 layer_id, | 843 layer_id, |
| 847 source_frame_number, | 844 source_frame_number, |
| 848 flags)); | 845 flags)); |
| 849 DCHECK(tiles_.find(tile->id()) == tiles_.end()); | 846 DCHECK(tiles_.find(tile->id()) == tiles_.end()); |
| 850 | 847 |
| 851 tiles_[tile->id()] = tile.get(); | 848 tiles_[tile->id()] = tile.get(); |
| 852 used_layer_counts_[tile->layer_id()]++; | 849 used_layer_counts_[tile->layer_id()]++; |
| 853 return tile; | 850 return tile; |
| 854 } | 851 } |
| 855 | 852 |
| 856 void TileManager::SetRasterizerForTesting(Rasterizer* rasterizer) { | 853 void TileManager::SetTileTaskRunnerForTesting( |
| 857 rasterizer_ = rasterizer; | 854 TileTaskRunner* tile_task_runner) { |
| 858 rasterizer_->SetClient(this); | 855 tile_task_runner_ = tile_task_runner; |
| 856 tile_task_runner_->SetClient(this); |
| 859 } | 857 } |
| 860 | 858 |
| 861 bool TileManager::IsReadyToActivate() const { | 859 bool TileManager::IsReadyToActivate() const { |
| 862 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); | 860 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); |
| 863 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); | 861 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); |
| 864 | 862 |
| 865 for (const auto& layer : layers) { | 863 for (const auto& layer : layers) { |
| 866 if (!layer->AllTilesRequiredForActivationAreReadyToDraw()) | 864 if (!layer->AllTilesRequiredForActivationAreReadyToDraw()) |
| 867 return false; | 865 return false; |
| 868 } | 866 } |
| 869 | 867 |
| 870 return true; | 868 return true; |
| 871 } | 869 } |
| 872 | 870 |
| 873 bool TileManager::IsReadyToDraw() const { | 871 bool TileManager::IsReadyToDraw() const { |
| 874 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); | 872 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); |
| 875 | 873 |
| 876 for (const auto& layer : layers) { | 874 for (const auto& layer : layers) { |
| 877 if (!layer->AllTilesRequiredForDrawAreReadyToDraw()) | 875 if (!layer->AllTilesRequiredForDrawAreReadyToDraw()) |
| 878 return false; | 876 return false; |
| 879 } | 877 } |
| 880 | 878 |
| 881 return true; | 879 return true; |
| 882 } | 880 } |
| 883 | 881 |
| 884 void TileManager::CheckIfReadyToActivate() { | 882 void TileManager::CheckIfReadyToActivate() { |
| 885 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToActivate"); | 883 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToActivate"); |
| 886 | 884 |
| 887 rasterizer_->CheckForCompletedTasks(); | 885 tile_task_runner_->CheckForCompletedTasks(); |
| 888 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 886 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
| 889 | 887 |
| 890 if (did_notify_ready_to_activate_) | 888 if (did_notify_ready_to_activate_) |
| 891 return; | 889 return; |
| 892 if (!IsReadyToActivate()) | 890 if (!IsReadyToActivate()) |
| 893 return; | 891 return; |
| 894 | 892 |
| 895 client_->NotifyReadyToActivate(); | 893 client_->NotifyReadyToActivate(); |
| 896 did_notify_ready_to_activate_ = true; | 894 did_notify_ready_to_activate_ = true; |
| 897 } | 895 } |
| 898 | 896 |
| 899 void TileManager::CheckIfReadyToDraw() { | 897 void TileManager::CheckIfReadyToDraw() { |
| 900 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToDraw"); | 898 TRACE_EVENT0("cc", "TileManager::CheckIfReadyToDraw"); |
| 901 | 899 |
| 902 rasterizer_->CheckForCompletedTasks(); | 900 tile_task_runner_->CheckForCompletedTasks(); |
| 903 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 901 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
| 904 | 902 |
| 905 if (did_notify_ready_to_draw_) | 903 if (did_notify_ready_to_draw_) |
| 906 return; | 904 return; |
| 907 if (!IsReadyToDraw()) | 905 if (!IsReadyToDraw()) |
| 908 return; | 906 return; |
| 909 | 907 |
| 910 client_->NotifyReadyToDraw(); | 908 client_->NotifyReadyToDraw(); |
| 911 did_notify_ready_to_draw_ = true; | 909 did_notify_ready_to_draw_ = true; |
| 912 } | 910 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 result -= other; | 953 result -= other; |
| 956 return result; | 954 return result; |
| 957 } | 955 } |
| 958 | 956 |
| 959 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { | 957 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { |
| 960 return memory_bytes_ > limit.memory_bytes_ || | 958 return memory_bytes_ > limit.memory_bytes_ || |
| 961 resource_count_ > limit.resource_count_; | 959 resource_count_ > limit.resource_count_; |
| 962 } | 960 } |
| 963 | 961 |
| 964 } // namespace cc | 962 } // namespace cc |
| OLD | NEW |