| Index: cc/resources/tile_manager.cc
|
| diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
|
| index 928861796487b0f4aac00f92bb918ff39316dfa3..5d183ae55290c5ef6909462f62c34fe3225d2b55 100644
|
| --- a/cc/resources/tile_manager.cc
|
| +++ b/cc/resources/tile_manager.cc
|
| @@ -18,7 +18,6 @@
|
| #include "cc/debug/traced_value.h"
|
| #include "cc/layers/picture_layer_impl.h"
|
| #include "cc/resources/raster_buffer.h"
|
| -#include "cc/resources/rasterizer.h"
|
| #include "cc/resources/tile.h"
|
| #include "cc/resources/tile_task_runner.h"
|
| #include "ui/gfx/geometry/rect_conversions.h"
|
| @@ -203,10 +202,9 @@ scoped_ptr<TileManager> TileManager::Create(
|
| base::SequencedTaskRunner* task_runner,
|
| ResourcePool* resource_pool,
|
| TileTaskRunner* tile_task_runner,
|
| - Rasterizer* rasterizer,
|
| size_t scheduled_raster_task_limit) {
|
| return make_scoped_ptr(new TileManager(client, task_runner, resource_pool,
|
| - tile_task_runner, rasterizer,
|
| + tile_task_runner,
|
| scheduled_raster_task_limit));
|
| }
|
|
|
| @@ -215,24 +213,15 @@ TileManager::TileManager(
|
| const scoped_refptr<base::SequencedTaskRunner>& task_runner,
|
| ResourcePool* resource_pool,
|
| TileTaskRunner* tile_task_runner,
|
| - Rasterizer* rasterizer,
|
| size_t scheduled_raster_task_limit)
|
| : client_(client),
|
| task_runner_(task_runner),
|
| resource_pool_(resource_pool),
|
| tile_task_runner_(tile_task_runner),
|
| - rasterizer_(rasterizer),
|
| scheduled_raster_task_limit_(scheduled_raster_task_limit),
|
| 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),
|
| - ready_to_activate_notifier_(
|
| - task_runner_.get(),
|
| - base::Bind(&TileManager::NotifyReadyToActivate,
|
| - base::Unretained(this))),
|
| - ready_to_draw_notifier_(
|
| - task_runner_.get(),
|
| - base::Bind(&TileManager::NotifyReadyToDraw, base::Unretained(this))),
|
| ready_to_activate_check_notifier_(
|
| task_runner_.get(),
|
| base::Bind(&TileManager::CheckIfReadyToActivate,
|
| @@ -348,117 +337,38 @@ void TileManager::PrepareTiles(
|
|
|
| global_state_ = state;
|
|
|
| - PrepareTilesMode prepare_tiles_mode = rasterizer_->GetPrepareTilesMode();
|
| -
|
| - // TODO(hendrikw): Consider moving some of this code to the rasterizer.
|
| - if (prepare_tiles_mode != PrepareTilesMode::PREPARE_NONE) {
|
| - // We need to call CheckForCompletedTasks() once in-between each call
|
| - // to ScheduleTasks() to prevent canceled tasks from being scheduled.
|
| - if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
|
| - tile_task_runner_->CheckForCompletedTasks();
|
| - did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
|
| - }
|
| -
|
| - FreeResourcesForReleasedTiles();
|
| - CleanUpReleasedTiles();
|
| -
|
| - TileVector tiles_that_need_to_be_rasterized;
|
| - scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
|
| - client_->BuildRasterQueue(global_state_.tree_priority,
|
| - RasterTilePriorityQueue::Type::ALL));
|
| - AssignGpuMemoryToTiles(raster_priority_queue.get(),
|
| - scheduled_raster_task_limit_,
|
| - &tiles_that_need_to_be_rasterized);
|
| -
|
| - // Inform the client that will likely require a draw if the highest priority
|
| - // tile that will be rasterized is required for draw.
|
| - client_->SetIsLikelyToRequireADraw(
|
| - !tiles_that_need_to_be_rasterized.empty() &&
|
| - (*tiles_that_need_to_be_rasterized.begin())->required_for_draw());
|
| -
|
| - // Schedule tile tasks.
|
| - ScheduleTasks(tiles_that_need_to_be_rasterized);
|
| -
|
| - did_notify_ready_to_activate_ = false;
|
| - did_notify_ready_to_draw_ = false;
|
| - } else {
|
| - if (global_state_.hard_memory_limit_in_bytes == 0) {
|
| - resource_pool_->CheckBusyResources(false);
|
| - MemoryUsage memory_limit(0, 0);
|
| - MemoryUsage memory_usage(resource_pool_->acquired_memory_usage_bytes(),
|
| - resource_pool_->acquired_resource_count());
|
| - FreeTileResourcesUntilUsageIsWithinLimit(nullptr, memory_limit,
|
| - &memory_usage);
|
| - }
|
| -
|
| - did_notify_ready_to_activate_ = false;
|
| - did_notify_ready_to_draw_ = false;
|
| - ready_to_activate_notifier_.Schedule();
|
| - ready_to_draw_notifier_.Schedule();
|
| + // We need to call CheckForCompletedTasks() once in-between each call
|
| + // to ScheduleTasks() to prevent canceled tasks from being scheduled.
|
| + if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
|
| + tile_task_runner_->CheckForCompletedTasks();
|
| + did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
|
| }
|
|
|
| - TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD,
|
| - "state", BasicStateAsValue());
|
| -
|
| - TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this,
|
| - resource_pool_->total_memory_usage_bytes() -
|
| - resource_pool_->acquired_memory_usage_bytes());
|
| -}
|
| -
|
| -void TileManager::SynchronouslyRasterizeTiles(
|
| - const GlobalStateThatImpactsTilePriority& state) {
|
| - TRACE_EVENT0("cc", "TileManager::SynchronouslyRasterizeTiles");
|
| -
|
| - DCHECK(rasterizer_->GetPrepareTilesMode() !=
|
| - PrepareTilesMode::RASTERIZE_PRIORITIZED_TILES);
|
| -
|
| - global_state_ = state;
|
| -
|
| FreeResourcesForReleasedTiles();
|
| CleanUpReleasedTiles();
|
|
|
| - scoped_ptr<RasterTilePriorityQueue> required_for_draw_queue(
|
| - client_->BuildRasterQueue(
|
| - global_state_.tree_priority,
|
| - RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW));
|
| TileVector tiles_that_need_to_be_rasterized;
|
| - AssignGpuMemoryToTiles(required_for_draw_queue.get(),
|
| - std::numeric_limits<size_t>::max(),
|
| + scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
|
| + client_->BuildRasterQueue(global_state_.tree_priority,
|
| + RasterTilePriorityQueue::Type::ALL));
|
| + AssignGpuMemoryToTiles(raster_priority_queue.get(),
|
| + scheduled_raster_task_limit_,
|
| &tiles_that_need_to_be_rasterized);
|
|
|
| - // Since we are synchronously rasterizing all tiles, we don't require further
|
| - // draws for that. Set the flag to false so that we can clear it if it was set
|
| - // earlier by PrepareTiles.
|
| - client_->SetIsLikelyToRequireADraw(false);
|
| -
|
| - // We must reduce the amount of unused resources before calling
|
| - // RunTasks to prevent usage from rising above limits.
|
| - resource_pool_->ReduceResourceUsage();
|
| + // Inform the client that will likely require a draw if the highest priority
|
| + // tile that will be rasterized is required for draw.
|
| + client_->SetIsLikelyToRequireADraw(
|
| + !tiles_that_need_to_be_rasterized.empty() &&
|
| + (*tiles_that_need_to_be_rasterized.begin())->required_for_draw());
|
|
|
| - // Run and complete all raster task synchronously.
|
| - rasterizer_->RasterizeTiles(
|
| - tiles_that_need_to_be_rasterized, resource_pool_,
|
| - tile_task_runner_->GetResourceFormat(),
|
| - base::Bind(&TileManager::UpdateTileDrawInfo, base::Unretained(this)));
|
| -
|
| - // Use on-demand raster for any required-for-draw tiles that have not been
|
| - // assigned memory after reaching a steady memory state.
|
| - // TODO(hendrikw): Figure out why this would improve jank on some tests - See
|
| - // crbug.com/449288
|
| - required_for_draw_queue = client_->BuildRasterQueue(
|
| - global_state_.tree_priority,
|
| - RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
|
| + // Schedule tile tasks.
|
| + ScheduleTasks(tiles_that_need_to_be_rasterized);
|
|
|
| - // Change to OOM mode for any tiles that have not been been assigned memory.
|
| - // This ensures that we draw even when OOM.
|
| - for (; !required_for_draw_queue->IsEmpty(); required_for_draw_queue->Pop()) {
|
| - Tile* tile = required_for_draw_queue->Top();
|
| - tile->draw_info().set_oom();
|
| - client_->NotifyTileStateChanged(tile);
|
| - }
|
| + did_notify_ready_to_activate_ = false;
|
| + did_notify_ready_to_draw_ = false;
|
|
|
| - TRACE_EVENT_INSTANT1("cc", "DidRasterize", TRACE_EVENT_SCOPE_THREAD, "state",
|
| - BasicStateAsValue());
|
| + TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD,
|
| + "state", BasicStateAsValue());
|
|
|
| TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this,
|
| resource_pool_->total_memory_usage_bytes() -
|
| @@ -471,11 +381,6 @@ void TileManager::UpdateVisibleTiles(
|
|
|
| tile_task_runner_->CheckForCompletedTasks();
|
|
|
| - DCHECK(rasterizer_);
|
| - PrepareTilesMode prepare_tiles_mode = rasterizer_->GetPrepareTilesMode();
|
| - if (prepare_tiles_mode != PrepareTilesMode::RASTERIZE_PRIORITIZED_TILES)
|
| - SynchronouslyRasterizeTiles(state);
|
| -
|
| did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
|
|
|
| TRACE_EVENT_INSTANT1(
|
|
|