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

Side by Side Diff: cc/tile_manager.cc

Issue 12217105: cc: Check for completed raster tasks at interval. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add missing CC_EXPORT. Created 7 years, 10 months 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 | Annotate | Revision Log
« no previous file with comments | « cc/tile_manager.h ('k') | cc/worker_pool.h » ('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/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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/tile_manager.h ('k') | cc/worker_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698