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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 ResourceProvider* resource_provider, | 142 ResourceProvider* resource_provider, |
143 scoped_ptr<RasterWorkerPool> raster_worker_pool, | 143 scoped_ptr<RasterWorkerPool> raster_worker_pool, |
144 size_t num_raster_threads, | 144 size_t num_raster_threads, |
145 RenderingStatsInstrumentation* rendering_stats_instrumentation) | 145 RenderingStatsInstrumentation* rendering_stats_instrumentation) |
146 : client_(client), | 146 : client_(client), |
147 resource_pool_(ResourcePool::Create(resource_provider)), | 147 resource_pool_(ResourcePool::Create(resource_provider)), |
148 raster_worker_pool_(raster_worker_pool.Pass()), | 148 raster_worker_pool_(raster_worker_pool.Pass()), |
149 prioritized_tiles_dirty_(false), | 149 prioritized_tiles_dirty_(false), |
150 all_tiles_that_need_to_be_rasterized_have_memory_(true), | 150 all_tiles_that_need_to_be_rasterized_have_memory_(true), |
151 all_tiles_required_for_activation_have_memory_(true), | 151 all_tiles_required_for_activation_have_memory_(true), |
152 all_tiles_required_for_activation_have_been_initialized_(true), | |
153 bytes_releasable_(0), | 152 bytes_releasable_(0), |
154 resources_releasable_(0), | 153 resources_releasable_(0), |
155 ever_exceeded_memory_budget_(false), | 154 ever_exceeded_memory_budget_(false), |
156 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 155 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
157 did_initialize_visible_tile_(false) { | 156 did_initialize_visible_tile_(false) { |
158 raster_worker_pool_->SetClient(this); | 157 raster_worker_pool_->SetClient(this); |
159 } | 158 } |
160 | 159 |
161 TileManager::~TileManager() { | 160 TileManager::~TileManager() { |
162 // Reset global state and manage. This should cause | 161 // Reset global state and manage. This should cause |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 | 489 |
491 void TileManager::AssignGpuMemoryToTiles( | 490 void TileManager::AssignGpuMemoryToTiles( |
492 PrioritizedTileSet* tiles, | 491 PrioritizedTileSet* tiles, |
493 TileVector* tiles_that_need_to_be_rasterized) { | 492 TileVector* tiles_that_need_to_be_rasterized) { |
494 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); | 493 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); |
495 | 494 |
496 // Now give memory out to the tiles until we're out, and build | 495 // Now give memory out to the tiles until we're out, and build |
497 // the needs-to-be-rasterized queue. | 496 // the needs-to-be-rasterized queue. |
498 all_tiles_that_need_to_be_rasterized_have_memory_ = true; | 497 all_tiles_that_need_to_be_rasterized_have_memory_ = true; |
499 all_tiles_required_for_activation_have_memory_ = true; | 498 all_tiles_required_for_activation_have_memory_ = true; |
500 all_tiles_required_for_activation_have_been_initialized_ = true; | |
501 | 499 |
502 // Cast to prevent overflow. | 500 // Cast to prevent overflow. |
503 int64 bytes_available = | 501 int64 bytes_available = |
504 static_cast<int64>(bytes_releasable_) + | 502 static_cast<int64>(bytes_releasable_) + |
505 static_cast<int64>(global_state_.memory_limit_in_bytes) - | 503 static_cast<int64>(global_state_.memory_limit_in_bytes) - |
506 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes()); | 504 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes()); |
507 int resources_available = | 505 int resources_available = |
508 resources_releasable_ + | 506 resources_releasable_ + |
509 global_state_.num_resources_limit - | 507 global_state_.num_resources_limit - |
510 resource_pool_->acquired_resource_count(); | 508 resource_pool_->acquired_resource_count(); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 } else { | 578 } else { |
581 bytes_left -= tile_bytes; | 579 bytes_left -= tile_bytes; |
582 resources_left -= tile_resources; | 580 resources_left -= tile_resources; |
583 | 581 |
584 if (tile_version.resource_) | 582 if (tile_version.resource_) |
585 continue; | 583 continue; |
586 } | 584 } |
587 | 585 |
588 DCHECK(!tile_version.resource_); | 586 DCHECK(!tile_version.resource_); |
589 | 587 |
590 if (tile->required_for_activation()) | |
591 all_tiles_required_for_activation_have_been_initialized_ = false; | |
592 | |
593 // Tile shouldn't be rasterized if |tiles_that_need_to_be_rasterized| | 588 // Tile shouldn't be rasterized if |tiles_that_need_to_be_rasterized| |
594 // has reached it's limit or we've failed to assign gpu memory to this | 589 // has reached it's limit or we've failed to assign gpu memory to this |
595 // or any higher priority tile. Preventing tiles that fit into memory | 590 // or any higher priority tile. Preventing tiles that fit into memory |
596 // budget to be rasterized when higher priority tile is oom is | 591 // budget to be rasterized when higher priority tile is oom is |
597 // important for two reasons: | 592 // important for two reasons: |
598 // 1. Tile size should not impact raster priority. | 593 // 1. Tile size should not impact raster priority. |
599 // 2. Tiles with existing raster task could otherwise incorrectly | 594 // 2. Tiles with existing raster task could otherwise incorrectly |
600 // be added as they are not affected by |bytes_allocatable|. | 595 // be added as they are not affected by |bytes_allocatable|. |
601 if (oomed || tiles_that_need_to_be_rasterized->size() >= kMaxRasterTasks) { | 596 if (oomed || tiles_that_need_to_be_rasterized->size() >= kMaxRasterTasks) { |
602 all_tiles_that_need_to_be_rasterized_have_memory_ = false; | 597 all_tiles_that_need_to_be_rasterized_have_memory_ = false; |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 bytes_releasable_ += tile->bytes_consumed_if_allocated(); | 843 bytes_releasable_ += tile->bytes_consumed_if_allocated(); |
849 ++resources_releasable_; | 844 ++resources_releasable_; |
850 } | 845 } |
851 | 846 |
852 FreeUnusedResourcesForTile(tile); | 847 FreeUnusedResourcesForTile(tile); |
853 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) | 848 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) |
854 did_initialize_visible_tile_ = true; | 849 did_initialize_visible_tile_ = true; |
855 } | 850 } |
856 | 851 |
857 } // namespace cc | 852 } // namespace cc |
OLD | NEW |