| 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/tile_manager.h" | 5 #include "cc/tile_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 return state.PassAs<base::Value>(); | 170 return state.PassAs<base::Value>(); |
| 171 } | 171 } |
| 172 | 172 |
| 173 TileManager::TileManager( | 173 TileManager::TileManager( |
| 174 TileManagerClient* client, | 174 TileManagerClient* client, |
| 175 ResourceProvider* resource_provider, | 175 ResourceProvider* resource_provider, |
| 176 size_t num_raster_threads, | 176 size_t num_raster_threads, |
| 177 bool use_cheapness_estimator) | 177 bool use_cheapness_estimator) |
| 178 : client_(client), | 178 : client_(client), |
| 179 resource_pool_(ResourcePool::Create(resource_provider)), | 179 resource_pool_(ResourcePool::Create(resource_provider)), |
| 180 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads)), | 180 raster_worker_pool_(RasterWorkerPool::Create(this, num_raster_threads)), |
| 181 manage_tiles_pending_(false), | 181 manage_tiles_pending_(false), |
| 182 manage_tiles_call_count_(0), | 182 manage_tiles_call_count_(0), |
| 183 bytes_pending_set_pixels_(0), | 183 bytes_pending_set_pixels_(0), |
| 184 has_performed_uploads_since_last_flush_(false), |
| 184 ever_exceeded_memory_budget_(false), | 185 ever_exceeded_memory_budget_(false), |
| 185 record_rendering_stats_(false), | 186 record_rendering_stats_(false), |
| 186 use_cheapness_estimator_(use_cheapness_estimator) { | 187 use_cheapness_estimator_(use_cheapness_estimator) { |
| 187 for (int i = 0; i < NUM_STATES; ++i) { | 188 for (int i = 0; i < NUM_STATES; ++i) { |
| 188 for (int j = 0; j < NUM_TREES; ++j) { | 189 for (int j = 0; j < NUM_TREES; ++j) { |
| 189 for (int k = 0; k < NUM_BINS; ++k) | 190 for (int k = 0; k < NUM_BINS; ++k) |
| 190 raster_state_count_[i][j][k] = 0; | 191 raster_state_count_[i][j][k] = 0; |
| 191 } | 192 } |
| 192 } | 193 } |
| 193 } | 194 } |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 case IDLE_STATE: | 532 case IDLE_STATE: |
| 532 break; | 533 break; |
| 533 default: | 534 default: |
| 534 NOTREACHED(); | 535 NOTREACHED(); |
| 535 } | 536 } |
| 536 } | 537 } |
| 537 | 538 |
| 538 return false; | 539 return false; |
| 539 } | 540 } |
| 540 | 541 |
| 542 void TileManager::DidFinishDispatchingWorkerPoolCompletionCallbacks() { |
| 543 // If a flush is needed, do it now before starting to dispatch more tasks. |
| 544 if (has_performed_uploads_since_last_flush_) { |
| 545 resource_pool_->resource_provider()->shallowFlushIfSupported(); |
| 546 has_performed_uploads_since_last_flush_ = false; |
| 547 } |
| 548 |
| 549 DispatchMoreTasks(); |
| 550 } |
| 551 |
| 541 void TileManager::AssignGpuMemoryToTiles() { | 552 void TileManager::AssignGpuMemoryToTiles() { |
| 542 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); | 553 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); |
| 543 size_t unreleasable_bytes = 0; | 554 size_t unreleasable_bytes = 0; |
| 544 | 555 |
| 545 // Now give memory out to the tiles until we're out, and build | 556 // Now give memory out to the tiles until we're out, and build |
| 546 // the needs-to-be-rasterized queue. | 557 // the needs-to-be-rasterized queue. |
| 547 tiles_that_need_to_be_rasterized_.clear(); | 558 tiles_that_need_to_be_rasterized_.clear(); |
| 548 | 559 |
| 549 // Reset the image decoding list so that we don't mess up with tile | 560 // Reset the image decoding list so that we don't mess up with tile |
| 550 // priorities. Tiles will be added to the image decoding list again | 561 // priorities. Tiles will be added to the image decoding list again |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 std::list<skia::LazyPixelRef*>& pixel_refs = | 752 std::list<skia::LazyPixelRef*>& pixel_refs = |
| 742 (*it)->managed_state().pending_pixel_refs; | 753 (*it)->managed_state().pending_pixel_refs; |
| 743 for (std::list<skia::LazyPixelRef*>::iterator pixel_it = | 754 for (std::list<skia::LazyPixelRef*>::iterator pixel_it = |
| 744 pixel_refs.begin(); pixel_it != pixel_refs.end(); ++pixel_it) { | 755 pixel_refs.begin(); pixel_it != pixel_refs.end(); ++pixel_it) { |
| 745 if (pixel_ref_id == (*pixel_it)->getGenerationID()) { | 756 if (pixel_ref_id == (*pixel_it)->getGenerationID()) { |
| 746 pixel_refs.erase(pixel_it); | 757 pixel_refs.erase(pixel_it); |
| 747 break; | 758 break; |
| 748 } | 759 } |
| 749 } | 760 } |
| 750 } | 761 } |
| 751 | |
| 752 DispatchMoreTasks(); | |
| 753 } | 762 } |
| 754 | 763 |
| 755 scoped_ptr<ResourcePool::Resource> TileManager::PrepareTileForRaster( | 764 scoped_ptr<ResourcePool::Resource> TileManager::PrepareTileForRaster( |
| 756 Tile* tile) { | 765 Tile* tile) { |
| 757 ManagedTileState& managed_tile_state = tile->managed_state(); | 766 ManagedTileState& managed_tile_state = tile->managed_state(); |
| 758 DCHECK(managed_tile_state.can_use_gpu_memory); | 767 DCHECK(managed_tile_state.can_use_gpu_memory); |
| 759 scoped_ptr<ResourcePool::Resource> resource = | 768 scoped_ptr<ResourcePool::Resource> resource = |
| 760 resource_pool_->AcquireResource(tile->tile_size_.size(), tile->format_); | 769 resource_pool_->AcquireResource(tile->tile_size_.size(), tile->format_); |
| 761 resource_pool_->resource_provider()->acquirePixelBuffer(resource->id()); | 770 resource_pool_->resource_provider()->acquirePixelBuffer(resource->id()); |
| 762 | 771 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 // The component order may be bgra if we're uploading bgra pixels to rgba | 839 // The component order may be bgra if we're uploading bgra pixels to rgba |
| 831 // texture. Mark contents as swizzled if image component order is | 840 // texture. Mark contents as swizzled if image component order is |
| 832 // different than texture format. | 841 // different than texture format. |
| 833 managed_tile_state.contents_swizzled = | 842 managed_tile_state.contents_swizzled = |
| 834 !PlatformColor::sameComponentOrder(tile->format_); | 843 !PlatformColor::sameComponentOrder(tile->format_); |
| 835 | 844 |
| 836 // Tile resources can't be freed until upload has completed. | 845 // Tile resources can't be freed until upload has completed. |
| 837 managed_tile_state.can_be_freed = false; | 846 managed_tile_state.can_be_freed = false; |
| 838 | 847 |
| 839 resource_pool_->resource_provider()->beginSetPixels(resource->id()); | 848 resource_pool_->resource_provider()->beginSetPixels(resource->id()); |
| 840 resource_pool_->resource_provider()->shallowFlushIfSupported(); | 849 has_performed_uploads_since_last_flush_ = true; |
| 850 |
| 841 managed_tile_state.resource = resource.Pass(); | 851 managed_tile_state.resource = resource.Pass(); |
| 842 | 852 |
| 843 bytes_pending_set_pixels_ += tile->bytes_consumed_if_allocated(); | 853 bytes_pending_set_pixels_ += tile->bytes_consumed_if_allocated(); |
| 844 DidTileRasterStateChange(tile, SET_PIXELS_STATE); | 854 DidTileRasterStateChange(tile, SET_PIXELS_STATE); |
| 845 tiles_with_pending_set_pixels_.push(tile); | 855 tiles_with_pending_set_pixels_.push(tile); |
| 846 } else { | 856 } else { |
| 847 resource_pool_->resource_provider()->releasePixelBuffer(resource->id()); | 857 resource_pool_->resource_provider()->releasePixelBuffer(resource->id()); |
| 848 resource_pool_->ReleaseResource(resource.Pass()); | 858 resource_pool_->ReleaseResource(resource.Pass()); |
| 849 managed_tile_state.resource_is_being_initialized = false; | 859 managed_tile_state.resource_is_being_initialized = false; |
| 850 DidTileRasterStateChange(tile, IDLE_STATE); | 860 DidTileRasterStateChange(tile, IDLE_STATE); |
| 851 } | 861 } |
| 852 } | 862 } |
| 853 | 863 |
| 854 void TileManager::OnRasterTaskCompleted( | 864 void TileManager::OnRasterTaskCompleted( |
| 855 scoped_refptr<Tile> tile, | 865 scoped_refptr<Tile> tile, |
| 856 scoped_ptr<ResourcePool::Resource> resource, | 866 scoped_ptr<ResourcePool::Resource> resource, |
| 857 int manage_tiles_call_count_when_dispatched) { | 867 int manage_tiles_call_count_when_dispatched) { |
| 858 OnRasterCompleted(tile, resource.Pass(), | 868 OnRasterCompleted(tile, resource.Pass(), |
| 859 manage_tiles_call_count_when_dispatched); | 869 manage_tiles_call_count_when_dispatched); |
| 860 DispatchMoreTasks(); | |
| 861 } | 870 } |
| 862 | 871 |
| 863 void TileManager::DidFinishTileInitialization(Tile* tile) { | 872 void TileManager::DidFinishTileInitialization(Tile* tile) { |
| 864 ManagedTileState& managed_tile_state = tile->managed_state(); | 873 ManagedTileState& managed_tile_state = tile->managed_state(); |
| 865 DCHECK(managed_tile_state.resource); | 874 DCHECK(managed_tile_state.resource); |
| 866 managed_tile_state.resource_is_being_initialized = false; | 875 managed_tile_state.resource_is_being_initialized = false; |
| 867 managed_tile_state.can_be_freed = true; | 876 managed_tile_state.can_be_freed = true; |
| 868 } | 877 } |
| 869 | 878 |
| 870 void TileManager::DidTileRasterStateChange(Tile* tile, TileRasterState state) { | 879 void TileManager::DidTileRasterStateChange(Tile* tile, TileRasterState state) { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 decode_begin_time = base::TimeTicks::Now(); | 979 decode_begin_time = base::TimeTicks::Now(); |
| 971 pixel_ref->Decode(); | 980 pixel_ref->Decode(); |
| 972 if (stats) { | 981 if (stats) { |
| 973 stats->totalDeferredImageDecodeCount++; | 982 stats->totalDeferredImageDecodeCount++; |
| 974 stats->totalDeferredImageDecodeTime += | 983 stats->totalDeferredImageDecodeTime += |
| 975 base::TimeTicks::Now() - decode_begin_time; | 984 base::TimeTicks::Now() - decode_begin_time; |
| 976 } | 985 } |
| 977 } | 986 } |
| 978 | 987 |
| 979 } // namespace cc | 988 } // namespace cc |
| OLD | NEW |