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

Side by Side Diff: cc/tiles/tile_manager.cc

Issue 1910213005: cc: Refactor TileTaskWorkerPool. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@task_states
Patch Set: nits Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/tiles/tile_manager.h" 5 #include "cc/tiles/tile_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 client, task_runner, scheduled_raster_task_limit, use_partial_raster)); 301 client, task_runner, scheduled_raster_task_limit, use_partial_raster));
302 } 302 }
303 303
304 TileManager::TileManager(TileManagerClient* client, 304 TileManager::TileManager(TileManagerClient* client,
305 scoped_refptr<base::SequencedTaskRunner> task_runner, 305 scoped_refptr<base::SequencedTaskRunner> task_runner,
306 size_t scheduled_raster_task_limit, 306 size_t scheduled_raster_task_limit,
307 bool use_partial_raster) 307 bool use_partial_raster)
308 : client_(client), 308 : client_(client),
309 task_runner_(std::move(task_runner)), 309 task_runner_(std::move(task_runner)),
310 resource_pool_(nullptr), 310 resource_pool_(nullptr),
311 tile_task_worker_pool_(nullptr), 311 tile_task_manager_(nullptr),
312 scheduled_raster_task_limit_(scheduled_raster_task_limit), 312 scheduled_raster_task_limit_(scheduled_raster_task_limit),
313 use_partial_raster_(use_partial_raster), 313 use_partial_raster_(use_partial_raster),
314 use_gpu_rasterization_(false), 314 use_gpu_rasterization_(false),
315 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), 315 all_tiles_that_need_to_be_rasterized_are_scheduled_(true),
316 did_check_for_completed_tasks_since_last_schedule_tasks_(true), 316 did_check_for_completed_tasks_since_last_schedule_tasks_(true),
317 did_oom_on_last_assign_(false), 317 did_oom_on_last_assign_(false),
318 more_tiles_need_prepare_check_notifier_( 318 more_tiles_need_prepare_check_notifier_(
319 task_runner_.get(), 319 task_runner_.get(),
320 base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared, 320 base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared,
321 base::Unretained(this))), 321 base::Unretained(this))),
322 signals_check_notifier_(task_runner_.get(), 322 signals_check_notifier_(task_runner_.get(),
323 base::Bind(&TileManager::CheckAndIssueSignals, 323 base::Bind(&TileManager::CheckAndIssueSignals,
324 base::Unretained(this))), 324 base::Unretained(this))),
325 has_scheduled_tile_tasks_(false), 325 has_scheduled_tile_tasks_(false),
326 prepare_tiles_count_(0u), 326 prepare_tiles_count_(0u),
327 next_tile_id_(0u), 327 next_tile_id_(0u),
328 task_set_finished_weak_ptr_factory_(this) {} 328 task_set_finished_weak_ptr_factory_(this) {}
329 329
330 TileManager::~TileManager() { 330 TileManager::~TileManager() {
331 FinishTasksAndCleanUp(); 331 FinishTasksAndCleanUp();
332 } 332 }
333 333
334 void TileManager::FinishTasksAndCleanUp() { 334 void TileManager::FinishTasksAndCleanUp() {
335 if (!tile_task_worker_pool_) 335 if (!tile_task_manager_)
336 return; 336 return;
337 337
338 global_state_ = GlobalStateThatImpactsTilePriority(); 338 global_state_ = GlobalStateThatImpactsTilePriority();
339 339
340 // This cancels tasks if possible, finishes pending tasks, and release any 340 // This cancels tasks if possible, finishes pending tasks, and release any
341 // uninitialized resources. 341 // uninitialized resources.
342 tile_task_worker_pool_->Shutdown(); 342 tile_task_manager_->Shutdown();
343 343
344 // Now that all tasks have been finished, we can clear any 344 // Now that all tasks have been finished, we can clear any
345 // |orphan_tasks_|. 345 // |orphan_tasks_|.
346 orphan_tasks_.clear(); 346 orphan_tasks_.clear();
347 347
348 tile_task_worker_pool_->CheckForCompletedTasks(); 348 tile_task_manager_->CheckForCompletedTasks();
349 349
350 FreeResourcesForReleasedTiles(); 350 FreeResourcesForReleasedTiles();
351 CleanUpReleasedTiles(); 351 CleanUpReleasedTiles();
352 352
353 tile_task_worker_pool_ = nullptr; 353 tile_task_manager_ = nullptr;
354 resource_pool_ = nullptr; 354 resource_pool_ = nullptr;
355 more_tiles_need_prepare_check_notifier_.Cancel(); 355 more_tiles_need_prepare_check_notifier_.Cancel();
356 signals_check_notifier_.Cancel(); 356 signals_check_notifier_.Cancel();
357 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs(); 357 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs();
358 } 358 }
359 359
360 void TileManager::SetResources(ResourcePool* resource_pool, 360 void TileManager::SetResources(ResourcePool* resource_pool,
361 TileTaskWorkerPool* tile_task_worker_pool,
362 ImageDecodeController* image_decode_controller, 361 ImageDecodeController* image_decode_controller,
362 TileTaskManager* tile_task_manager,
363 size_t scheduled_raster_task_limit, 363 size_t scheduled_raster_task_limit,
364 bool use_gpu_rasterization) { 364 bool use_gpu_rasterization) {
365 DCHECK(!tile_task_worker_pool_); 365 DCHECK(!tile_task_manager_);
366 DCHECK(tile_task_worker_pool); 366 DCHECK(tile_task_manager);
367 367
368 use_gpu_rasterization_ = use_gpu_rasterization; 368 use_gpu_rasterization_ = use_gpu_rasterization;
369 scheduled_raster_task_limit_ = scheduled_raster_task_limit; 369 scheduled_raster_task_limit_ = scheduled_raster_task_limit;
370 resource_pool_ = resource_pool; 370 resource_pool_ = resource_pool;
371 tile_task_worker_pool_ = tile_task_worker_pool;
372 image_decode_controller_ = image_decode_controller; 371 image_decode_controller_ = image_decode_controller;
372 tile_task_manager_ = tile_task_manager;
373 } 373 }
374 374
375 void TileManager::Release(Tile* tile) { 375 void TileManager::Release(Tile* tile) {
376 released_tiles_.push_back(tile); 376 released_tiles_.push_back(tile);
377 } 377 }
378 378
379 void TileManager::FreeResourcesForReleasedTiles() { 379 void TileManager::FreeResourcesForReleasedTiles() {
380 for (auto* tile : released_tiles_) 380 for (auto* tile : released_tiles_)
381 FreeResourcesForTile(tile); 381 FreeResourcesForTile(tile);
382 } 382 }
(...skipping 29 matching lines...) Expand all
412 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running", "state", 412 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running", "state",
413 ScheduledTasksStateAsValue()); 413 ScheduledTasksStateAsValue());
414 signals_.ready_to_draw = true; 414 signals_.ready_to_draw = true;
415 signals_check_notifier_.Schedule(); 415 signals_check_notifier_.Schedule();
416 } 416 }
417 417
418 void TileManager::DidFinishRunningAllTileTasks() { 418 void TileManager::DidFinishRunningAllTileTasks() {
419 TRACE_EVENT0("cc", "TileManager::DidFinishRunningAllTileTasks"); 419 TRACE_EVENT0("cc", "TileManager::DidFinishRunningAllTileTasks");
420 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); 420 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this);
421 DCHECK(resource_pool_); 421 DCHECK(resource_pool_);
422 DCHECK(tile_task_worker_pool_); 422 DCHECK(tile_task_manager_);
423 423
424 has_scheduled_tile_tasks_ = false; 424 has_scheduled_tile_tasks_ = false;
425 425
426 bool memory_usage_above_limit = resource_pool_->memory_usage_bytes() > 426 bool memory_usage_above_limit = resource_pool_->memory_usage_bytes() >
427 global_state_.soft_memory_limit_in_bytes; 427 global_state_.soft_memory_limit_in_bytes;
428 428
429 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ && 429 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ &&
430 !memory_usage_above_limit) { 430 !memory_usage_above_limit) {
431 // TODO(ericrk): We should find a better way to safely handle re-entrant 431 // TODO(ericrk): We should find a better way to safely handle re-entrant
432 // notifications than always having to schedule a new task. 432 // notifications than always having to schedule a new task.
433 // http://crbug.com/498439 433 // http://crbug.com/498439
434 signals_.all_tile_tasks_completed = true; 434 signals_.all_tile_tasks_completed = true;
435 signals_check_notifier_.Schedule(); 435 signals_check_notifier_.Schedule();
436 return; 436 return;
437 } 437 }
438 438
439 more_tiles_need_prepare_check_notifier_.Schedule(); 439 more_tiles_need_prepare_check_notifier_.Schedule();
440 } 440 }
441 441
442 bool TileManager::PrepareTiles( 442 bool TileManager::PrepareTiles(
443 const GlobalStateThatImpactsTilePriority& state) { 443 const GlobalStateThatImpactsTilePriority& state) {
444 ++prepare_tiles_count_; 444 ++prepare_tiles_count_;
445 445
446 TRACE_EVENT1("cc", "TileManager::PrepareTiles", "prepare_tiles_id", 446 TRACE_EVENT1("cc", "TileManager::PrepareTiles", "prepare_tiles_id",
447 prepare_tiles_count_); 447 prepare_tiles_count_);
448 448
449 if (!tile_task_worker_pool_) { 449 if (!tile_task_manager_) {
450 TRACE_EVENT_INSTANT0("cc", "PrepareTiles aborted", 450 TRACE_EVENT_INSTANT0("cc", "PrepareTiles aborted",
451 TRACE_EVENT_SCOPE_THREAD); 451 TRACE_EVENT_SCOPE_THREAD);
452 return false; 452 return false;
453 } 453 }
454 454
455 signals_.reset(); 455 signals_.reset();
456 global_state_ = state; 456 global_state_ = state;
457 457
458 // We need to call CheckForCompletedTasks() once in-between each call 458 // We need to call CheckForCompletedTasks() once in-between each call
459 // to ScheduleTasks() to prevent canceled tasks from being scheduled. 459 // to ScheduleTasks() to prevent canceled tasks from being scheduled.
460 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { 460 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
461 tile_task_worker_pool_->CheckForCompletedTasks(); 461 tile_task_manager_->CheckForCompletedTasks();
462 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 462 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
463 } 463 }
464 464
465 FreeResourcesForReleasedTiles(); 465 FreeResourcesForReleasedTiles();
466 CleanUpReleasedTiles(); 466 CleanUpReleasedTiles();
467 467
468 PrioritizedTileVector tiles_that_need_to_be_rasterized; 468 PrioritizedTileVector tiles_that_need_to_be_rasterized;
469 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue( 469 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue(
470 client_->BuildRasterQueue(global_state_.tree_priority, 470 client_->BuildRasterQueue(global_state_.tree_priority,
471 RasterTilePriorityQueue::Type::ALL)); 471 RasterTilePriorityQueue::Type::ALL));
(...skipping 11 matching lines...) Expand all
483 ScheduleTasks(tiles_that_need_to_be_rasterized); 483 ScheduleTasks(tiles_that_need_to_be_rasterized);
484 484
485 TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD, 485 TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD,
486 "state", BasicStateAsValue()); 486 "state", BasicStateAsValue());
487 return true; 487 return true;
488 } 488 }
489 489
490 void TileManager::Flush() { 490 void TileManager::Flush() {
491 TRACE_EVENT0("cc", "TileManager::Flush"); 491 TRACE_EVENT0("cc", "TileManager::Flush");
492 492
493 if (!tile_task_worker_pool_) { 493 if (!tile_task_manager_) {
494 TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD); 494 TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD);
495 return; 495 return;
496 } 496 }
497 497
498 tile_task_worker_pool_->CheckForCompletedTasks(); 498 tile_task_manager_->CheckForCompletedTasks();
499 499
500 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 500 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
501 501
502 TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats", 502 TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats",
503 RasterTaskCompletionStatsAsValue(flush_stats_)); 503 RasterTaskCompletionStatsAsValue(flush_stats_));
504 flush_stats_ = RasterTaskCompletionStats(); 504 flush_stats_ = RasterTaskCompletionStats();
505 } 505 }
506 506
507 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> 507 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
508 TileManager::BasicStateAsValue() const { 508 TileManager::BasicStateAsValue() const {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 return true; 585 return true;
586 } 586 }
587 587
588 void TileManager::AssignGpuMemoryToTiles( 588 void TileManager::AssignGpuMemoryToTiles(
589 RasterTilePriorityQueue* raster_priority_queue, 589 RasterTilePriorityQueue* raster_priority_queue,
590 size_t scheduled_raster_task_limit, 590 size_t scheduled_raster_task_limit,
591 PrioritizedTileVector* tiles_that_need_to_be_rasterized) { 591 PrioritizedTileVector* tiles_that_need_to_be_rasterized) {
592 TRACE_EVENT_BEGIN0("cc", "TileManager::AssignGpuMemoryToTiles"); 592 TRACE_EVENT_BEGIN0("cc", "TileManager::AssignGpuMemoryToTiles");
593 593
594 DCHECK(resource_pool_); 594 DCHECK(resource_pool_);
595 DCHECK(tile_task_worker_pool_); 595 DCHECK(tile_task_manager_);
596 596
597 // Maintain the list of released resources that can potentially be re-used 597 // Maintain the list of released resources that can potentially be re-used
598 // or deleted. If this operation becomes expensive too, only do this after 598 // or deleted. If this operation becomes expensive too, only do this after
599 // some resource(s) was returned. Note that in that case, one also need to 599 // some resource(s) was returned. Note that in that case, one also need to
600 // invalidate when releasing some resource from the pool. 600 // invalidate when releasing some resource from the pool.
601 resource_pool_->CheckBusyResources(); 601 resource_pool_->CheckBusyResources();
602 602
603 // Now give memory out to the tiles until we're out, and build 603 // Now give memory out to the tiles until we're out, and build
604 // the needs-to-be-rasterized queue. 604 // the needs-to-be-rasterized queue.
605 unsigned schedule_priority = 1u; 605 unsigned schedule_priority = 1u;
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 kAllDoneTaskPriority, all_count); 822 kAllDoneTaskPriority, all_count);
823 823
824 // We must reduce the amount of unused resoruces before calling 824 // We must reduce the amount of unused resoruces before calling
825 // ScheduleTasks to prevent usage from rising above limits. 825 // ScheduleTasks to prevent usage from rising above limits.
826 resource_pool_->ReduceResourceUsage(); 826 resource_pool_->ReduceResourceUsage();
827 image_decode_controller_->ReduceCacheUsage(); 827 image_decode_controller_->ReduceCacheUsage();
828 828
829 // Schedule running of |raster_queue_|. This replaces any previously 829 // Schedule running of |raster_queue_|. This replaces any previously
830 // scheduled tasks and effectively cancels all tasks not present 830 // scheduled tasks and effectively cancels all tasks not present
831 // in |raster_queue_|. 831 // in |raster_queue_|.
832 tile_task_worker_pool_->ScheduleTasks(&graph_); 832 tile_task_manager_->ScheduleTasks(&graph_);
833 833
834 // It's now safe to clean up orphan tasks as raster worker pool is not 834 // It's now safe to clean up orphan tasks as raster worker pool is not
835 // allowed to keep around unreferenced raster tasks after ScheduleTasks() has 835 // allowed to keep around unreferenced raster tasks after ScheduleTasks() has
836 // been called. 836 // been called.
837 orphan_tasks_.clear(); 837 orphan_tasks_.clear();
838 838
839 // It's also now safe to replace our *_done_task_ tasks. 839 // It's also now safe to replace our *_done_task_ tasks.
840 required_for_activation_done_task_ = 840 required_for_activation_done_task_ =
841 std::move(required_for_activation_done_task); 841 std::move(required_for_activation_done_task);
842 required_for_draw_done_task_ = std::move(required_for_draw_done_task); 842 required_for_draw_done_task_ = std::move(required_for_draw_done_task);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 951
952 client_->NotifyTileStateChanged(tile); 952 client_->NotifyTileStateChanged(tile);
953 } 953 }
954 954
955 ScopedTilePtr TileManager::CreateTile(const Tile::CreateInfo& info, 955 ScopedTilePtr TileManager::CreateTile(const Tile::CreateInfo& info,
956 int layer_id, 956 int layer_id,
957 int source_frame_number, 957 int source_frame_number,
958 int flags) { 958 int flags) {
959 // We need to have a tile task worker pool to do anything meaningful with 959 // We need to have a tile task worker pool to do anything meaningful with
960 // tiles. 960 // tiles.
961 DCHECK(tile_task_worker_pool_); 961 DCHECK(tile_task_manager_);
962 ScopedTilePtr tile( 962 ScopedTilePtr tile(
963 new Tile(this, info, layer_id, source_frame_number, flags)); 963 new Tile(this, info, layer_id, source_frame_number, flags));
964 DCHECK(tiles_.find(tile->id()) == tiles_.end()); 964 DCHECK(tiles_.find(tile->id()) == tiles_.end());
965 965
966 tiles_[tile->id()] = tile.get(); 966 tiles_[tile->id()] = tile.get();
967 return tile; 967 return tile;
968 } 968 }
969 969
970 void TileManager::SetTileTaskWorkerPoolForTesting( 970 void TileManager::SetTileTaskManagerForTesting(
971 TileTaskWorkerPool* tile_task_worker_pool) { 971 TileTaskManager* tile_task_manager) {
972 tile_task_worker_pool_ = tile_task_worker_pool; 972 tile_task_manager_ = tile_task_manager;
973 } 973 }
974 974
975 bool TileManager::AreRequiredTilesReadyToDraw( 975 bool TileManager::AreRequiredTilesReadyToDraw(
976 RasterTilePriorityQueue::Type type) const { 976 RasterTilePriorityQueue::Type type) const {
977 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue( 977 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue(
978 client_->BuildRasterQueue(global_state_.tree_priority, type)); 978 client_->BuildRasterQueue(global_state_.tree_priority, type));
979 // It is insufficient to check whether the raster queue we constructed is 979 // It is insufficient to check whether the raster queue we constructed is
980 // empty. The reason for this is that there are situations (rasterize on 980 // empty. The reason for this is that there are situations (rasterize on
981 // demand) when the tile both needs raster and it's ready to draw. Hence, we 981 // demand) when the tile both needs raster and it's ready to draw. Hence, we
982 // have to iterate the queue to check whether the required tiles are ready to 982 // have to iterate the queue to check whether the required tiles are ready to
(...skipping 22 matching lines...) Expand all
1005 } 1005 }
1006 1006
1007 bool TileManager::IsReadyToDraw() const { 1007 bool TileManager::IsReadyToDraw() const {
1008 TRACE_EVENT0("cc", "TileManager::IsReadyToDraw"); 1008 TRACE_EVENT0("cc", "TileManager::IsReadyToDraw");
1009 return AreRequiredTilesReadyToDraw( 1009 return AreRequiredTilesReadyToDraw(
1010 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 1010 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
1011 } 1011 }
1012 1012
1013 void TileManager::CheckAndIssueSignals() { 1013 void TileManager::CheckAndIssueSignals() {
1014 TRACE_EVENT0("cc", "TileManager::CheckAndIssueSignals"); 1014 TRACE_EVENT0("cc", "TileManager::CheckAndIssueSignals");
1015 tile_task_worker_pool_->CheckForCompletedTasks(); 1015 tile_task_manager_->CheckForCompletedTasks();
1016 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 1016 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
1017 1017
1018 // Ready to activate. 1018 // Ready to activate.
1019 if (signals_.ready_to_activate && !signals_.did_notify_ready_to_activate) { 1019 if (signals_.ready_to_activate && !signals_.did_notify_ready_to_activate) {
1020 signals_.ready_to_activate = false; 1020 signals_.ready_to_activate = false;
1021 if (IsReadyToActivate()) { 1021 if (IsReadyToActivate()) {
1022 TRACE_EVENT0("disabled-by-default-cc.debug", 1022 TRACE_EVENT0("disabled-by-default-cc.debug",
1023 "TileManager::CheckAndIssueSignals - ready to activate"); 1023 "TileManager::CheckAndIssueSignals - ready to activate");
1024 signals_.did_notify_ready_to_activate = true; 1024 signals_.did_notify_ready_to_activate = true;
1025 client_->NotifyReadyToActivate(); 1025 client_->NotifyReadyToActivate();
(...skipping 19 matching lines...) Expand all
1045 TRACE_EVENT0( 1045 TRACE_EVENT0(
1046 "disabled-by-default-cc.debug", 1046 "disabled-by-default-cc.debug",
1047 "TileManager::CheckAndIssueSignals - all tile tasks completed"); 1047 "TileManager::CheckAndIssueSignals - all tile tasks completed");
1048 signals_.did_notify_all_tile_tasks_completed = true; 1048 signals_.did_notify_all_tile_tasks_completed = true;
1049 client_->NotifyAllTileTasksCompleted(); 1049 client_->NotifyAllTileTasksCompleted();
1050 } 1050 }
1051 } 1051 }
1052 } 1052 }
1053 1053
1054 void TileManager::CheckIfMoreTilesNeedToBePrepared() { 1054 void TileManager::CheckIfMoreTilesNeedToBePrepared() {
1055 tile_task_worker_pool_->CheckForCompletedTasks(); 1055 tile_task_manager_->CheckForCompletedTasks();
1056 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 1056 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
1057 1057
1058 // When OOM, keep re-assigning memory until we reach a steady state 1058 // When OOM, keep re-assigning memory until we reach a steady state
1059 // where top-priority tiles are initialized. 1059 // where top-priority tiles are initialized.
1060 PrioritizedTileVector tiles_that_need_to_be_rasterized; 1060 PrioritizedTileVector tiles_that_need_to_be_rasterized;
1061 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue( 1061 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue(
1062 client_->BuildRasterQueue(global_state_.tree_priority, 1062 client_->BuildRasterQueue(global_state_.tree_priority,
1063 RasterTilePriorityQueue::Type::ALL)); 1063 RasterTilePriorityQueue::Type::ALL));
1064 AssignGpuMemoryToTiles(raster_priority_queue.get(), 1064 AssignGpuMemoryToTiles(raster_priority_queue.get(),
1065 scheduled_raster_task_limit_, 1065 scheduled_raster_task_limit_,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 Tile* tile = queue->Top().tile(); 1132 Tile* tile = queue->Top().tile();
1133 if (tile->draw_info().IsReadyToDraw()) 1133 if (tile->draw_info().IsReadyToDraw())
1134 continue; 1134 continue;
1135 tile->draw_info().set_oom(); 1135 tile->draw_info().set_oom();
1136 client_->NotifyTileStateChanged(tile); 1136 client_->NotifyTileStateChanged(tile);
1137 } 1137 }
1138 return true; 1138 return true;
1139 } 1139 }
1140 1140
1141 ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const { 1141 ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const {
1142 return tile_task_worker_pool_->GetResourceFormat(!tile->is_opaque()); 1142 return tile_task_manager_->GetTileTaskWorkerPool()->GetResourceFormat(
1143 !tile->is_opaque());
1143 } 1144 }
1144 1145
1145 bool TileManager::DetermineResourceRequiresSwizzle(const Tile* tile) const { 1146 bool TileManager::DetermineResourceRequiresSwizzle(const Tile* tile) const {
1146 return tile_task_worker_pool_->GetResourceRequiresSwizzle(!tile->is_opaque()); 1147 return tile_task_manager_->GetTileTaskWorkerPool()
1148 ->GetResourceRequiresSwizzle(!tile->is_opaque());
1147 } 1149 }
1148 1150
1149 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> 1151 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
1150 TileManager::ScheduledTasksStateAsValue() const { 1152 TileManager::ScheduledTasksStateAsValue() const {
1151 std::unique_ptr<base::trace_event::TracedValue> state( 1153 std::unique_ptr<base::trace_event::TracedValue> state(
1152 new base::trace_event::TracedValue()); 1154 new base::trace_event::TracedValue());
1153 state->BeginDictionary("tasks_pending"); 1155 state->BeginDictionary("tasks_pending");
1154 state->SetBoolean("ready_to_activate", signals_.ready_to_activate); 1156 state->SetBoolean("ready_to_activate", signals_.ready_to_activate);
1155 state->SetBoolean("ready_to_draw", signals_.ready_to_draw); 1157 state->SetBoolean("ready_to_draw", signals_.ready_to_draw);
1156 state->SetBoolean("all_tile_tasks_completed", 1158 state->SetBoolean("all_tile_tasks_completed",
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 void TileManager::Signals::reset() { 1240 void TileManager::Signals::reset() {
1239 ready_to_activate = false; 1241 ready_to_activate = false;
1240 did_notify_ready_to_activate = false; 1242 did_notify_ready_to_activate = false;
1241 ready_to_draw = false; 1243 ready_to_draw = false;
1242 did_notify_ready_to_draw = false; 1244 did_notify_ready_to_draw = false;
1243 all_tile_tasks_completed = false; 1245 all_tile_tasks_completed = false;
1244 did_notify_all_tile_tasks_completed = false; 1246 did_notify_all_tile_tasks_completed = false;
1245 } 1247 }
1246 1248
1247 } // namespace cc 1249 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698