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

Side by Side Diff: cc/resources/tile_manager.cc

Issue 21159007: cc: Adding support for RGBA_4444 tile textures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: deprecate GLenum format throughout cc Created 7 years, 3 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
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/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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 96
97 return is_active ? EVENTUALLY_AND_ACTIVE_BIN : EVENTUALLY_BIN; 97 return is_active ? EVENTUALLY_AND_ACTIVE_BIN : EVENTUALLY_BIN;
98 } 98 }
99 99
100 // Limit to the number of raster tasks that can be scheduled. 100 // Limit to the number of raster tasks that can be scheduled.
101 // This is high enough to not cause unnecessary scheduling but 101 // This is high enough to not cause unnecessary scheduling but
102 // gives us an insurance that we're not spending a huge amount 102 // gives us an insurance that we're not spending a huge amount
103 // of time scheduling one enormous set of tasks. 103 // of time scheduling one enormous set of tasks.
104 const size_t kMaxRasterTasks = 256u; 104 const size_t kMaxRasterTasks = 256u;
105 105
106 // static
107 cc::ResourceProvider::TextureFormat GetTextureFormat(
108 cc::ResourceProvider* provider,
109 bool use_rgba_4444_tiles) {
110 return use_rgba_4444_tiles ? cc::ResourceProvider::RGBA_4444 :
111 provider->best_texture_format();
112 }
113
106 } // namespace 114 } // namespace
107 115
108 RasterTaskCompletionStats::RasterTaskCompletionStats() 116 RasterTaskCompletionStats::RasterTaskCompletionStats()
109 : completed_count(0u), 117 : completed_count(0u),
110 canceled_count(0u) { 118 canceled_count(0u) {
111 } 119 }
112 120
113 scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue( 121 scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue(
114 const RasterTaskCompletionStats& stats) { 122 const RasterTaskCompletionStats& stats) {
115 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); 123 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
116 state->SetInteger("completed_count", stats.completed_count); 124 state->SetInteger("completed_count", stats.completed_count);
117 state->SetInteger("canceled_count", stats.canceled_count); 125 state->SetInteger("canceled_count", stats.canceled_count);
118 return state.PassAs<base::Value>(); 126 return state.PassAs<base::Value>();
119 } 127 }
120 128
121 // static 129 // static
122 scoped_ptr<TileManager> TileManager::Create( 130 scoped_ptr<TileManager> TileManager::Create(
123 TileManagerClient* client, 131 TileManagerClient* client,
124 ResourceProvider* resource_provider, 132 ResourceProvider* resource_provider,
125 size_t num_raster_threads, 133 size_t num_raster_threads,
126 RenderingStatsInstrumentation* rendering_stats_instrumentation, 134 RenderingStatsInstrumentation* rendering_stats_instrumentation,
127 bool use_map_image, 135 bool use_map_image,
128 size_t max_transfer_buffer_usage_bytes) { 136 size_t max_transfer_buffer_usage_bytes,
137 bool use_rgba_4444_tiles) {
129 return make_scoped_ptr( 138 return make_scoped_ptr(
130 new TileManager(client, 139 new TileManager(client,
131 resource_provider, 140 resource_provider,
132 use_map_image ? 141 use_map_image ?
133 ImageRasterWorkerPool::Create( 142 ImageRasterWorkerPool::Create(
134 resource_provider, num_raster_threads) : 143 resource_provider, num_raster_threads) :
135 PixelBufferRasterWorkerPool::Create( 144 PixelBufferRasterWorkerPool::Create(
136 resource_provider, 145 resource_provider,
137 num_raster_threads, 146 num_raster_threads,
138 max_transfer_buffer_usage_bytes), 147 max_transfer_buffer_usage_bytes,
148 GetTextureFormat(resource_provider,
149 use_rgba_4444_tiles)),
139 num_raster_threads, 150 num_raster_threads,
140 rendering_stats_instrumentation)); 151 rendering_stats_instrumentation,
152 GetTextureFormat(resource_provider,
153 use_rgba_4444_tiles)));
141 } 154 }
142 155
143 TileManager::TileManager( 156 TileManager::TileManager(
144 TileManagerClient* client, 157 TileManagerClient* client,
145 ResourceProvider* resource_provider, 158 ResourceProvider* resource_provider,
146 scoped_ptr<RasterWorkerPool> raster_worker_pool, 159 scoped_ptr<RasterWorkerPool> raster_worker_pool,
147 size_t num_raster_threads, 160 size_t num_raster_threads,
148 RenderingStatsInstrumentation* rendering_stats_instrumentation) 161 RenderingStatsInstrumentation* rendering_stats_instrumentation,
162 ResourceProvider::TextureFormat texture_type)
149 : client_(client), 163 : client_(client),
150 resource_pool_(ResourcePool::Create(resource_provider)), 164 resource_pool_(ResourcePool::Create(resource_provider)),
151 raster_worker_pool_(raster_worker_pool.Pass()), 165 raster_worker_pool_(raster_worker_pool.Pass()),
152 prioritized_tiles_dirty_(false), 166 prioritized_tiles_dirty_(false),
153 all_tiles_that_need_to_be_rasterized_have_memory_(true), 167 all_tiles_that_need_to_be_rasterized_have_memory_(true),
154 all_tiles_required_for_activation_have_memory_(true), 168 all_tiles_required_for_activation_have_memory_(true),
155 bytes_releasable_(0), 169 bytes_releasable_(0),
156 resources_releasable_(0), 170 resources_releasable_(0),
157 ever_exceeded_memory_budget_(false), 171 ever_exceeded_memory_budget_(false),
158 rendering_stats_instrumentation_(rendering_stats_instrumentation), 172 rendering_stats_instrumentation_(rendering_stats_instrumentation),
159 did_initialize_visible_tile_(false) { 173 did_initialize_visible_tile_(false),
174 texture_type_(texture_type) {
160 raster_worker_pool_->SetClient(this); 175 raster_worker_pool_->SetClient(this);
161 } 176 }
162 177
163 TileManager::~TileManager() { 178 TileManager::~TileManager() {
164 // Reset global state and manage. This should cause 179 // Reset global state and manage. This should cause
165 // our memory usage to drop to zero. 180 // our memory usage to drop to zero.
166 global_state_ = GlobalStateThatImpactsTilePriority(); 181 global_state_ = GlobalStateThatImpactsTilePriority();
167 182
168 DCHECK_EQ(0u, tiles_.size()); 183 DCHECK_EQ(0u, tiles_.size());
169 184
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 base::Unretained(pixel_ref))); 730 base::Unretained(pixel_ref)));
716 } 731 }
717 732
718 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) { 733 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) {
719 ManagedTileState& mts = tile->managed_state(); 734 ManagedTileState& mts = tile->managed_state();
720 735
721 scoped_ptr<ResourcePool::Resource> resource = 736 scoped_ptr<ResourcePool::Resource> resource =
722 resource_pool_->AcquireResource( 737 resource_pool_->AcquireResource(
723 tile->tile_size_.size(), 738 tile->tile_size_.size(),
724 raster_worker_pool_->GetResourceFormat()); 739 raster_worker_pool_->GetResourceFormat());
740
725 const Resource* const_resource = resource.get(); 741 const Resource* const_resource = resource.get();
726 742
727 // Create and queue all image decode tasks that this tile depends on. 743 // Create and queue all image decode tasks that this tile depends on.
728 RasterWorkerPool::Task::Set decode_tasks; 744 RasterWorkerPool::Task::Set decode_tasks;
729 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()]; 745 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()];
730 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(), 746 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(),
731 tile->contents_scale(), 747 tile->contents_scale(),
732 tile->picture_pile()); 748 tile->picture_pile());
733 iter; ++iter) { 749 iter; ++iter) {
734 skia::LazyPixelRef* pixel_ref = *iter; 750 skia::LazyPixelRef* pixel_ref = *iter;
(...skipping 23 matching lines...) Expand all
758 mts.resolution, 774 mts.resolution,
759 tile->layer_id(), 775 tile->layer_id(),
760 static_cast<const void *>(tile), 776 static_cast<const void *>(tile),
761 tile->source_frame_number(), 777 tile->source_frame_number(),
762 rendering_stats_instrumentation_, 778 rendering_stats_instrumentation_,
763 base::Bind(&TileManager::OnRasterTaskCompleted, 779 base::Bind(&TileManager::OnRasterTaskCompleted,
764 base::Unretained(this), 780 base::Unretained(this),
765 tile->id(), 781 tile->id(),
766 base::Passed(&resource), 782 base::Passed(&resource),
767 mts.raster_mode), 783 mts.raster_mode),
768 &decode_tasks); 784 &decode_tasks,
785 texture_type_);
769 } 786 }
770 787
771 void TileManager::OnImageDecodeTaskCompleted( 788 void TileManager::OnImageDecodeTaskCompleted(
772 int layer_id, 789 int layer_id,
773 skia::LazyPixelRef* pixel_ref, 790 skia::LazyPixelRef* pixel_ref,
774 bool was_canceled) { 791 bool was_canceled) {
775 // If the task was canceled, we need to clean it up 792 // If the task was canceled, we need to clean it up
776 // from |image_decode_tasks_|. 793 // from |image_decode_tasks_|.
777 if (!was_canceled) 794 if (!was_canceled)
778 return; 795 return;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 bytes_releasable_ += tile->bytes_consumed_if_allocated(); 847 bytes_releasable_ += tile->bytes_consumed_if_allocated();
831 ++resources_releasable_; 848 ++resources_releasable_;
832 } 849 }
833 850
834 FreeUnusedResourcesForTile(tile); 851 FreeUnusedResourcesForTile(tile);
835 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) 852 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
836 did_initialize_visible_tile_ = true; 853 did_initialize_visible_tile_ = true;
837 } 854 }
838 855
839 } // namespace cc 856 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698