| 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;
|
| +
|
| + 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.
|
|
|