| OLD | NEW |
| 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 <cmath> | 8 #include <cmath> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 DCHECK_IMPLIES(raster_source_->IsSolidColor(), | 136 DCHECK_IMPLIES(raster_source_->IsSolidColor(), |
| 137 layer_impl->tilings_->num_tilings() == 0); | 137 layer_impl->tilings_->num_tilings() == 0); |
| 138 | 138 |
| 139 layer_impl->raster_page_scale_ = raster_page_scale_; | 139 layer_impl->raster_page_scale_ = raster_page_scale_; |
| 140 layer_impl->raster_device_scale_ = raster_device_scale_; | 140 layer_impl->raster_device_scale_ = raster_device_scale_; |
| 141 layer_impl->raster_source_scale_ = raster_source_scale_; | 141 layer_impl->raster_source_scale_ = raster_source_scale_; |
| 142 layer_impl->raster_contents_scale_ = raster_contents_scale_; | 142 layer_impl->raster_contents_scale_ = raster_contents_scale_; |
| 143 layer_impl->low_res_raster_contents_scale_ = low_res_raster_contents_scale_; | 143 layer_impl->low_res_raster_contents_scale_ = low_res_raster_contents_scale_; |
| 144 | 144 |
| 145 layer_impl->SanityCheckTilingState(); | 145 layer_impl->SanityCheckTilingState(); |
| 146 | |
| 147 // We always need to push properties. | |
| 148 // See http://crbug.com/303943 | |
| 149 // TODO(danakj): Stop always pushing properties since we don't swap tilings. | |
| 150 needs_push_properties_ = true; | |
| 151 } | 146 } |
| 152 | 147 |
| 153 void PictureLayerImpl::AppendQuads(RenderPass* render_pass, | 148 void PictureLayerImpl::AppendQuads(RenderPass* render_pass, |
| 154 const Occlusion& occlusion_in_content_space, | 149 const Occlusion& occlusion_in_content_space, |
| 155 AppendQuadsData* append_quads_data) { | 150 AppendQuadsData* append_quads_data) { |
| 156 // The bounds and the pile size may differ if the pile wasn't updated (ie. | 151 // The bounds and the pile size may differ if the pile wasn't updated (ie. |
| 157 // PictureLayer::Update didn't happen). In that case the pile will be empty. | 152 // PictureLayer::Update didn't happen). In that case the pile will be empty. |
| 158 DCHECK_IMPLIES(!raster_source_->GetSize().IsEmpty(), | 153 DCHECK_IMPLIES(!raster_source_->GetSize().IsEmpty(), |
| 159 bounds() == raster_source_->GetSize()) | 154 bounds() == raster_source_->GetSize()) |
| 160 << " bounds " << bounds().ToString() << " pile " | 155 << " bounds " << bounds().ToString() << " pile " |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 // access the invalidation through the PictureLayerTilingClient interface. | 550 // access the invalidation through the PictureLayerTilingClient interface. |
| 556 invalidation_.Clear(); | 551 invalidation_.Clear(); |
| 557 invalidation_.Swap(new_invalidation); | 552 invalidation_.Swap(new_invalidation); |
| 558 | 553 |
| 559 bool can_have_tilings = CanHaveTilings(); | 554 bool can_have_tilings = CanHaveTilings(); |
| 560 | 555 |
| 561 // Need to call UpdateTiles again if CanHaveTilings changed. | 556 // Need to call UpdateTiles again if CanHaveTilings changed. |
| 562 if (could_have_tilings != can_have_tilings) | 557 if (could_have_tilings != can_have_tilings) |
| 563 layer_tree_impl()->set_needs_update_draw_properties(); | 558 layer_tree_impl()->set_needs_update_draw_properties(); |
| 564 | 559 |
| 560 // SetNeedsPushProperties when changing the raster source. This shouldn't |
| 561 // imply damage but need to be synced. |
| 562 SetNeedsPushProperties(); |
| 563 |
| 565 if (!can_have_tilings) { | 564 if (!can_have_tilings) { |
| 566 RemoveAllTilings(); | 565 RemoveAllTilings(); |
| 567 return; | 566 return; |
| 568 } | 567 } |
| 569 | 568 |
| 570 // We could do this after doing UpdateTiles, which would avoid doing this for | 569 // We could do this after doing UpdateTiles, which would avoid doing this for |
| 571 // tilings that are going to disappear on the pending tree (if scale changed). | 570 // tilings that are going to disappear on the pending tree (if scale changed). |
| 572 // But that would also be more complicated, so we just do it here for now. | 571 // But that would also be more complicated, so we just do it here for now. |
| 573 tilings_->UpdateTilingsToCurrentRasterSource( | 572 tilings_->UpdateTilingsToCurrentRasterSource( |
| 574 raster_source_, pending_set, invalidation_, MinimumContentsScale(), | 573 raster_source_, pending_set, invalidation_, MinimumContentsScale(), |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 649 TilePriority::PriorityBin PictureLayerImpl::GetMaxTilePriorityBin() const { | 648 TilePriority::PriorityBin PictureLayerImpl::GetMaxTilePriorityBin() const { |
| 650 if (!HasValidTilePriorities()) | 649 if (!HasValidTilePriorities()) |
| 651 return TilePriority::EVENTUALLY; | 650 return TilePriority::EVENTUALLY; |
| 652 return TilePriority::NOW; | 651 return TilePriority::NOW; |
| 653 } | 652 } |
| 654 | 653 |
| 655 bool PictureLayerImpl::RequiresHighResToDraw() const { | 654 bool PictureLayerImpl::RequiresHighResToDraw() const { |
| 656 return layer_tree_impl()->RequiresHighResToDraw(); | 655 return layer_tree_impl()->RequiresHighResToDraw(); |
| 657 } | 656 } |
| 658 | 657 |
| 658 void PictureLayerImpl::TilingLiveRectChanged() { |
| 659 // SetNeedsPushProperties when the live rect changes, as there are new tiles |
| 660 // on the tree. This shouldn't imply damage but need to be synced. |
| 661 SetNeedsPushProperties(); |
| 662 } |
| 663 |
| 659 gfx::Size PictureLayerImpl::CalculateTileSize( | 664 gfx::Size PictureLayerImpl::CalculateTileSize( |
| 660 const gfx::Size& content_bounds) const { | 665 const gfx::Size& content_bounds) const { |
| 661 int max_texture_size = | 666 int max_texture_size = |
| 662 layer_tree_impl()->resource_provider()->max_texture_size(); | 667 layer_tree_impl()->resource_provider()->max_texture_size(); |
| 663 | 668 |
| 664 if (is_mask_) { | 669 if (is_mask_) { |
| 665 // Masks are not tiled, so if we can't cover the whole mask with one tile, | 670 // Masks are not tiled, so if we can't cover the whole mask with one tile, |
| 666 // we shouldn't have such a tiling at all. | 671 // we shouldn't have such a tiling at all. |
| 667 DCHECK_LE(content_bounds.width(), max_texture_size); | 672 DCHECK_LE(content_bounds.width(), max_texture_size); |
| 668 DCHECK_LE(content_bounds.height(), max_texture_size); | 673 DCHECK_LE(content_bounds.height(), max_texture_size); |
| (...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1286 | 1291 |
| 1287 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { | 1292 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { |
| 1288 if (!layer_tree_impl()->IsActiveTree()) | 1293 if (!layer_tree_impl()->IsActiveTree()) |
| 1289 return true; | 1294 return true; |
| 1290 | 1295 |
| 1291 return AllTilesRequiredAreReadyToDraw( | 1296 return AllTilesRequiredAreReadyToDraw( |
| 1292 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); | 1297 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); |
| 1293 } | 1298 } |
| 1294 | 1299 |
| 1295 } // namespace cc | 1300 } // namespace cc |
| OLD | NEW |