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

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

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase 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
« no previous file with comments | « cc/tiles/tile_manager.h ('k') | cc/tiles/tile_manager_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
11 #include <limits> 11 #include <limits>
12 #include <string> 12 #include <string>
13 13
14 #include "base/bind.h" 14 #include "base/bind.h"
15 #include "base/json/json_writer.h" 15 #include "base/json/json_writer.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/macros.h" 17 #include "base/macros.h"
18 #include "base/memory/ptr_util.h"
18 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
19 #include "base/numerics/safe_conversions.h" 20 #include "base/numerics/safe_conversions.h"
20 #include "base/trace_event/trace_event_argument.h" 21 #include "base/trace_event/trace_event_argument.h"
21 #include "cc/base/histograms.h" 22 #include "cc/base/histograms.h"
22 #include "cc/debug/devtools_instrumentation.h" 23 #include "cc/debug/devtools_instrumentation.h"
23 #include "cc/debug/frame_viewer_instrumentation.h" 24 #include "cc/debug/frame_viewer_instrumentation.h"
24 #include "cc/debug/traced_value.h" 25 #include "cc/debug/traced_value.h"
25 #include "cc/layers/picture_layer_impl.h" 26 #include "cc/layers/picture_layer_impl.h"
26 #include "cc/raster/raster_buffer.h" 27 #include "cc/raster/raster_buffer.h"
27 #include "cc/raster/task_category.h" 28 #include "cc/raster/task_category.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 RasterSource::PlaybackSettings playback_settings_; 120 RasterSource::PlaybackSettings playback_settings_;
120 TileResolution tile_resolution_; 121 TileResolution tile_resolution_;
121 int layer_id_; 122 int layer_id_;
122 uint64_t source_prepare_tiles_id_; 123 uint64_t source_prepare_tiles_id_;
123 const void* tile_; 124 const void* tile_;
124 uint64_t new_content_id_; 125 uint64_t new_content_id_;
125 uint64_t previous_content_id_; 126 uint64_t previous_content_id_;
126 uint64_t resource_content_id_; 127 uint64_t resource_content_id_;
127 int source_frame_number_; 128 int source_frame_number_;
128 const base::Callback<void(bool)> reply_; 129 const base::Callback<void(bool)> reply_;
129 scoped_ptr<RasterBuffer> raster_buffer_; 130 std::unique_ptr<RasterBuffer> raster_buffer_;
130 131
131 DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); 132 DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl);
132 }; 133 };
133 134
134 // Task priorities that make sure that the task set done tasks run before any 135 // Task priorities that make sure that the task set done tasks run before any
135 // other remaining tasks. 136 // other remaining tasks.
136 const size_t kRequiredForActivationDoneTaskPriority = 1u; 137 const size_t kRequiredForActivationDoneTaskPriority = 1u;
137 const size_t kRequiredForDrawDoneTaskPriority = 2u; 138 const size_t kRequiredForDrawDoneTaskPriority = 2u;
138 const size_t kAllDoneTaskPriority = 3u; 139 const size_t kAllDoneTaskPriority = 3u;
139 140
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 const base::Closure on_task_set_finished_callback_; 249 const base::Closure on_task_set_finished_callback_;
249 250
250 DISALLOW_COPY_AND_ASSIGN(TaskSetFinishedTaskImpl); 251 DISALLOW_COPY_AND_ASSIGN(TaskSetFinishedTaskImpl);
251 }; 252 };
252 253
253 } // namespace 254 } // namespace
254 255
255 RasterTaskCompletionStats::RasterTaskCompletionStats() 256 RasterTaskCompletionStats::RasterTaskCompletionStats()
256 : completed_count(0u), canceled_count(0u) {} 257 : completed_count(0u), canceled_count(0u) {}
257 258
258 scoped_ptr<base::trace_event::ConvertableToTraceFormat> 259 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
259 RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats) { 260 RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats) {
260 scoped_ptr<base::trace_event::TracedValue> state( 261 std::unique_ptr<base::trace_event::TracedValue> state(
261 new base::trace_event::TracedValue()); 262 new base::trace_event::TracedValue());
262 state->SetInteger("completed_count", 263 state->SetInteger("completed_count",
263 base::saturated_cast<int>(stats.completed_count)); 264 base::saturated_cast<int>(stats.completed_count));
264 state->SetInteger("canceled_count", 265 state->SetInteger("canceled_count",
265 base::saturated_cast<int>(stats.canceled_count)); 266 base::saturated_cast<int>(stats.canceled_count));
266 return std::move(state); 267 return std::move(state);
267 } 268 }
268 269
269 // static 270 // static
270 scoped_ptr<TileManager> TileManager::Create( 271 std::unique_ptr<TileManager> TileManager::Create(
271 TileManagerClient* client, 272 TileManagerClient* client,
272 base::SequencedTaskRunner* task_runner, 273 base::SequencedTaskRunner* task_runner,
273 size_t scheduled_raster_task_limit, 274 size_t scheduled_raster_task_limit,
274 bool use_partial_raster) { 275 bool use_partial_raster) {
275 // TODO(vmpstr): |task_runner| is a raw pointer that is implicitly converted 276 // TODO(vmpstr): |task_runner| is a raw pointer that is implicitly converted
276 // into a scoped_refptr. Figure out whether to plumb a ref pointer or whether 277 // into a scoped_refptr. Figure out whether to plumb a ref pointer or whether
277 // tile manager can have a non-owning pointer and fix. 278 // tile manager can have a non-owning pointer and fix.
278 return make_scoped_ptr(new TileManager( 279 return base::WrapUnique(new TileManager(
279 client, task_runner, scheduled_raster_task_limit, use_partial_raster)); 280 client, task_runner, scheduled_raster_task_limit, use_partial_raster));
280 } 281 }
281 282
282 TileManager::TileManager(TileManagerClient* client, 283 TileManager::TileManager(TileManagerClient* client,
283 scoped_refptr<base::SequencedTaskRunner> task_runner, 284 scoped_refptr<base::SequencedTaskRunner> task_runner,
284 size_t scheduled_raster_task_limit, 285 size_t scheduled_raster_task_limit,
285 bool use_partial_raster) 286 bool use_partial_raster)
286 : client_(client), 287 : client_(client),
287 task_runner_(std::move(task_runner)), 288 task_runner_(std::move(task_runner)),
288 resource_pool_(nullptr), 289 resource_pool_(nullptr),
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 // to ScheduleTasks() to prevent canceled tasks from being scheduled. 438 // to ScheduleTasks() to prevent canceled tasks from being scheduled.
438 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { 439 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
439 tile_task_runner_->CheckForCompletedTasks(); 440 tile_task_runner_->CheckForCompletedTasks();
440 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 441 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
441 } 442 }
442 443
443 FreeResourcesForReleasedTiles(); 444 FreeResourcesForReleasedTiles();
444 CleanUpReleasedTiles(); 445 CleanUpReleasedTiles();
445 446
446 PrioritizedTileVector tiles_that_need_to_be_rasterized; 447 PrioritizedTileVector tiles_that_need_to_be_rasterized;
447 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( 448 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue(
448 client_->BuildRasterQueue(global_state_.tree_priority, 449 client_->BuildRasterQueue(global_state_.tree_priority,
449 RasterTilePriorityQueue::Type::ALL)); 450 RasterTilePriorityQueue::Type::ALL));
450 AssignGpuMemoryToTiles(raster_priority_queue.get(), 451 AssignGpuMemoryToTiles(raster_priority_queue.get(),
451 scheduled_raster_task_limit_, 452 scheduled_raster_task_limit_,
452 &tiles_that_need_to_be_rasterized); 453 &tiles_that_need_to_be_rasterized);
453 454
454 // Inform the client that will likely require a draw if the highest priority 455 // Inform the client that will likely require a draw if the highest priority
455 // tile that will be rasterized is required for draw. 456 // tile that will be rasterized is required for draw.
456 client_->SetIsLikelyToRequireADraw( 457 client_->SetIsLikelyToRequireADraw(
457 !tiles_that_need_to_be_rasterized.empty() && 458 !tiles_that_need_to_be_rasterized.empty() &&
(...skipping 17 matching lines...) Expand all
475 476
476 tile_task_runner_->CheckForCompletedTasks(); 477 tile_task_runner_->CheckForCompletedTasks();
477 478
478 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 479 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
479 480
480 TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats", 481 TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats",
481 RasterTaskCompletionStatsAsValue(flush_stats_)); 482 RasterTaskCompletionStatsAsValue(flush_stats_));
482 flush_stats_ = RasterTaskCompletionStats(); 483 flush_stats_ = RasterTaskCompletionStats();
483 } 484 }
484 485
485 scoped_ptr<base::trace_event::ConvertableToTraceFormat> 486 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
486 TileManager::BasicStateAsValue() const { 487 TileManager::BasicStateAsValue() const {
487 scoped_ptr<base::trace_event::TracedValue> value( 488 std::unique_ptr<base::trace_event::TracedValue> value(
488 new base::trace_event::TracedValue()); 489 new base::trace_event::TracedValue());
489 BasicStateAsValueInto(value.get()); 490 BasicStateAsValueInto(value.get());
490 return std::move(value); 491 return std::move(value);
491 } 492 }
492 493
493 void TileManager::BasicStateAsValueInto( 494 void TileManager::BasicStateAsValueInto(
494 base::trace_event::TracedValue* state) const { 495 base::trace_event::TracedValue* state) const {
495 state->SetInteger("tile_count", base::saturated_cast<int>(tiles_.size())); 496 state->SetInteger("tile_count", base::saturated_cast<int>(tiles_.size()));
496 state->SetBoolean("did_oom_on_last_assign", did_oom_on_last_assign_); 497 state->SetBoolean("did_oom_on_last_assign", did_oom_on_last_assign_);
497 state->BeginDictionary("global_state"); 498 state->BeginDictionary("global_state");
498 global_state_.AsValueInto(state); 499 global_state_.AsValueInto(state);
499 state->EndDictionary(); 500 state->EndDictionary();
500 } 501 }
501 502
502 scoped_ptr<EvictionTilePriorityQueue> 503 std::unique_ptr<EvictionTilePriorityQueue>
503 TileManager::FreeTileResourcesUntilUsageIsWithinLimit( 504 TileManager::FreeTileResourcesUntilUsageIsWithinLimit(
504 scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue, 505 std::unique_ptr<EvictionTilePriorityQueue> eviction_priority_queue,
505 const MemoryUsage& limit, 506 const MemoryUsage& limit,
506 MemoryUsage* usage) { 507 MemoryUsage* usage) {
507 while (usage->Exceeds(limit)) { 508 while (usage->Exceeds(limit)) {
508 if (!eviction_priority_queue) { 509 if (!eviction_priority_queue) {
509 eviction_priority_queue = 510 eviction_priority_queue =
510 client_->BuildEvictionQueue(global_state_.tree_priority); 511 client_->BuildEvictionQueue(global_state_.tree_priority);
511 } 512 }
512 if (eviction_priority_queue->IsEmpty()) 513 if (eviction_priority_queue->IsEmpty())
513 break; 514 break;
514 515
515 Tile* tile = eviction_priority_queue->Top().tile(); 516 Tile* tile = eviction_priority_queue->Top().tile();
516 *usage -= MemoryUsage::FromTile(tile); 517 *usage -= MemoryUsage::FromTile(tile);
517 FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile); 518 FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile);
518 eviction_priority_queue->Pop(); 519 eviction_priority_queue->Pop();
519 } 520 }
520 return eviction_priority_queue; 521 return eviction_priority_queue;
521 } 522 }
522 523
523 scoped_ptr<EvictionTilePriorityQueue> 524 std::unique_ptr<EvictionTilePriorityQueue>
524 TileManager::FreeTileResourcesWithLowerPriorityUntilUsageIsWithinLimit( 525 TileManager::FreeTileResourcesWithLowerPriorityUntilUsageIsWithinLimit(
525 scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue, 526 std::unique_ptr<EvictionTilePriorityQueue> eviction_priority_queue,
526 const MemoryUsage& limit, 527 const MemoryUsage& limit,
527 const TilePriority& other_priority, 528 const TilePriority& other_priority,
528 MemoryUsage* usage) { 529 MemoryUsage* usage) {
529 while (usage->Exceeds(limit)) { 530 while (usage->Exceeds(limit)) {
530 if (!eviction_priority_queue) { 531 if (!eviction_priority_queue) {
531 eviction_priority_queue = 532 eviction_priority_queue =
532 client_->BuildEvictionQueue(global_state_.tree_priority); 533 client_->BuildEvictionQueue(global_state_.tree_priority);
533 } 534 }
534 if (eviction_priority_queue->IsEmpty()) 535 if (eviction_priority_queue->IsEmpty())
535 break; 536 break;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 all_tiles_that_need_to_be_rasterized_are_scheduled_ = true; 585 all_tiles_that_need_to_be_rasterized_are_scheduled_ = true;
585 bool had_enough_memory_to_schedule_tiles_needed_now = true; 586 bool had_enough_memory_to_schedule_tiles_needed_now = true;
586 587
587 MemoryUsage hard_memory_limit(global_state_.hard_memory_limit_in_bytes, 588 MemoryUsage hard_memory_limit(global_state_.hard_memory_limit_in_bytes,
588 global_state_.num_resources_limit); 589 global_state_.num_resources_limit);
589 MemoryUsage soft_memory_limit(global_state_.soft_memory_limit_in_bytes, 590 MemoryUsage soft_memory_limit(global_state_.soft_memory_limit_in_bytes,
590 global_state_.num_resources_limit); 591 global_state_.num_resources_limit);
591 MemoryUsage memory_usage(resource_pool_->memory_usage_bytes(), 592 MemoryUsage memory_usage(resource_pool_->memory_usage_bytes(),
592 resource_pool_->resource_count()); 593 resource_pool_->resource_count());
593 594
594 scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue; 595 std::unique_ptr<EvictionTilePriorityQueue> eviction_priority_queue;
595 for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) { 596 for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) {
596 const PrioritizedTile& prioritized_tile = raster_priority_queue->Top(); 597 const PrioritizedTile& prioritized_tile = raster_priority_queue->Top();
597 Tile* tile = prioritized_tile.tile(); 598 Tile* tile = prioritized_tile.tile();
598 TilePriority priority = prioritized_tile.priority(); 599 TilePriority priority = prioritized_tile.priority();
599 600
600 if (TilePriorityViolatesMemoryPolicy(priority)) { 601 if (TilePriorityViolatesMemoryPolicy(priority)) {
601 TRACE_EVENT_INSTANT0( 602 TRACE_EVENT_INSTANT0(
602 "cc", "TileManager::AssignGpuMemory tile violates memory policy", 603 "cc", "TileManager::AssignGpuMemory tile violates memory policy",
603 TRACE_EVENT_SCOPE_THREAD); 604 TRACE_EVENT_SCOPE_THREAD);
604 break; 605 break;
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 return tile; 947 return tile;
947 } 948 }
948 949
949 void TileManager::SetTileTaskRunnerForTesting( 950 void TileManager::SetTileTaskRunnerForTesting(
950 TileTaskRunner* tile_task_runner) { 951 TileTaskRunner* tile_task_runner) {
951 tile_task_runner_ = tile_task_runner; 952 tile_task_runner_ = tile_task_runner;
952 } 953 }
953 954
954 bool TileManager::AreRequiredTilesReadyToDraw( 955 bool TileManager::AreRequiredTilesReadyToDraw(
955 RasterTilePriorityQueue::Type type) const { 956 RasterTilePriorityQueue::Type type) const {
956 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( 957 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue(
957 client_->BuildRasterQueue(global_state_.tree_priority, type)); 958 client_->BuildRasterQueue(global_state_.tree_priority, type));
958 // It is insufficient to check whether the raster queue we constructed is 959 // It is insufficient to check whether the raster queue we constructed is
959 // empty. The reason for this is that there are situations (rasterize on 960 // empty. The reason for this is that there are situations (rasterize on
960 // demand) when the tile both needs raster and it's ready to draw. Hence, we 961 // demand) when the tile both needs raster and it's ready to draw. Hence, we
961 // have to iterate the queue to check whether the required tiles are ready to 962 // have to iterate the queue to check whether the required tiles are ready to
962 // draw. 963 // draw.
963 for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) { 964 for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) {
964 if (!raster_priority_queue->Top().tile()->draw_info().IsReadyToDraw()) 965 if (!raster_priority_queue->Top().tile()->draw_info().IsReadyToDraw())
965 return false; 966 return false;
966 } 967 }
967 968
968 #if DCHECK_IS_ON() 969 #if DCHECK_IS_ON()
969 scoped_ptr<RasterTilePriorityQueue> all_queue( 970 std::unique_ptr<RasterTilePriorityQueue> all_queue(
970 client_->BuildRasterQueue(global_state_.tree_priority, type)); 971 client_->BuildRasterQueue(global_state_.tree_priority, type));
971 for (; !all_queue->IsEmpty(); all_queue->Pop()) { 972 for (; !all_queue->IsEmpty(); all_queue->Pop()) {
972 Tile* tile = all_queue->Top().tile(); 973 Tile* tile = all_queue->Top().tile();
973 DCHECK(!tile->required_for_activation() || 974 DCHECK(!tile->required_for_activation() ||
974 tile->draw_info().IsReadyToDraw()); 975 tile->draw_info().IsReadyToDraw());
975 } 976 }
976 #endif 977 #endif
977 return true; 978 return true;
978 } 979 }
979 980
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 } 1031 }
1031 } 1032 }
1032 1033
1033 void TileManager::CheckIfMoreTilesNeedToBePrepared() { 1034 void TileManager::CheckIfMoreTilesNeedToBePrepared() {
1034 tile_task_runner_->CheckForCompletedTasks(); 1035 tile_task_runner_->CheckForCompletedTasks();
1035 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 1036 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
1036 1037
1037 // When OOM, keep re-assigning memory until we reach a steady state 1038 // When OOM, keep re-assigning memory until we reach a steady state
1038 // where top-priority tiles are initialized. 1039 // where top-priority tiles are initialized.
1039 PrioritizedTileVector tiles_that_need_to_be_rasterized; 1040 PrioritizedTileVector tiles_that_need_to_be_rasterized;
1040 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( 1041 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue(
1041 client_->BuildRasterQueue(global_state_.tree_priority, 1042 client_->BuildRasterQueue(global_state_.tree_priority,
1042 RasterTilePriorityQueue::Type::ALL)); 1043 RasterTilePriorityQueue::Type::ALL));
1043 AssignGpuMemoryToTiles(raster_priority_queue.get(), 1044 AssignGpuMemoryToTiles(raster_priority_queue.get(),
1044 scheduled_raster_task_limit_, 1045 scheduled_raster_task_limit_,
1045 &tiles_that_need_to_be_rasterized); 1046 &tiles_that_need_to_be_rasterized);
1046 1047
1047 // Inform the client that will likely require a draw if the highest priority 1048 // Inform the client that will likely require a draw if the highest priority
1048 // tile that will be rasterized is required for draw. 1049 // tile that will be rasterized is required for draw.
1049 client_->SetIsLikelyToRequireADraw( 1050 client_->SetIsLikelyToRequireADraw(
1050 !tiles_that_need_to_be_rasterized.empty() && 1051 !tiles_that_need_to_be_rasterized.empty() &&
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 DCHECK(IsReadyToActivate()); 1096 DCHECK(IsReadyToActivate());
1096 DCHECK(IsReadyToDraw()); 1097 DCHECK(IsReadyToDraw());
1097 signals_.ready_to_activate = need_to_signal_activate; 1098 signals_.ready_to_activate = need_to_signal_activate;
1098 signals_.ready_to_draw = need_to_signal_draw; 1099 signals_.ready_to_draw = need_to_signal_draw;
1099 // TODO(ericrk): Investigate why we need to schedule this (not just call it 1100 // TODO(ericrk): Investigate why we need to schedule this (not just call it
1100 // inline). http://crbug.com/498439 1101 // inline). http://crbug.com/498439
1101 signals_check_notifier_.Schedule(); 1102 signals_check_notifier_.Schedule();
1102 } 1103 }
1103 1104
1104 bool TileManager::MarkTilesOutOfMemory( 1105 bool TileManager::MarkTilesOutOfMemory(
1105 scoped_ptr<RasterTilePriorityQueue> queue) const { 1106 std::unique_ptr<RasterTilePriorityQueue> queue) const {
1106 // Mark required tiles as OOM so that we can activate/draw without them. 1107 // Mark required tiles as OOM so that we can activate/draw without them.
1107 if (queue->IsEmpty()) 1108 if (queue->IsEmpty())
1108 return false; 1109 return false;
1109 1110
1110 for (; !queue->IsEmpty(); queue->Pop()) { 1111 for (; !queue->IsEmpty(); queue->Pop()) {
1111 Tile* tile = queue->Top().tile(); 1112 Tile* tile = queue->Top().tile();
1112 if (tile->draw_info().IsReadyToDraw()) 1113 if (tile->draw_info().IsReadyToDraw())
1113 continue; 1114 continue;
1114 tile->draw_info().set_oom(); 1115 tile->draw_info().set_oom();
1115 client_->NotifyTileStateChanged(tile); 1116 client_->NotifyTileStateChanged(tile);
1116 } 1117 }
1117 return true; 1118 return true;
1118 } 1119 }
1119 1120
1120 ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const { 1121 ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const {
1121 return tile_task_runner_->GetResourceFormat(!tile->is_opaque()); 1122 return tile_task_runner_->GetResourceFormat(!tile->is_opaque());
1122 } 1123 }
1123 1124
1124 bool TileManager::DetermineResourceRequiresSwizzle(const Tile* tile) const { 1125 bool TileManager::DetermineResourceRequiresSwizzle(const Tile* tile) const {
1125 return tile_task_runner_->GetResourceRequiresSwizzle(!tile->is_opaque()); 1126 return tile_task_runner_->GetResourceRequiresSwizzle(!tile->is_opaque());
1126 } 1127 }
1127 1128
1128 scoped_ptr<base::trace_event::ConvertableToTraceFormat> 1129 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
1129 TileManager::ScheduledTasksStateAsValue() const { 1130 TileManager::ScheduledTasksStateAsValue() const {
1130 scoped_ptr<base::trace_event::TracedValue> state( 1131 std::unique_ptr<base::trace_event::TracedValue> state(
1131 new base::trace_event::TracedValue()); 1132 new base::trace_event::TracedValue());
1132 state->BeginDictionary("tasks_pending"); 1133 state->BeginDictionary("tasks_pending");
1133 state->SetBoolean("ready_to_activate", signals_.ready_to_activate); 1134 state->SetBoolean("ready_to_activate", signals_.ready_to_activate);
1134 state->SetBoolean("ready_to_draw", signals_.ready_to_draw); 1135 state->SetBoolean("ready_to_draw", signals_.ready_to_draw);
1135 state->SetBoolean("all_tile_tasks_completed", 1136 state->SetBoolean("all_tile_tasks_completed",
1136 signals_.all_tile_tasks_completed); 1137 signals_.all_tile_tasks_completed);
1137 state->EndDictionary(); 1138 state->EndDictionary();
1138 return std::move(state); 1139 return std::move(state);
1139 } 1140 }
1140 1141
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 void TileManager::Signals::reset() { 1218 void TileManager::Signals::reset() {
1218 ready_to_activate = false; 1219 ready_to_activate = false;
1219 did_notify_ready_to_activate = false; 1220 did_notify_ready_to_activate = false;
1220 ready_to_draw = false; 1221 ready_to_draw = false;
1221 did_notify_ready_to_draw = false; 1222 did_notify_ready_to_draw = false;
1222 all_tile_tasks_completed = false; 1223 all_tile_tasks_completed = false;
1223 did_notify_all_tile_tasks_completed = false; 1224 did_notify_all_tile_tasks_completed = false;
1224 } 1225 }
1225 1226
1226 } // namespace cc 1227 } // namespace cc
OLDNEW
« no previous file with comments | « cc/tiles/tile_manager.h ('k') | cc/tiles/tile_manager_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698