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

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: Switch back to kNumPendingTasksPerWorker, seems good enough for now 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
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 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « cc/tile_manager.h ('k') | cc/worker_pool.h » ('j') | cc/worker_pool.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698