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

Unified Diff: cc/tiles/tile_manager.cc

Issue 2668873002: cc: Add checker-imaging support to TileManager. (Closed)
Patch Set: remove include Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/tiles/tile_manager.h ('k') | cc/tiles/tile_manager_settings.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tiles/tile_manager.cc
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
index 710bf36db0f454ea83661bff156025b4bf047340..e43fce7b0398205875253c2cc0a38f338bae1e31 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) {}
@@ -738,7 +739,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;
@@ -895,6 +896,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/691087.
std::vector<DrawImage> images;
prioritized_tile.raster_source()->GetDiscardableImagesInRect(
tile->enclosing_layer_rect(), tile->contents_scale(), &images);
@@ -997,14 +1000,20 @@ 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()];
+ ImageIdFlatSet images_to_skip;
images.clear();
if (!playback_settings.skip_images) {
prioritized_tile.raster_source()->GetDiscardableImagesInRect(
tile->enclosing_layer_rect(), tile->contents_scale(), &images);
+ checker_image_tracker_.FilterImagesForCheckeringForTile(
+ &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();
+ playback_settings.images_to_skip = std::move(images_to_skip);
// Get the tasks for the required images.
ImageDecodeCache::TracingInfo tracing_info(
@@ -1271,6 +1280,18 @@ void TileManager::MarkTilesOutOfMemory(
}
}
+const ImageIdFlatSet& 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());
}
@@ -1293,7 +1314,7 @@ TileManager::ScheduledTasksStateAsValue() const {
}
bool TileManager::UsePartialRaster() const {
- return use_partial_raster_ &&
+ return tile_manager_settings_.use_partial_raster &&
raster_buffer_provider_->CanPartialRasterIntoProvidedResource();
}
« no previous file with comments | « cc/tiles/tile_manager.h ('k') | cc/tiles/tile_manager_settings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698