| 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 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 case IDLE_STATE: | 529 case IDLE_STATE: |
| 529 break; | 530 break; |
| 530 default: | 531 default: |
| 531 NOTREACHED(); | 532 NOTREACHED(); |
| 532 } | 533 } |
| 533 } | 534 } |
| 534 | 535 |
| 535 return false; | 536 return false; |
| 536 } | 537 } |
| 537 | 538 |
| 539 void TileManager::DidFinishDispatchingWorkerPoolCompletionCallbacks() { |
| 540 // If a flush is needed, do it now before starting to dispatch more tasks. |
| 541 if (has_performed_uploads_since_last_flush_) { |
| 542 resource_pool_->resource_provider()->shallowFlushIfSupported(); |
| 543 has_performed_uploads_since_last_flush_ = false; |
| 544 } |
| 545 |
| 546 DispatchMoreTasks(); |
| 547 } |
| 548 |
| 538 void TileManager::AssignGpuMemoryToTiles() { | 549 void TileManager::AssignGpuMemoryToTiles() { |
| 539 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); | 550 TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); |
| 540 size_t unreleasable_bytes = 0; | 551 size_t unreleasable_bytes = 0; |
| 541 | 552 |
| 542 // Now give memory out to the tiles until we're out, and build | 553 // Now give memory out to the tiles until we're out, and build |
| 543 // the needs-to-be-rasterized queue. | 554 // the needs-to-be-rasterized queue. |
| 544 tiles_that_need_to_be_rasterized_.clear(); | 555 tiles_that_need_to_be_rasterized_.clear(); |
| 545 | 556 |
| 546 // Reset the image decoding list so that we don't mess up with tile | 557 // Reset the image decoding list so that we don't mess up with tile |
| 547 // priorities. Tiles will be added to the image decoding list again | 558 // priorities. Tiles will be added to the image decoding list again |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 std::list<skia::LazyPixelRef*>& pixel_refs = | 749 std::list<skia::LazyPixelRef*>& pixel_refs = |
| 739 (*it)->managed_state().pending_pixel_refs; | 750 (*it)->managed_state().pending_pixel_refs; |
| 740 for (std::list<skia::LazyPixelRef*>::iterator pixel_it = | 751 for (std::list<skia::LazyPixelRef*>::iterator pixel_it = |
| 741 pixel_refs.begin(); pixel_it != pixel_refs.end(); ++pixel_it) { | 752 pixel_refs.begin(); pixel_it != pixel_refs.end(); ++pixel_it) { |
| 742 if (pixel_ref_id == (*pixel_it)->getGenerationID()) { | 753 if (pixel_ref_id == (*pixel_it)->getGenerationID()) { |
| 743 pixel_refs.erase(pixel_it); | 754 pixel_refs.erase(pixel_it); |
| 744 break; | 755 break; |
| 745 } | 756 } |
| 746 } | 757 } |
| 747 } | 758 } |
| 748 | |
| 749 DispatchMoreTasks(); | |
| 750 } | 759 } |
| 751 | 760 |
| 752 scoped_ptr<ResourcePool::Resource> TileManager::PrepareTileForRaster( | 761 scoped_ptr<ResourcePool::Resource> TileManager::PrepareTileForRaster( |
| 753 Tile* tile) { | 762 Tile* tile) { |
| 754 ManagedTileState& managed_tile_state = tile->managed_state(); | 763 ManagedTileState& managed_tile_state = tile->managed_state(); |
| 755 DCHECK(managed_tile_state.can_use_gpu_memory); | 764 DCHECK(managed_tile_state.can_use_gpu_memory); |
| 756 scoped_ptr<ResourcePool::Resource> resource = | 765 scoped_ptr<ResourcePool::Resource> resource = |
| 757 resource_pool_->AcquireResource(tile->tile_size_.size(), tile->format_); | 766 resource_pool_->AcquireResource(tile->tile_size_.size(), tile->format_); |
| 758 resource_pool_->resource_provider()->acquirePixelBuffer(resource->id()); | 767 resource_pool_->resource_provider()->acquirePixelBuffer(resource->id()); |
| 759 | 768 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 // The component order may be bgra if we're uploading bgra pixels to rgba | 836 // The component order may be bgra if we're uploading bgra pixels to rgba |
| 828 // texture. Mark contents as swizzled if image component order is | 837 // texture. Mark contents as swizzled if image component order is |
| 829 // different than texture format. | 838 // different than texture format. |
| 830 managed_tile_state.contents_swizzled = | 839 managed_tile_state.contents_swizzled = |
| 831 !PlatformColor::sameComponentOrder(tile->format_); | 840 !PlatformColor::sameComponentOrder(tile->format_); |
| 832 | 841 |
| 833 // Tile resources can't be freed until upload has completed. | 842 // Tile resources can't be freed until upload has completed. |
| 834 managed_tile_state.can_be_freed = false; | 843 managed_tile_state.can_be_freed = false; |
| 835 | 844 |
| 836 resource_pool_->resource_provider()->beginSetPixels(resource->id()); | 845 resource_pool_->resource_provider()->beginSetPixels(resource->id()); |
| 837 resource_pool_->resource_provider()->shallowFlushIfSupported(); | 846 has_performed_uploads_since_last_flush_ = true; |
| 847 |
| 838 managed_tile_state.resource = resource.Pass(); | 848 managed_tile_state.resource = resource.Pass(); |
| 839 | 849 |
| 840 bytes_pending_set_pixels_ += tile->bytes_consumed_if_allocated(); | 850 bytes_pending_set_pixels_ += tile->bytes_consumed_if_allocated(); |
| 841 DidTileRasterStateChange(tile, SET_PIXELS_STATE); | 851 DidTileRasterStateChange(tile, SET_PIXELS_STATE); |
| 842 tiles_with_pending_set_pixels_.push(tile); | 852 tiles_with_pending_set_pixels_.push(tile); |
| 843 } else { | 853 } else { |
| 844 resource_pool_->resource_provider()->releasePixelBuffer(resource->id()); | 854 resource_pool_->resource_provider()->releasePixelBuffer(resource->id()); |
| 845 resource_pool_->ReleaseResource(resource.Pass()); | 855 resource_pool_->ReleaseResource(resource.Pass()); |
| 846 managed_tile_state.resource_is_being_initialized = false; | 856 managed_tile_state.resource_is_being_initialized = false; |
| 847 DidTileRasterStateChange(tile, IDLE_STATE); | 857 DidTileRasterStateChange(tile, IDLE_STATE); |
| 848 } | 858 } |
| 849 } | 859 } |
| 850 | 860 |
| 851 void TileManager::OnRasterTaskCompleted( | 861 void TileManager::OnRasterTaskCompleted( |
| 852 scoped_refptr<Tile> tile, | 862 scoped_refptr<Tile> tile, |
| 853 scoped_ptr<ResourcePool::Resource> resource, | 863 scoped_ptr<ResourcePool::Resource> resource, |
| 854 int manage_tiles_call_count_when_dispatched) { | 864 int manage_tiles_call_count_when_dispatched) { |
| 855 OnRasterCompleted(tile, resource.Pass(), | 865 OnRasterCompleted(tile, resource.Pass(), |
| 856 manage_tiles_call_count_when_dispatched); | 866 manage_tiles_call_count_when_dispatched); |
| 857 DispatchMoreTasks(); | |
| 858 } | 867 } |
| 859 | 868 |
| 860 void TileManager::DidFinishTileInitialization(Tile* tile) { | 869 void TileManager::DidFinishTileInitialization(Tile* tile) { |
| 861 ManagedTileState& managed_tile_state = tile->managed_state(); | 870 ManagedTileState& managed_tile_state = tile->managed_state(); |
| 862 DCHECK(managed_tile_state.resource); | 871 DCHECK(managed_tile_state.resource); |
| 863 managed_tile_state.resource_is_being_initialized = false; | 872 managed_tile_state.resource_is_being_initialized = false; |
| 864 managed_tile_state.can_be_freed = true; | 873 managed_tile_state.can_be_freed = true; |
| 865 } | 874 } |
| 866 | 875 |
| 867 void TileManager::DidTileRasterStateChange(Tile* tile, TileRasterState state) { | 876 void TileManager::DidTileRasterStateChange(Tile* tile, TileRasterState state) { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 decode_begin_time = base::TimeTicks::Now(); | 976 decode_begin_time = base::TimeTicks::Now(); |
| 968 pixel_ref->Decode(); | 977 pixel_ref->Decode(); |
| 969 if (stats) { | 978 if (stats) { |
| 970 stats->totalDeferredImageDecodeCount++; | 979 stats->totalDeferredImageDecodeCount++; |
| 971 stats->totalDeferredImageDecodeTime += | 980 stats->totalDeferredImageDecodeTime += |
| 972 base::TimeTicks::Now() - decode_begin_time; | 981 base::TimeTicks::Now() - decode_begin_time; |
| 973 } | 982 } |
| 974 } | 983 } |
| 975 | 984 |
| 976 } // namespace cc | 985 } // namespace cc |
| OLD | NEW |