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

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

Issue 2560253003: Delay Activation/Draw in smoothness mode.
Patch Set: more unit tests Created 4 years 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_unittest.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>
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 more_tiles_need_prepare_check_notifier_( 359 more_tiles_need_prepare_check_notifier_(
360 task_runner_, 360 task_runner_,
361 base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared, 361 base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared,
362 base::Unretained(this))), 362 base::Unretained(this))),
363 signals_check_notifier_(task_runner_, 363 signals_check_notifier_(task_runner_,
364 base::Bind(&TileManager::CheckAndIssueSignals, 364 base::Bind(&TileManager::CheckAndIssueSignals,
365 base::Unretained(this))), 365 base::Unretained(this))),
366 has_scheduled_tile_tasks_(false), 366 has_scheduled_tile_tasks_(false),
367 prepare_tiles_count_(0u), 367 prepare_tiles_count_(0u),
368 next_tile_id_(0u), 368 next_tile_id_(0u),
369 task_set_finished_weak_ptr_factory_(this) {} 369 task_set_finished_weak_ptr_factory_(this),
370 ready_to_draw_callback_weak_ptr_factory_(this) {}
370 371
371 TileManager::~TileManager() { 372 TileManager::~TileManager() {
372 FinishTasksAndCleanUp(); 373 FinishTasksAndCleanUp();
373 } 374 }
374 375
375 void TileManager::FinishTasksAndCleanUp() { 376 void TileManager::FinishTasksAndCleanUp() {
376 if (!tile_task_manager_) 377 if (!tile_task_manager_)
377 return; 378 return;
378 379
379 global_state_ = GlobalStateThatImpactsTilePriority(); 380 global_state_ = GlobalStateThatImpactsTilePriority();
380 381
381 // This cancels tasks if possible, finishes pending tasks, and release any 382 // This cancels tasks if possible, finishes pending tasks, and release any
382 // uninitialized resources. 383 // uninitialized resources.
383 tile_task_manager_->Shutdown(); 384 tile_task_manager_->Shutdown();
384 385
385 raster_buffer_provider_->Shutdown(); 386 raster_buffer_provider_->Shutdown();
386 387
387 tile_task_manager_->CheckForCompletedTasks(); 388 tile_task_manager_->CheckForCompletedTasks();
388 389
389 FreeResourcesForReleasedTiles(); 390 FreeResourcesForReleasedTiles();
390 CleanUpReleasedTiles(); 391 CleanUpReleasedTiles();
391 392
392 tile_task_manager_ = nullptr; 393 tile_task_manager_ = nullptr;
393 resource_pool_ = nullptr; 394 resource_pool_ = nullptr;
394 more_tiles_need_prepare_check_notifier_.Cancel(); 395 more_tiles_need_prepare_check_notifier_.Cancel();
395 signals_check_notifier_.Cancel(); 396 signals_check_notifier_.Cancel();
396 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs(); 397 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs();
398 ready_to_draw_callback_weak_ptr_factory_.InvalidateWeakPtrs();
397 399
398 image_controller_.SetImageDecodeCache(nullptr); 400 image_controller_.SetImageDecodeCache(nullptr);
399 locked_image_tasks_.clear(); 401 locked_image_tasks_.clear();
400 } 402 }
401 403
402 void TileManager::SetResources(ResourcePool* resource_pool, 404 void TileManager::SetResources(ResourcePool* resource_pool,
403 ImageDecodeCache* image_decode_cache, 405 ImageDecodeCache* image_decode_cache,
404 TaskGraphRunner* task_graph_runner, 406 TaskGraphRunner* task_graph_runner,
405 RasterBufferProvider* raster_buffer_provider, 407 RasterBufferProvider* raster_buffer_provider,
406 size_t scheduled_raster_task_limit, 408 size_t scheduled_raster_task_limit,
407 bool use_gpu_rasterization) { 409 bool use_gpu_rasterization) {
408 DCHECK(!tile_task_manager_); 410 DCHECK(!tile_task_manager_);
409 DCHECK(task_graph_runner); 411 DCHECK(task_graph_runner);
410 412
411 use_gpu_rasterization_ = use_gpu_rasterization; 413 use_gpu_rasterization_ = use_gpu_rasterization;
412 scheduled_raster_task_limit_ = scheduled_raster_task_limit; 414 scheduled_raster_task_limit_ = scheduled_raster_task_limit;
413 resource_pool_ = resource_pool; 415 resource_pool_ = resource_pool;
414 image_controller_.SetImageDecodeCache(image_decode_cache); 416 image_controller_.SetImageDecodeCache(image_decode_cache);
415 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner); 417 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner);
416 raster_buffer_provider_ = raster_buffer_provider; 418 raster_buffer_provider_ = raster_buffer_provider;
417 } 419 }
418 420
419 void TileManager::Release(Tile* tile) { 421 void TileManager::Release(Tile* tile) {
420 released_tiles_.push_back(tile); 422 released_tiles_.push_back(tile);
423 auto found = std::find(pending_ready_for_draw_tiles_.begin(),
424 pending_ready_for_draw_tiles_.end(), tile);
425 if (found != pending_ready_for_draw_tiles_.end())
426 pending_ready_for_draw_tiles_.erase(found);
421 } 427 }
422 428
423 void TileManager::FreeResourcesForReleasedTiles() { 429 void TileManager::FreeResourcesForReleasedTiles() {
424 for (auto* tile : released_tiles_) 430 for (auto* tile : released_tiles_)
425 FreeResourcesForTile(tile); 431 FreeResourcesForTile(tile);
426 } 432 }
427 433
428 void TileManager::CleanUpReleasedTiles() { 434 void TileManager::CleanUpReleasedTiles() {
429 std::vector<Tile*> tiles_to_retain; 435 std::vector<Tile*> tiles_to_retain;
430 for (auto* tile : released_tiles_) { 436 for (auto* tile : released_tiles_) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 // We need to call CheckForCompletedTasks() once in-between each call 511 // We need to call CheckForCompletedTasks() once in-between each call
506 // to ScheduleTasks() to prevent canceled tasks from being scheduled. 512 // to ScheduleTasks() to prevent canceled tasks from being scheduled.
507 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { 513 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
508 tile_task_manager_->CheckForCompletedTasks(); 514 tile_task_manager_->CheckForCompletedTasks();
509 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 515 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
510 } 516 }
511 517
512 FreeResourcesForReleasedTiles(); 518 FreeResourcesForReleasedTiles();
513 CleanUpReleasedTiles(); 519 CleanUpReleasedTiles();
514 520
521 if (!pending_ready_for_draw_tiles_.empty())
522 pending_tile_requirements_dirty_ = true;
523
515 PrioritizedWorkToSchedule prioritized_work = AssignGpuMemoryToTiles(); 524 PrioritizedWorkToSchedule prioritized_work = AssignGpuMemoryToTiles();
516 525
517 // Inform the client that will likely require a draw if the highest priority 526 // Inform the client that will likely require a draw if the highest priority
518 // tile that will be rasterized is required for draw. 527 // tile that will be rasterized is required for draw.
519 client_->SetIsLikelyToRequireADraw( 528 client_->SetIsLikelyToRequireADraw(
520 !prioritized_work.tiles_to_raster.empty() && 529 !prioritized_work.tiles_to_raster.empty() &&
521 prioritized_work.tiles_to_raster.front().tile()->required_for_draw()); 530 prioritized_work.tiles_to_raster.front().tile()->required_for_draw());
522 531
523 // Schedule tile tasks. 532 // Schedule tile tasks.
524 ScheduleTasks(prioritized_work); 533 ScheduleTasks(prioritized_work);
525 534
526 TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD, 535 TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD,
527 "state", BasicStateAsValue()); 536 "state", BasicStateAsValue());
528 return true; 537 return true;
529 } 538 }
530 539
531 void TileManager::Flush() { 540 void TileManager::Flush() {
532 TRACE_EVENT0("cc", "TileManager::Flush"); 541 TRACE_EVENT0("cc", "TileManager::Flush");
533 542
534 if (!tile_task_manager_) { 543 if (!tile_task_manager_) {
535 TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD); 544 TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD);
536 return; 545 return;
537 } 546 }
538 547
539 tile_task_manager_->CheckForCompletedTasks(); 548 tile_task_manager_->CheckForCompletedTasks();
540 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 549 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
550 CheckPendingReadyToDrawTiles(true /* issue_signals */);
541 551
542 TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats", 552 TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats",
543 RasterTaskCompletionStatsAsValue(flush_stats_)); 553 RasterTaskCompletionStatsAsValue(flush_stats_));
544 flush_stats_ = RasterTaskCompletionStats(); 554 flush_stats_ = RasterTaskCompletionStats();
545 } 555 }
546 556
547 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> 557 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
548 TileManager::BasicStateAsValue() const { 558 TileManager::BasicStateAsValue() const {
549 std::unique_ptr<base::trace_event::TracedValue> value( 559 std::unique_ptr<base::trace_event::TracedValue> value(
550 new base::trace_event::TracedValue()); 560 new base::trace_event::TracedValue());
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 all_tiles_that_need_to_be_rasterized_are_scheduled_, 784 all_tiles_that_need_to_be_rasterized_are_scheduled_,
775 "had_enough_memory_to_schedule_tiles_needed_now", 785 "had_enough_memory_to_schedule_tiles_needed_now",
776 had_enough_memory_to_schedule_tiles_needed_now); 786 had_enough_memory_to_schedule_tiles_needed_now);
777 return work_to_schedule; 787 return work_to_schedule;
778 } 788 }
779 789
780 void TileManager::FreeResourcesForTile(Tile* tile) { 790 void TileManager::FreeResourcesForTile(Tile* tile) {
781 TileDrawInfo& draw_info = tile->draw_info(); 791 TileDrawInfo& draw_info = tile->draw_info();
782 if (draw_info.resource_) { 792 if (draw_info.resource_) {
783 resource_pool_->ReleaseResource(draw_info.resource_); 793 resource_pool_->ReleaseResource(draw_info.resource_);
784 draw_info.resource_ = nullptr; 794 draw_info.set_resource(nullptr);
785 } 795 }
786 } 796 }
787 797
788 void TileManager::FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw( 798 void TileManager::FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(
789 Tile* tile) { 799 Tile* tile) {
790 bool was_ready_to_draw = tile->draw_info().IsReadyToDraw(); 800 bool was_ready_to_draw = tile->draw_info().IsReadyToDraw();
791 FreeResourcesForTile(tile); 801 FreeResourcesForTile(tile);
792 if (was_ready_to_draw) 802 if (was_ready_to_draw)
793 client_->NotifyTileStateChanged(tile); 803 client_->NotifyTileStateChanged(tile);
794 } 804 }
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 1039
1030 if (was_canceled) { 1040 if (was_canceled) {
1031 ++flush_stats_.canceled_count; 1041 ++flush_stats_.canceled_count;
1032 resource_pool_->ReleaseResource(resource); 1042 resource_pool_->ReleaseResource(resource);
1033 return; 1043 return;
1034 } 1044 }
1035 1045
1036 resource_pool_->OnContentReplaced(resource->id(), tile->id()); 1046 resource_pool_->OnContentReplaced(resource->id(), tile->id());
1037 ++flush_stats_.completed_count; 1047 ++flush_stats_.completed_count;
1038 1048
1039 draw_info.set_use_resource(); 1049 draw_info.set_resource(resource);
1040 draw_info.resource_ = resource;
1041 draw_info.contents_swizzled_ = DetermineResourceRequiresSwizzle(tile); 1050 draw_info.contents_swizzled_ = DetermineResourceRequiresSwizzle(tile);
1042 1051 if (global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY) {
1043 DCHECK(draw_info.IsReadyToDraw()); 1052 draw_info.set_is_resource_ready_for_draw();
1044 draw_info.set_was_ever_ready_to_draw(); 1053 draw_info.set_was_ever_ready_to_draw();
1045 1054 client_->NotifyTileStateChanged(tile);
1046 client_->NotifyTileStateChanged(tile); 1055 } else {
1056 pending_ready_for_draw_tiles_.push_back(tile);
1057 }
1047 } 1058 }
1048 1059
1049 ScopedTilePtr TileManager::CreateTile(const Tile::CreateInfo& info, 1060 ScopedTilePtr TileManager::CreateTile(const Tile::CreateInfo& info,
1050 int layer_id, 1061 int layer_id,
1051 int source_frame_number, 1062 int source_frame_number,
1052 int flags) { 1063 int flags) {
1053 // We need to have a tile task worker pool to do anything meaningful with 1064 // We need to have a tile task worker pool to do anything meaningful with
1054 // tiles. 1065 // tiles.
1055 DCHECK(tile_task_manager_); 1066 DCHECK(tile_task_manager_);
1056 ScopedTilePtr tile( 1067 ScopedTilePtr tile(
(...skipping 25 matching lines...) Expand all
1082 Tile* tile = all_queue->Top().tile(); 1093 Tile* tile = all_queue->Top().tile();
1083 DCHECK(!tile->required_for_activation() || 1094 DCHECK(!tile->required_for_activation() ||
1084 tile->draw_info().IsReadyToDraw()); 1095 tile->draw_info().IsReadyToDraw());
1085 } 1096 }
1086 #endif 1097 #endif
1087 return true; 1098 return true;
1088 } 1099 }
1089 1100
1090 bool TileManager::IsReadyToActivate() const { 1101 bool TileManager::IsReadyToActivate() const {
1091 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); 1102 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate");
1092 return AreRequiredTilesReadyToDraw( 1103 return !has_pending_ready_to_activate_resource_ &&
1093 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 1104 AreRequiredTilesReadyToDraw(
1105 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
1094 } 1106 }
1095 1107
1096 bool TileManager::IsReadyToDraw() const { 1108 bool TileManager::IsReadyToDraw() const {
1097 TRACE_EVENT0("cc", "TileManager::IsReadyToDraw"); 1109 TRACE_EVENT0("cc", "TileManager::IsReadyToDraw");
1098 return AreRequiredTilesReadyToDraw( 1110 return !has_pending_ready_to_draw_resources_ &&
1099 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 1111 AreRequiredTilesReadyToDraw(
1112 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
1100 } 1113 }
1101 1114
1102 void TileManager::CheckAndIssueSignals() { 1115 void TileManager::CheckAndIssueSignals() {
1103 TRACE_EVENT0("cc", "TileManager::CheckAndIssueSignals"); 1116 TRACE_EVENT0("cc", "TileManager::CheckAndIssueSignals");
1104 tile_task_manager_->CheckForCompletedTasks(); 1117 tile_task_manager_->CheckForCompletedTasks();
1105 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 1118 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
1106 1119
1120 CheckPendingReadyToDrawTiles(false /* issue_signals */);
1121
1107 // Ready to activate. 1122 // Ready to activate.
1108 if (signals_.ready_to_activate && !signals_.did_notify_ready_to_activate) { 1123 if (signals_.ready_to_activate && !signals_.did_notify_ready_to_activate) {
1109 signals_.ready_to_activate = false; 1124 signals_.ready_to_activate = false;
1110 if (IsReadyToActivate()) { 1125 if (IsReadyToActivate()) {
1111 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), 1126 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
1112 "TileManager::CheckAndIssueSignals - ready to activate"); 1127 "TileManager::CheckAndIssueSignals - ready to activate");
1113 signals_.did_notify_ready_to_activate = true; 1128 signals_.did_notify_ready_to_activate = true;
1114 client_->NotifyReadyToActivate(); 1129 client_->NotifyReadyToActivate();
1115 } 1130 }
1116 } 1131 }
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 signals_.all_tile_tasks_completed); 1265 signals_.all_tile_tasks_completed);
1251 state->EndDictionary(); 1266 state->EndDictionary();
1252 return std::move(state); 1267 return std::move(state);
1253 } 1268 }
1254 1269
1255 bool TileManager::UsePartialRaster() const { 1270 bool TileManager::UsePartialRaster() const {
1256 return use_partial_raster_ && 1271 return use_partial_raster_ &&
1257 raster_buffer_provider_->CanPartialRasterIntoProvidedResource(); 1272 raster_buffer_provider_->CanPartialRasterIntoProvidedResource();
1258 } 1273 }
1259 1274
1260 // Utility function that can be used to create a "Task set finished" task that 1275 void TileManager::CheckPendingReadyToDrawTiles(bool issue_signals) {
1276 // We are about to check all pending resources. We will re-set these to true
1277 // if we encounter them.
1278 has_pending_ready_to_draw_resources_ = false;
1279 has_pending_ready_to_activate_resource_ = false;
1280
1281 bool in_smoothness_mode =
1282 global_state_.tree_priority == SMOOTHNESS_TAKES_PRIORITY;
1283
1284 ResourceProvider::ResourceIdArray required_for_activation_ids;
1285 ResourceProvider::ResourceIdArray required_for_draw_ids;
1286 for (auto it = pending_ready_for_draw_tiles_.begin();
1287 it != pending_ready_for_draw_tiles_.end();) {
1288 Tile* tile = *it;
1289 Resource* resource = tile->draw_info().resource_;
1290 DCHECK(resource);
1291
1292 if (!in_smoothness_mode ||
1293 raster_buffer_provider_->IsResourceReadyToDraw(resource->id())) {
1294 tile->draw_info().set_is_resource_ready_for_draw();
1295 tile->draw_info().set_was_ever_ready_to_draw();
1296 client_->NotifyTileStateChanged(tile);
1297 it = pending_ready_for_draw_tiles_.erase(it);
1298 continue;
1299 }
1300
1301 if (pending_tile_requirements_dirty_) {
1302 tile->set_required_for_activation(
1303 tile->tiling()->IsTileRequiredForActivation(tile));
1304 tile->set_required_for_draw(tile->tiling()->IsTileRequiredForDraw(tile));
1305 }
1306
1307 if (tile->required_for_activation()) {
1308 has_pending_ready_to_activate_resource_ = true;
1309 required_for_activation_ids.push_back(resource->id());
1310 }
1311 if (tile->required_for_draw()) {
1312 has_pending_ready_to_draw_resources_ = true;
1313 required_for_draw_ids.push_back(resource->id());
1314 }
1315
1316 ++it;
1317 }
1318
1319 if (!required_for_activation_ids.empty()) {
1320 pending_required_for_activation_callback_id_ =
1321 raster_buffer_provider_->SetReadyToDrawCallback(
1322 required_for_activation_ids,
1323 base::Bind(&TileManager::ReadyToDrawCallback,
1324 ready_to_draw_callback_weak_ptr_factory_.GetWeakPtr()),
1325 pending_required_for_activation_callback_id_);
1326 }
1327
1328 if (!required_for_draw_ids.empty()) {
1329 pending_required_for_activation_callback_id_ =
1330 raster_buffer_provider_->SetReadyToDrawCallback(
1331 required_for_draw_ids,
1332 base::Bind(&TileManager::ReadyToDrawCallback,
1333 ready_to_draw_callback_weak_ptr_factory_.GetWeakPtr()),
1334 pending_required_for_activation_callback_id_);
1335 }
1336
1337 // Update our signals now that we know whether we have pending resources.
1338 signals_.ready_to_activate = !has_pending_ready_to_activate_resource_;
1339 signals_.ready_to_draw = !has_pending_ready_to_draw_resources_;
1340
1341 if (issue_signals && (signals_.ready_to_activate || signals_.ready_to_draw))
1342 signals_check_notifier_.Schedule();
1343
1344 // We've just updated all pending tile requirements if necessary.
1345 pending_tile_requirements_dirty_ = false;
1346 }
1347
1348 void TileManager::ReadyToDrawCallback(uint64_t callback_id) {
1349 signals_check_notifier_.Schedule();
1350 }
1351
1352 // Utility function that can be used to create a "Task set finished" task
1353 // that
1261 // posts |callback| to |task_runner| when run. 1354 // posts |callback| to |task_runner| when run.
1262 scoped_refptr<TileTask> TileManager::CreateTaskSetFinishedTask( 1355 scoped_refptr<TileTask> TileManager::CreateTaskSetFinishedTask(
1263 void (TileManager::*callback)()) { 1356 void (TileManager::*callback)()) {
1264 return make_scoped_refptr(new TaskSetFinishedTaskImpl( 1357 return make_scoped_refptr(new TaskSetFinishedTaskImpl(
1265 task_runner_, 1358 task_runner_,
1266 base::Bind(callback, task_set_finished_weak_ptr_factory_.GetWeakPtr()))); 1359 base::Bind(callback, task_set_finished_weak_ptr_factory_.GetWeakPtr())));
1267 } 1360 }
1268 1361
1269 TileManager::MemoryUsage::MemoryUsage() 1362 TileManager::MemoryUsage::MemoryUsage()
1270 : memory_bytes_(0), resource_count_(0) {} 1363 : memory_bytes_(0), resource_count_(0) {}
1271 1364
1272 TileManager::MemoryUsage::MemoryUsage(size_t memory_bytes, 1365 TileManager::MemoryUsage::MemoryUsage(size_t memory_bytes,
1273 size_t resource_count) 1366 size_t resource_count)
1274 : memory_bytes_(static_cast<int64_t>(memory_bytes)), 1367 : memory_bytes_(static_cast<int64_t>(memory_bytes)),
1275 resource_count_(static_cast<int>(resource_count)) { 1368 resource_count_(static_cast<int>(resource_count)) {
1276 // MemoryUsage is constructed using size_ts, since it deals with memory and 1369 // MemoryUsage is constructed using size_ts, since it deals with memory
1277 // the inputs are typically size_t. However, during the course of usage (in 1370 // and
1278 // particular operator-=) can cause internal values to become negative. Thus, 1371 // the inputs are typically size_t. However, during the course of usage
1372 // (in
1373 // particular operator-=) can cause internal values to become negative.
1374 // Thus,
1279 // member variables are signed. 1375 // member variables are signed.
1280 DCHECK_LE(memory_bytes, 1376 DCHECK_LE(memory_bytes,
1281 static_cast<size_t>(std::numeric_limits<int64_t>::max())); 1377 static_cast<size_t>(std::numeric_limits<int64_t>::max()));
1282 DCHECK_LE(resource_count, 1378 DCHECK_LE(resource_count,
1283 static_cast<size_t>(std::numeric_limits<int>::max())); 1379 static_cast<size_t>(std::numeric_limits<int>::max()));
1284 } 1380 }
1285 1381
1286 // static 1382 // static
1287 TileManager::MemoryUsage TileManager::MemoryUsage::FromConfig( 1383 TileManager::MemoryUsage TileManager::MemoryUsage::FromConfig(
1288 const gfx::Size& size, 1384 const gfx::Size& size,
1289 ResourceFormat format) { 1385 ResourceFormat format) {
1290 // We can use UncheckedSizeInBytes here since this is used with a tile 1386 // We can use UncheckedSizeInBytes here since this is used with a tile
1291 // size which is determined by the compositor (it's at most max texture size). 1387 // size which is determined by the compositor (it's at most max texture
1388 // size).
1292 return MemoryUsage(ResourceUtil::UncheckedSizeInBytes<size_t>(size, format), 1389 return MemoryUsage(ResourceUtil::UncheckedSizeInBytes<size_t>(size, format),
1293 1); 1390 1);
1294 } 1391 }
1295 1392
1296 // static 1393 // static
1297 TileManager::MemoryUsage TileManager::MemoryUsage::FromTile(const Tile* tile) { 1394 TileManager::MemoryUsage TileManager::MemoryUsage::FromTile(const Tile* tile) {
1298 const TileDrawInfo& draw_info = tile->draw_info(); 1395 const TileDrawInfo& draw_info = tile->draw_info();
1299 if (draw_info.resource_) { 1396 if (draw_info.resource_) {
1300 return MemoryUsage::FromConfig(draw_info.resource_->size(), 1397 return MemoryUsage::FromConfig(draw_info.resource_->size(),
1301 draw_info.resource_->format()); 1398 draw_info.resource_->format());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 all_tile_tasks_completed = false; 1438 all_tile_tasks_completed = false;
1342 did_notify_all_tile_tasks_completed = false; 1439 did_notify_all_tile_tasks_completed = false;
1343 } 1440 }
1344 1441
1345 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; 1442 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default;
1346 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( 1443 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule(
1347 PrioritizedWorkToSchedule&& other) = default; 1444 PrioritizedWorkToSchedule&& other) = default;
1348 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; 1445 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default;
1349 1446
1350 } // namespace cc 1447 } // namespace cc
OLDNEW
« no previous file with comments | « cc/tiles/tile_manager.h ('k') | cc/tiles/tile_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698