Chromium Code Reviews| Index: cc/tiles/tile_manager.cc |
| diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc |
| index 12f3dfd26e4880ac3ffa6c9244ccec2c8a89787f..cb4717d558c7d9669438cef7e2f3a5b75a257773 100644 |
| --- a/cc/tiles/tile_manager.cc |
| +++ b/cc/tiles/tile_manager.cc |
| @@ -347,20 +347,22 @@ TileManager::TileManager( |
| base::SequencedTaskRunner* origin_task_runner, |
| scoped_refptr<base::SequencedTaskRunner> image_worker_task_runner, |
| size_t scheduled_raster_task_limit, |
| - bool use_partial_raster, |
| - bool check_tile_priority_inversion) |
| + const TileManagerSettings& tile_manager_settings) |
| : client_(client), |
| task_runner_(origin_task_runner), |
| resource_pool_(nullptr), |
| tile_task_manager_(nullptr), |
| scheduled_raster_task_limit_(scheduled_raster_task_limit), |
| - use_partial_raster_(use_partial_raster), |
| + tile_manager_settings_(tile_manager_settings), |
| use_gpu_rasterization_(false), |
| all_tiles_that_need_to_be_rasterized_are_scheduled_(true), |
| did_check_for_completed_tasks_since_last_schedule_tasks_(true), |
| did_oom_on_last_assign_(false), |
| image_controller_(origin_task_runner, |
| std::move(image_worker_task_runner)), |
| + checker_image_tracker_(&image_controller_, |
| + this, |
| + tile_manager_settings_.enable_checker_imaging), |
| more_tiles_need_prepare_check_notifier_( |
| task_runner_, |
| base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared, |
| @@ -371,7 +373,6 @@ TileManager::TileManager( |
| has_scheduled_tile_tasks_(false), |
| prepare_tiles_count_(0u), |
| next_tile_id_(0u), |
| - check_tile_priority_inversion_(check_tile_priority_inversion), |
| task_set_finished_weak_ptr_factory_(this), |
| ready_to_draw_callback_weak_ptr_factory_(this) {} |
| @@ -748,7 +749,7 @@ TileManager::PrioritizedWorkToSchedule TileManager::AssignGpuMemoryToTiles() { |
| // all_tiles_that_need_to_be_rasterized_are_scheduled_ is true) |
| // - Memory limit policy allows for any tiles to be scheduled at all (ie it's |
| // not ALLOW_NOTHING). |
| - if (check_tile_priority_inversion_ && |
| + if (tile_manager_settings_.check_tile_priority_inversion && |
| all_tiles_that_need_to_be_rasterized_are_scheduled_ && |
| global_state_.memory_limit_policy != ALLOW_NOTHING) { |
| TilePriority::PriorityBin highest_bin_found = TilePriority::NOW; |
| @@ -903,6 +904,8 @@ void TileManager::ScheduleTasks( |
| for (const PrioritizedTile& prioritized_tile : tiles_to_process_for_images) { |
| Tile* tile = prioritized_tile.tile(); |
| + // TODO(khushalsagar): Send these images to the ImageDecodeService, through |
| + // the CheckerImageTracker as well. See crbug.com/686267. |
|
vmpstr
2017/02/10 19:25:43
Can you file a different crbug for this? We also n
Khushal
2017/02/10 22:09:19
Done.
|
| std::vector<DrawImage> images; |
| prioritized_tile.raster_source()->GetDiscardableImagesInRect( |
| tile->enclosing_layer_rect(), tile->contents_scale(), &images); |
| @@ -1005,14 +1008,21 @@ scoped_refptr<TileTask> TileManager::CreateRasterTask( |
| // Create and queue all image decode tasks that this tile depends on. |
| TileTask::Vector decode_tasks; |
| std::vector<DrawImage>& images = scheduled_draw_images_[tile->id()]; |
| + std::unordered_set<ImageId>& images_to_skip = |
| + playback_settings.images_to_skip; |
| + images_to_skip.clear(); |
|
vmpstr
2017/02/10 19:25:43
It better be empty already since we just created p
Khushal
2017/02/10 22:09:19
Empty variable it is.
While we're here, why do we
|
| images.clear(); |
| if (!playback_settings.skip_images) { |
| prioritized_tile.raster_source()->GetDiscardableImagesInRect( |
| tile->enclosing_layer_rect(), tile->contents_scale(), &images); |
| + checker_image_tracker_.FilterImagesForCheckeringForTile( |
|
vmpstr
2017/02/10 19:25:43
Hey cool, this is like std::partition... kind of.
Khushal
2017/02/10 22:09:19
Yeah. Much neat now.
|
| + &images, &images_to_skip, prioritized_tile.tile()->tiling()->tree()); |
| } |
| - // We can skip the image hijack canvas if we have no images. |
| - playback_settings.use_image_hijack_canvas = !images.empty(); |
| + // We can skip the image hijack canvas if we have no images, or no images to |
| + // skip during raster. |
| + playback_settings.use_image_hijack_canvas = |
| + !images.empty() || !images_to_skip.empty(); |
| // Get the tasks for the required images. |
| ImageDecodeCache::TracingInfo tracing_info( |
| @@ -1279,6 +1289,19 @@ void TileManager::MarkTilesOutOfMemory( |
| } |
| } |
| +const std::unordered_set<ImageId>& |
| +TileManager::TakeImagesToInvalidateOnSyncTree() { |
| + return checker_image_tracker_.TakeImagesToInvalidateOnSyncTree(); |
| +} |
| + |
| +void TileManager::DidActivateSyncTree() { |
| + checker_image_tracker_.DidActivateSyncTree(); |
| +} |
| + |
| +void TileManager::NeedsInvalidationForCheckerImagedTiles() { |
| + client_->RequestImplSideInvalidation(); |
| +} |
| + |
| ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const { |
| return raster_buffer_provider_->GetResourceFormat(!tile->is_opaque()); |
| } |
| @@ -1301,7 +1324,7 @@ TileManager::ScheduledTasksStateAsValue() const { |
| } |
| bool TileManager::UsePartialRaster() const { |
| - return use_partial_raster_ && |
| + return tile_manager_settings_.use_partial_raster && |
| raster_buffer_provider_->CanPartialRasterIntoProvidedResource(); |
| } |