OLD | NEW |
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/resources/tile_manager.h" | 5 #include "cc/resources/tile_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 | 502 |
503 all_tiles_that_need_to_be_rasterized_have_memory_ = true; | 503 all_tiles_that_need_to_be_rasterized_have_memory_ = true; |
504 all_tiles_required_for_activation_have_memory_ = true; | 504 all_tiles_required_for_activation_have_memory_ = true; |
505 all_tiles_required_for_activation_have_been_initialized_ = true; | 505 all_tiles_required_for_activation_have_been_initialized_ = true; |
506 | 506 |
507 // Cast to prevent overflow. | 507 // Cast to prevent overflow. |
508 int64 bytes_available = | 508 int64 bytes_available = |
509 static_cast<int64>(bytes_releasable) + | 509 static_cast<int64>(bytes_releasable) + |
510 static_cast<int64>(global_state_.memory_limit_in_bytes) - | 510 static_cast<int64>(global_state_.memory_limit_in_bytes) - |
511 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes()); | 511 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes()); |
512 int resources_available = resources_releasable + | 512 int resources_available = |
513 global_state_.num_resources_limit - | 513 resources_releasable + |
514 resource_pool_->NumResources(); | 514 global_state_.num_resources_limit - |
| 515 resource_pool_->acquired_resource_count(); |
515 | 516 |
516 size_t bytes_allocatable = | 517 size_t bytes_allocatable = |
517 std::max(static_cast<int64>(0), bytes_available); | 518 std::max(static_cast<int64>(0), bytes_available); |
518 size_t resources_allocatable = std::max(0, resources_available); | 519 size_t resources_allocatable = std::max(0, resources_available); |
519 | 520 |
520 size_t bytes_that_exceeded_memory_budget = 0; | 521 size_t bytes_that_exceeded_memory_budget = 0; |
521 size_t bytes_left = bytes_allocatable; | 522 size_t bytes_left = bytes_allocatable; |
522 size_t resources_left = resources_allocatable; | 523 size_t resources_left = resources_allocatable; |
523 bool oomed = false; | 524 bool oomed = false; |
524 | 525 |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 | 703 |
703 DCHECK(tile_version.requires_resource()); | 704 DCHECK(tile_version.requires_resource()); |
704 DCHECK(!tile_version.resource_); | 705 DCHECK(!tile_version.resource_); |
705 | 706 |
706 if (tile_version.raster_task_.is_null()) | 707 if (tile_version.raster_task_.is_null()) |
707 tile_version.raster_task_ = CreateRasterTask(tile); | 708 tile_version.raster_task_ = CreateRasterTask(tile); |
708 | 709 |
709 tasks.Append(tile_version.raster_task_, tile->required_for_activation()); | 710 tasks.Append(tile_version.raster_task_, tile->required_for_activation()); |
710 } | 711 } |
711 | 712 |
| 713 // We must reduce the amount of unused memory before calling |
| 714 // ScheduleTasks to prevent usage from rising above limit. |
| 715 resource_pool_->ReduceMemoryUsage(); |
| 716 |
712 // Schedule running of |tasks|. This replaces any previously | 717 // Schedule running of |tasks|. This replaces any previously |
713 // scheduled tasks and effectively cancels all tasks not present | 718 // scheduled tasks and effectively cancels all tasks not present |
714 // in |tasks|. | 719 // in |tasks|. |
715 raster_worker_pool_->ScheduleTasks(&tasks); | 720 raster_worker_pool_->ScheduleTasks(&tasks); |
716 } | 721 } |
717 | 722 |
718 RasterWorkerPool::Task TileManager::CreateImageDecodeTask( | 723 RasterWorkerPool::Task TileManager::CreateImageDecodeTask( |
719 Tile* tile, skia::LazyPixelRef* pixel_ref) { | 724 Tile* tile, skia::LazyPixelRef* pixel_ref) { |
720 return RasterWorkerPool::CreateImageDecodeTask( | 725 return RasterWorkerPool::CreateImageDecodeTask( |
721 pixel_ref, | 726 pixel_ref, |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
838 tile_version.set_use_resource(); | 843 tile_version.set_use_resource(); |
839 tile_version.resource_ = resource.Pass(); | 844 tile_version.resource_ = resource.Pass(); |
840 } | 845 } |
841 | 846 |
842 FreeUnusedResourcesForTile(tile); | 847 FreeUnusedResourcesForTile(tile); |
843 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) | 848 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) |
844 did_initialize_visible_tile_ = true; | 849 did_initialize_visible_tile_ = true; |
845 } | 850 } |
846 | 851 |
847 } // namespace cc | 852 } // namespace cc |
OLD | NEW |