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

Side by Side Diff: cc/layers/picture_layer_impl.cc

Issue 196343005: cc: Replace recorded region with direct map lookup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 848
849 needs_post_commit_initialization_ = false; 849 needs_post_commit_initialization_ = false;
850 } 850 }
851 851
852 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) { 852 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) {
853 DCHECK(CanHaveTilingWithScale(contents_scale)) << 853 DCHECK(CanHaveTilingWithScale(contents_scale)) <<
854 "contents_scale: " << contents_scale; 854 "contents_scale: " << contents_scale;
855 855
856 PictureLayerTiling* tiling = tilings_->AddTiling(contents_scale); 856 PictureLayerTiling* tiling = tilings_->AddTiling(contents_scale);
857 857
858 const Region& recorded = pile_->recorded_region(); 858 DCHECK(pile_->HasAnyRecordings());
859 DCHECK(!recorded.IsEmpty());
860 859
861 if (twin_layer_ && twin_layer_->should_use_gpu_rasterization() == 860 if (twin_layer_ && twin_layer_->should_use_gpu_rasterization() ==
862 should_use_gpu_rasterization()) 861 should_use_gpu_rasterization())
863 twin_layer_->SyncTiling(tiling); 862 twin_layer_->SyncTiling(tiling);
864 863
865 return tiling; 864 return tiling;
866 } 865 }
867 866
868 void PictureLayerImpl::RemoveTiling(float contents_scale) { 867 void PictureLayerImpl::RemoveTiling(float contents_scale) {
869 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 868 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 low_res_raster_contents_scale_ = 0.f; 1159 low_res_raster_contents_scale_ = 0.f;
1161 1160
1162 // When raster scales aren't valid, don't update tile priorities until 1161 // When raster scales aren't valid, don't update tile priorities until
1163 // this layer has been updated via UpdateDrawProperties. 1162 // this layer has been updated via UpdateDrawProperties.
1164 should_update_tile_priorities_ = false; 1163 should_update_tile_priorities_ = false;
1165 } 1164 }
1166 1165
1167 bool PictureLayerImpl::CanHaveTilings() const { 1166 bool PictureLayerImpl::CanHaveTilings() const {
1168 if (!DrawsContent()) 1167 if (!DrawsContent())
1169 return false; 1168 return false;
1170 if (pile_->recorded_region().IsEmpty()) 1169 if (!pile_->HasAnyRecordings())
1171 return false; 1170 return false;
1172 return true; 1171 return true;
1173 } 1172 }
1174 1173
1175 bool PictureLayerImpl::CanHaveTilingWithScale(float contents_scale) const { 1174 bool PictureLayerImpl::CanHaveTilingWithScale(float contents_scale) const {
1176 if (!CanHaveTilings()) 1175 if (!CanHaveTilings())
1177 return false; 1176 return false;
1178 if (contents_scale < MinimumContentsScale()) 1177 if (contents_scale < MinimumContentsScale())
1179 return false; 1178 return false;
1180 return true; 1179 return true;
(...skipping 24 matching lines...) Expand all
1205 1204
1206 void PictureLayerImpl::AsValueInto(base::DictionaryValue* state) const { 1205 void PictureLayerImpl::AsValueInto(base::DictionaryValue* state) const {
1207 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded(); 1206 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded();
1208 LayerImpl::AsValueInto(state); 1207 LayerImpl::AsValueInto(state);
1209 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); 1208 state->SetDouble("ideal_contents_scale", ideal_contents_scale_);
1210 state->SetDouble("geometry_contents_scale", contents_scale_x()); 1209 state->SetDouble("geometry_contents_scale", contents_scale_x());
1211 state->Set("tilings", tilings_->AsValue().release()); 1210 state->Set("tilings", tilings_->AsValue().release());
1212 state->Set("pictures", pile_->AsValue().release()); 1211 state->Set("pictures", pile_->AsValue().release());
1213 state->Set("invalidation", invalidation_.AsValue().release()); 1212 state->Set("invalidation", invalidation_.AsValue().release());
1214 1213
1215 Region unrecorded_region(gfx::Rect(pile_->size()));
1216 unrecorded_region.Subtract(pile_->recorded_region());
1217 if (!unrecorded_region.IsEmpty())
1218 state->Set("unrecorded_region", unrecorded_region.AsValue().release());
1219
1220 scoped_ptr<base::ListValue> coverage_tiles(new base::ListValue); 1214 scoped_ptr<base::ListValue> coverage_tiles(new base::ListValue);
1221 for (PictureLayerTilingSet::CoverageIterator iter(tilings_.get(), 1215 for (PictureLayerTilingSet::CoverageIterator iter(tilings_.get(),
1222 contents_scale_x(), 1216 contents_scale_x(),
1223 gfx::Rect(content_bounds()), 1217 gfx::Rect(content_bounds()),
1224 ideal_contents_scale_); 1218 ideal_contents_scale_);
1225 iter; 1219 iter;
1226 ++iter) { 1220 ++iter) {
1227 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue); 1221 scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue);
1228 tile_data->Set("geometry_rect", 1222 tile_data->Set("geometry_rect",
1229 MathUtil::AsValue(iter.geometry_rect()).release()); 1223 MathUtil::AsValue(iter.geometry_rect()).release());
1230 if (*iter) 1224 if (*iter)
1231 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release()); 1225 tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release());
1232 1226
1233 coverage_tiles->Append(tile_data.release()); 1227 coverage_tiles->Append(tile_data.release());
1234 } 1228 }
1235 state->Set("coverage_tiles", coverage_tiles.release()); 1229 state->Set("coverage_tiles", coverage_tiles.release());
1236 state->SetBoolean("is_using_lcd_text", is_using_lcd_text_); 1230 state->SetBoolean("is_using_lcd_text", is_using_lcd_text_);
1237 } 1231 }
1238 1232
1239 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { 1233 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const {
1240 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded(); 1234 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded();
1241 return tilings_->GPUMemoryUsageInBytes(); 1235 return tilings_->GPUMemoryUsageInBytes();
1242 } 1236 }
1243 1237
1244 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { 1238 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) {
1245 benchmark->RunOnLayer(this); 1239 benchmark->RunOnLayer(this);
1246 } 1240 }
1247 1241
1248 } // namespace cc 1242 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698