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

Unified Diff: cc/tiles/tile_manager.cc

Issue 1210073020: Reland (2): cc: Make tile manager object persist for the length of LTHI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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/tiles/tile_manager.cc
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
index e92a3df33b30d368d9a0058b51b60785663f0eba..d64936baa8dbecf46d047a2d516d50c4ca50c061 100644
--- a/cc/tiles/tile_manager.cc
+++ b/cc/tiles/tile_manager.cc
@@ -228,24 +228,19 @@ RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats) {
scoped_ptr<TileManager> TileManager::Create(
TileManagerClient* client,
base::SequencedTaskRunner* task_runner,
- ResourcePool* resource_pool,
- TileTaskRunner* tile_task_runner,
size_t scheduled_raster_task_limit) {
- return make_scoped_ptr(new TileManager(client, task_runner, resource_pool,
- tile_task_runner,
- scheduled_raster_task_limit));
+ return make_scoped_ptr(
+ new TileManager(client, task_runner, scheduled_raster_task_limit));
}
TileManager::TileManager(
TileManagerClient* client,
const scoped_refptr<base::SequencedTaskRunner>& task_runner,
- ResourcePool* resource_pool,
- TileTaskRunner* tile_task_runner,
size_t scheduled_raster_task_limit)
: client_(client),
task_runner_(task_runner),
- resource_pool_(resource_pool),
- tile_task_runner_(tile_task_runner),
+ resource_pool_(nullptr),
+ tile_task_runner_(nullptr),
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),
@@ -259,12 +254,15 @@ TileManager::TileManager(
base::Unretained(this))),
has_scheduled_tile_tasks_(false),
prepare_tiles_count_(0u) {
- tile_task_runner_->SetClient(this);
}
TileManager::~TileManager() {
- // Reset global state and manage. This should cause
- // our memory usage to drop to zero.
+}
enne (OOO) 2015/07/06 18:07:25 Should this call FinishTasksAndCleanUp? Or at leas
vmpstr 2015/07/06 18:41:35 Done.
+
+void TileManager::FinishTasksAndCleanUp() {
+ if (!tile_task_runner_)
+ return;
+
global_state_ = GlobalStateThatImpactsTilePriority();
TileTaskQueue empty;
@@ -278,6 +276,21 @@ TileManager::~TileManager() {
FreeResourcesForReleasedTiles();
CleanUpReleasedTiles();
+
+ tile_task_runner_ = nullptr;
+ resource_pool_ = nullptr;
+ more_tiles_need_prepare_check_notifier_.Cancel();
+ signals_check_notifier_.Cancel();
+}
+
+void TileManager::SetResources(ResourcePool* resource_pool,
+ TileTaskRunner* tile_task_runner) {
+ DCHECK(!tile_task_runner_);
+ DCHECK(tile_task_runner);
+
+ resource_pool_ = resource_pool;
+ tile_task_runner_ = tile_task_runner;
+ tile_task_runner_->SetClient(this);
}
void TileManager::Release(Tile* tile) {
@@ -324,6 +337,8 @@ void TileManager::CleanUpReleasedTiles() {
void TileManager::DidFinishRunningTileTasks(TaskSet task_set) {
TRACE_EVENT1("cc", "TileManager::DidFinishRunningTileTasks", "task_set",
TaskSetName(task_set));
+ DCHECK(resource_pool_);
+ DCHECK(tile_task_runner_);
switch (task_set) {
case ALL: {
@@ -360,13 +375,19 @@ void TileManager::DidFinishRunningTileTasks(TaskSet task_set) {
NOTREACHED();
}
-void TileManager::PrepareTiles(
+bool TileManager::PrepareTiles(
const GlobalStateThatImpactsTilePriority& state) {
++prepare_tiles_count_;
TRACE_EVENT1("cc", "TileManager::PrepareTiles", "prepare_tiles_id",
prepare_tiles_count_);
+ if (!tile_task_runner_) {
+ TRACE_EVENT_INSTANT0("cc", "PrepareTiles aborted",
+ TRACE_EVENT_SCOPE_THREAD);
+ return false;
+ }
+
signals_.reset();
global_state_ = state;
@@ -403,11 +424,17 @@ void TileManager::PrepareTiles(
TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this,
resource_pool_->total_memory_usage_bytes() -
resource_pool_->acquired_memory_usage_bytes());
+ return true;
}
void TileManager::Flush() {
TRACE_EVENT0("cc", "TileManager::Flush");
+ if (!tile_task_runner_) {
+ TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD);
+ return;
+ }
+
tile_task_runner_->CheckForCompletedTasks();
did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
@@ -504,6 +531,9 @@ void TileManager::AssignGpuMemoryToTiles(
PrioritizedTileVector* tiles_that_need_to_be_rasterized) {
TRACE_EVENT_BEGIN0("cc", "TileManager::AssignGpuMemoryToTiles");
+ DCHECK(resource_pool_);
+ DCHECK(tile_task_runner_);
+
// Maintain the list of released resources that can potentially be re-used
// or deleted. If this operation becomes expensive too, only do this after
// some resource(s) was returned. Note that in that case, one also need to
@@ -821,6 +851,9 @@ ScopedTilePtr TileManager::CreateTile(const gfx::Size& desired_texture_size,
int layer_id,
int source_frame_number,
int flags) {
+ // We need to have a tile task worker pool to do anything meaningful with
+ // tiles.
+ DCHECK(tile_task_runner_);
ScopedTilePtr tile(new Tile(this, desired_texture_size, content_rect,
contents_scale, layer_id, source_frame_number,
flags));

Powered by Google App Engine
This is Rietveld 408576698