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

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

Issue 816543004: Update from https://crrev.com/308996 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_perftest.cc » ('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/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 #include <set> 9 #include <set>
10 10
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 PictureLayerImpl::Pair::~Pair() { 63 PictureLayerImpl::Pair::~Pair() {
64 } 64 }
65 65
66 PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl, 66 PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl,
67 int id, 67 int id,
68 bool is_mask) 68 bool is_mask)
69 : LayerImpl(tree_impl, id), 69 : LayerImpl(tree_impl, id),
70 twin_layer_(nullptr), 70 twin_layer_(nullptr),
71 tilings_(CreatePictureLayerTilingSet()), 71 tilings_(CreatePictureLayerTilingSet()),
72 // TODO(danakj): Can this be null to start?
73 raster_source_(PicturePileImpl::Create()),
74 ideal_page_scale_(0.f), 72 ideal_page_scale_(0.f),
75 ideal_device_scale_(0.f), 73 ideal_device_scale_(0.f),
76 ideal_source_scale_(0.f), 74 ideal_source_scale_(0.f),
77 ideal_contents_scale_(0.f), 75 ideal_contents_scale_(0.f),
78 raster_page_scale_(0.f), 76 raster_page_scale_(0.f),
79 raster_device_scale_(0.f), 77 raster_device_scale_(0.f),
80 raster_source_scale_(0.f), 78 raster_source_scale_(0.f),
81 raster_contents_scale_(0.f), 79 raster_contents_scale_(0.f),
82 low_res_raster_contents_scale_(0.f), 80 low_res_raster_contents_scale_(0.f),
83 raster_source_scale_is_fixed_(false), 81 raster_source_scale_is_fixed_(false),
84 was_screen_space_transform_animating_(false), 82 was_screen_space_transform_animating_(false),
85 needs_post_commit_initialization_(true),
86 should_update_tile_priorities_(false), 83 should_update_tile_priorities_(false),
87 only_used_low_res_last_append_quads_(false), 84 only_used_low_res_last_append_quads_(false),
88 is_mask_(is_mask), 85 is_mask_(is_mask),
89 nearest_neighbor_(false) { 86 nearest_neighbor_(false) {
90 layer_tree_impl()->RegisterPictureLayerImpl(this); 87 layer_tree_impl()->RegisterPictureLayerImpl(this);
91 } 88 }
92 89
93 PictureLayerImpl::~PictureLayerImpl() { 90 PictureLayerImpl::~PictureLayerImpl() {
94 if (twin_layer_) 91 if (twin_layer_)
95 twin_layer_->twin_layer_ = nullptr; 92 twin_layer_->twin_layer_ = nullptr;
(...skipping 21 matching lines...) Expand all
117 const char* PictureLayerImpl::LayerTypeAsString() const { 114 const char* PictureLayerImpl::LayerTypeAsString() const {
118 return "cc::PictureLayerImpl"; 115 return "cc::PictureLayerImpl";
119 } 116 }
120 117
121 scoped_ptr<LayerImpl> PictureLayerImpl::CreateLayerImpl( 118 scoped_ptr<LayerImpl> PictureLayerImpl::CreateLayerImpl(
122 LayerTreeImpl* tree_impl) { 119 LayerTreeImpl* tree_impl) {
123 return PictureLayerImpl::Create(tree_impl, id(), is_mask_); 120 return PictureLayerImpl::Create(tree_impl, id(), is_mask_);
124 } 121 }
125 122
126 void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) { 123 void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) {
127 // It's possible this layer was never drawn or updated (e.g. because it was
128 // a descendant of an opacity 0 layer).
129 DoPostCommitInitializationIfNeeded();
130 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer); 124 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer);
131 DCHECK_EQ(layer_impl->is_mask_, is_mask_); 125 DCHECK_EQ(layer_impl->is_mask_, is_mask_);
132 126
133 LayerImpl::PushPropertiesTo(base_layer); 127 LayerImpl::PushPropertiesTo(base_layer);
134 128
135 // Twin relationships should never change once established. 129 // Twin relationships should never change once established.
136 DCHECK_IMPLIES(twin_layer_, twin_layer_ == layer_impl); 130 DCHECK_IMPLIES(twin_layer_, twin_layer_ == layer_impl);
137 DCHECK_IMPLIES(twin_layer_, layer_impl->twin_layer_ == this); 131 DCHECK_IMPLIES(twin_layer_, layer_impl->twin_layer_ == this);
138 // The twin relationship does not need to exist before the first 132 // The twin relationship does not need to exist before the first
139 // PushPropertiesTo from pending to active layer since before that the active 133 // PushPropertiesTo from pending to active layer since before that the active
(...skipping 19 matching lines...) Expand all
159 layer_impl->tilings_->num_tilings() == 0); 153 layer_impl->tilings_->num_tilings() == 0);
160 154
161 layer_impl->raster_page_scale_ = raster_page_scale_; 155 layer_impl->raster_page_scale_ = raster_page_scale_;
162 layer_impl->raster_device_scale_ = raster_device_scale_; 156 layer_impl->raster_device_scale_ = raster_device_scale_;
163 layer_impl->raster_source_scale_ = raster_source_scale_; 157 layer_impl->raster_source_scale_ = raster_source_scale_;
164 layer_impl->raster_contents_scale_ = raster_contents_scale_; 158 layer_impl->raster_contents_scale_ = raster_contents_scale_;
165 layer_impl->low_res_raster_contents_scale_ = low_res_raster_contents_scale_; 159 layer_impl->low_res_raster_contents_scale_ = low_res_raster_contents_scale_;
166 160
167 layer_impl->SanityCheckTilingState(); 161 layer_impl->SanityCheckTilingState();
168 162
169 layer_impl->needs_post_commit_initialization_ = false;
170 needs_post_commit_initialization_ = true;
171
172 // We always need to push properties. 163 // We always need to push properties.
173 // See http://crbug.com/303943 164 // See http://crbug.com/303943
174 // TODO(danakj): Stop always pushing properties since we don't swap tilings. 165 // TODO(danakj): Stop always pushing properties since we don't swap tilings.
175 needs_push_properties_ = true; 166 needs_push_properties_ = true;
176 } 167 }
177 168
178 void PictureLayerImpl::AppendQuads(RenderPass* render_pass, 169 void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
179 const Occlusion& occlusion_in_content_space, 170 const Occlusion& occlusion_in_content_space,
180 AppendQuadsData* append_quads_data) { 171 AppendQuadsData* append_quads_data) {
181 DCHECK(!needs_post_commit_initialization_);
182 // The bounds and the pile size may differ if the pile wasn't updated (ie. 172 // The bounds and the pile size may differ if the pile wasn't updated (ie.
183 // PictureLayer::Update didn't happen). In that case the pile will be empty. 173 // PictureLayer::Update didn't happen). In that case the pile will be empty.
184 DCHECK_IMPLIES(!raster_source_->GetSize().IsEmpty(), 174 DCHECK_IMPLIES(!raster_source_->GetSize().IsEmpty(),
185 bounds() == raster_source_->GetSize()) 175 bounds() == raster_source_->GetSize())
186 << " bounds " << bounds().ToString() << " pile " 176 << " bounds " << bounds().ToString() << " pile "
187 << raster_source_->GetSize().ToString(); 177 << raster_source_->GetSize().ToString();
188 178
189 SharedQuadState* shared_quad_state = 179 SharedQuadState* shared_quad_state =
190 render_pass->CreateAndAppendSharedQuadState(); 180 render_pass->CreateAndAppendSharedQuadState();
191 181
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 // better scheme would be to maintain a tighter visible_content_rect for the 446 // better scheme would be to maintain a tighter visible_content_rect for the
457 // finer tilings. 447 // finer tilings.
458 CleanUpTilingsOnActiveLayer(seen_tilings); 448 CleanUpTilingsOnActiveLayer(seen_tilings);
459 } 449 }
460 450
461 void PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space, 451 void PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
462 bool resourceless_software_draw) { 452 bool resourceless_software_draw) {
463 DCHECK_EQ(1.f, contents_scale_x()); 453 DCHECK_EQ(1.f, contents_scale_x());
464 DCHECK_EQ(1.f, contents_scale_y()); 454 DCHECK_EQ(1.f, contents_scale_y());
465 455
466 DoPostCommitInitializationIfNeeded();
467
468 if (!resourceless_software_draw) { 456 if (!resourceless_software_draw) {
469 visible_rect_for_tile_priority_ = visible_content_rect(); 457 visible_rect_for_tile_priority_ = visible_content_rect();
470 } 458 }
471 459
472 if (!CanHaveTilings()) { 460 if (!CanHaveTilings()) {
473 ideal_page_scale_ = 0.f; 461 ideal_page_scale_ = 0.f;
474 ideal_device_scale_ = 0.f; 462 ideal_device_scale_ = 0.f;
475 ideal_contents_scale_ = 0.f; 463 ideal_contents_scale_ = 0.f;
476 ideal_source_scale_ = 0.f; 464 ideal_source_scale_ = 0.f;
477 SanityCheckTilingState(); 465 SanityCheckTilingState();
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 scoped_refptr<RasterSource> raster_source, 566 scoped_refptr<RasterSource> raster_source,
579 Region* new_invalidation, 567 Region* new_invalidation,
580 const PictureLayerTilingSet* pending_set) { 568 const PictureLayerTilingSet* pending_set) {
581 // The bounds and the pile size may differ if the pile wasn't updated (ie. 569 // The bounds and the pile size may differ if the pile wasn't updated (ie.
582 // PictureLayer::Update didn't happen). In that case the pile will be empty. 570 // PictureLayer::Update didn't happen). In that case the pile will be empty.
583 DCHECK_IMPLIES(!raster_source->GetSize().IsEmpty(), 571 DCHECK_IMPLIES(!raster_source->GetSize().IsEmpty(),
584 bounds() == raster_source->GetSize()) 572 bounds() == raster_source->GetSize())
585 << " bounds " << bounds().ToString() << " pile " 573 << " bounds " << bounds().ToString() << " pile "
586 << raster_source->GetSize().ToString(); 574 << raster_source->GetSize().ToString();
587 575
588 bool could_have_tilings = CanHaveTilings(); 576 // The |raster_source_| is initially null, so have to check for that for the
577 // first frame.
578 bool could_have_tilings = raster_source_.get() && CanHaveTilings();
589 raster_source_.swap(raster_source); 579 raster_source_.swap(raster_source);
590 580
591 // The |new_invalidation| must be cleared before updating tilings since they 581 // The |new_invalidation| must be cleared before updating tilings since they
592 // access the invalidation through the PictureLayerTilingClient interface. 582 // access the invalidation through the PictureLayerTilingClient interface.
593 invalidation_.Clear(); 583 invalidation_.Clear();
594 invalidation_.Swap(new_invalidation); 584 invalidation_.Swap(new_invalidation);
595 585
596 bool can_have_tilings = CanHaveTilings(); 586 bool can_have_tilings = CanHaveTilings();
597 587
598 // Need to call UpdateTiles again if CanHaveTilings changed. 588 // Need to call UpdateTiles again if CanHaveTilings changed.
599 if (could_have_tilings != can_have_tilings) 589 if (could_have_tilings != can_have_tilings)
600 layer_tree_impl()->set_needs_update_draw_properties(); 590 layer_tree_impl()->set_needs_update_draw_properties();
601 591
602 if (!can_have_tilings) { 592 if (!can_have_tilings) {
603 RemoveAllTilings(); 593 RemoveAllTilings();
604 return; 594 return;
605 } 595 }
606 596
607 // We could do this after doing UpdateTiles, which would avoid doing this for 597 // We could do this after doing UpdateTiles, which would avoid doing this for
608 // tilings that are going to disappear on the pending tree (if scale changed). 598 // tilings that are going to disappear on the pending tree (if scale changed).
609 // But that would also be more complicated, so we just do it here for now. 599 // But that would also be more complicated, so we just do it here for now.
610 tilings_->UpdateTilingsToCurrentRasterSource( 600 tilings_->UpdateTilingsToCurrentRasterSource(
611 raster_source_.get(), pending_set, raster_source_->GetSize(), 601 raster_source_.get(), pending_set, invalidation_, MinimumContentsScale());
612 invalidation_, MinimumContentsScale());
613 } 602 }
614 603
615 void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) { 604 void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) {
616 if (layer_tree_impl()->IsActiveTree()) { 605 if (layer_tree_impl()->IsActiveTree()) {
617 gfx::RectF layer_damage_rect = 606 gfx::RectF layer_damage_rect =
618 gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale()); 607 gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale());
619 AddDamageRect(layer_damage_rect); 608 AddDamageRect(layer_damage_rect);
620 } 609 }
621 } 610 }
622 611
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 } 805 }
817 806
818 void PictureLayerImpl::SetNearestNeighbor(bool nearest_neighbor) { 807 void PictureLayerImpl::SetNearestNeighbor(bool nearest_neighbor) {
819 if (nearest_neighbor_ == nearest_neighbor) 808 if (nearest_neighbor_ == nearest_neighbor)
820 return; 809 return;
821 810
822 nearest_neighbor_ = nearest_neighbor; 811 nearest_neighbor_ = nearest_neighbor;
823 NoteLayerPropertyChanged(); 812 NoteLayerPropertyChanged();
824 } 813 }
825 814
826 void PictureLayerImpl::DoPostCommitInitialization() {
827 // TODO(danakj): Remove this.
828 DCHECK(needs_post_commit_initialization_);
829 DCHECK(layer_tree_impl()->IsPendingTree());
830 needs_post_commit_initialization_ = false;
831 }
832
833 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) { 815 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) {
834 DCHECK(CanHaveTilingWithScale(contents_scale)) << 816 DCHECK(CanHaveTilingWithScale(contents_scale)) <<
835 "contents_scale: " << contents_scale; 817 "contents_scale: " << contents_scale;
836 818
837 PictureLayerTiling* tiling = 819 PictureLayerTiling* tiling =
838 tilings_->AddTiling(contents_scale, raster_source_->GetSize()); 820 tilings_->AddTiling(contents_scale, raster_source_->GetSize());
839 821
840 DCHECK(raster_source_->HasRecordings()); 822 DCHECK(raster_source_->HasRecordings());
841 823
842 return tiling; 824 return tiling;
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 } 1179 }
1198 1180
1199 void PictureLayerImpl::GetAllTilesForTracing( 1181 void PictureLayerImpl::GetAllTilesForTracing(
1200 std::set<const Tile*>* tiles) const { 1182 std::set<const Tile*>* tiles) const {
1201 if (!tilings_) 1183 if (!tilings_)
1202 return; 1184 return;
1203 tilings_->GetAllTilesForTracing(tiles); 1185 tilings_->GetAllTilesForTracing(tiles);
1204 } 1186 }
1205 1187
1206 void PictureLayerImpl::AsValueInto(base::debug::TracedValue* state) const { 1188 void PictureLayerImpl::AsValueInto(base::debug::TracedValue* state) const {
1207 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded();
1208 LayerImpl::AsValueInto(state); 1189 LayerImpl::AsValueInto(state);
1209 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); 1190 state->SetDouble("ideal_contents_scale", ideal_contents_scale_);
1210 state->SetDouble("geometry_contents_scale", MaximumTilingContentsScale()); 1191 state->SetDouble("geometry_contents_scale", MaximumTilingContentsScale());
1211 state->BeginArray("tilings"); 1192 state->BeginArray("tilings");
1212 tilings_->AsValueInto(state); 1193 tilings_->AsValueInto(state);
1213 state->EndArray(); 1194 state->EndArray();
1214 1195
1215 state->BeginArray("tile_priority_rect"); 1196 state->BeginArray("tile_priority_rect");
1216 MathUtil::AddToTracedValue(GetViewportForTilePriorityInContentSpace(), state); 1197 MathUtil::AddToTracedValue(GetViewportForTilePriorityInContentSpace(), state);
1217 state->EndArray(); 1198 state->EndArray();
(...skipping 23 matching lines...) Expand all
1241 1222
1242 if (*iter) 1223 if (*iter)
1243 TracedValue::SetIDRef(*iter, state, "tile"); 1224 TracedValue::SetIDRef(*iter, state, "tile");
1244 1225
1245 state->EndDictionary(); 1226 state->EndDictionary();
1246 } 1227 }
1247 state->EndArray(); 1228 state->EndArray();
1248 } 1229 }
1249 1230
1250 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { 1231 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const {
1251 const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded();
1252 return tilings_->GPUMemoryUsageInBytes(); 1232 return tilings_->GPUMemoryUsageInBytes();
1253 } 1233 }
1254 1234
1255 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { 1235 void PictureLayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) {
1256 benchmark->RunOnLayer(this); 1236 benchmark->RunOnLayer(this);
1257 } 1237 }
1258 1238
1259 WhichTree PictureLayerImpl::GetTree() const { 1239 WhichTree PictureLayerImpl::GetTree() const {
1260 return layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; 1240 return layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
1261 } 1241 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1326 1306
1327 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { 1307 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const {
1328 if (!layer_tree_impl()->IsActiveTree()) 1308 if (!layer_tree_impl()->IsActiveTree())
1329 return true; 1309 return true;
1330 1310
1331 return AllTilesRequiredAreReadyToDraw( 1311 return AllTilesRequiredAreReadyToDraw(
1332 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); 1312 &PictureLayerTiling::IsTileRequiredForDrawIfVisible);
1333 } 1313 }
1334 1314
1335 } // namespace cc 1315 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698