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

Unified Diff: cc/resources/tile_manager.cc

Issue 1063493002: cc: Remove all traces of synchronous GPU rasterization (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more deleted code Created 5 years, 9 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
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(

Powered by Google App Engine
This is Rietveld 408576698