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

Unified Diff: cc/tiles/tile_manager.cc

Issue 2612123002: cc: Add a flag to check for tile priority inversion in AssignGpuMemory. (Closed)
Patch Set: master: update Created 3 years, 11 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/trees/layer_tree_host_impl.cc » ('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 0c15378545f86b7d9e6b14bc954e6ae3ee99e63b..425cfe8cc7f0d2bd7d89ab2ca66770083eca35b6 100644
--- a/cc/tiles/tile_manager.cc
+++ b/cc/tiles/tile_manager.cc
@@ -345,7 +345,8 @@ RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats) {
TileManager::TileManager(TileManagerClient* client,
base::SequencedTaskRunner* task_runner,
size_t scheduled_raster_task_limit,
- bool use_partial_raster)
+ bool use_partial_raster,
+ bool check_tile_priority_inversion)
: client_(client),
task_runner_(task_runner),
resource_pool_(nullptr),
@@ -366,6 +367,7 @@ TileManager::TileManager(TileManagerClient* client,
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) {}
TileManager::~TileManager() {
@@ -753,6 +755,41 @@ TileManager::PrioritizedWorkToSchedule TileManager::AssignGpuMemoryToTiles() {
tile->draw_info().set_was_a_prepaint_tile();
}
+ // Debugging to check that remaining tiles in the priority queue are not in
+ // the NOW bin and are required for neither activation nor draw.
+ // This runs if the following conditions hold:
+ // - check_tile_priority_inversion has been enabled.
+ // - the loop above has processed all tiles that would be needed for any
+ // signals to fire (that is,
+ // 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_ &&
+ all_tiles_that_need_to_be_rasterized_are_scheduled_ &&
+ global_state_.memory_limit_policy != ALLOW_NOTHING) {
+ TilePriority::PriorityBin highest_bin_found = TilePriority::NOW;
+ for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) {
+ const PrioritizedTile& prioritized_tile = raster_priority_queue->Top();
+ Tile* tile = prioritized_tile.tile();
+ TilePriority priority = prioritized_tile.priority();
+
+ if (priority.priority_bin > highest_bin_found)
+ highest_bin_found = priority.priority_bin;
sunnyps 2017/01/04 22:15:22 Shouldn't this be lowest bin (NOW < SOON < EVENTUA
vmpstr 2017/01/04 22:49:39 It's expected that tiles here would be in a higher
+
+ CHECK_NE(TilePriority::NOW, priority.priority_bin)
+ << "mode: " << global_state_.tree_priority
+ << " highest bin: " << highest_bin_found;
+ CHECK(!tile->required_for_activation())
+ << "mode: " << global_state_.tree_priority
+ << " bin: " << priority.priority_bin
+ << " highest bin: " << highest_bin_found;
+ CHECK(!tile->required_for_draw())
+ << "mode: " << global_state_.tree_priority
+ << " bin: " << priority.priority_bin
+ << " highest bin: " << highest_bin_found;
+ }
+ }
+
// Note that we should try and further reduce memory in case the above loop
// didn't reduce memory. This ensures that we always release as many resources
// as possible to stay within the memory limit.
« no previous file with comments | « cc/tiles/tile_manager.h ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698