| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 if (PictureLayerImpl* twin_layer = GetPendingOrActiveTwinLayer()) | 721 if (PictureLayerImpl* twin_layer = GetPendingOrActiveTwinLayer()) |
| 722 return &twin_layer->invalidation_; | 722 return &twin_layer->invalidation_; |
| 723 return nullptr; | 723 return nullptr; |
| 724 } | 724 } |
| 725 | 725 |
| 726 const PictureLayerTiling* PictureLayerImpl::GetPendingOrActiveTwinTiling( | 726 const PictureLayerTiling* PictureLayerImpl::GetPendingOrActiveTwinTiling( |
| 727 const PictureLayerTiling* tiling) const { | 727 const PictureLayerTiling* tiling) const { |
| 728 PictureLayerImpl* twin_layer = GetPendingOrActiveTwinLayer(); | 728 PictureLayerImpl* twin_layer = GetPendingOrActiveTwinLayer(); |
| 729 if (!twin_layer) | 729 if (!twin_layer) |
| 730 return nullptr; | 730 return nullptr; |
| 731 const PictureLayerTiling* twin_tiling = twin_layer->tilings_->FindTilingWithSc
aleKey(tiling->contents_scale_key()); | 731 const PictureLayerTiling* twin_tiling = |
| 732 twin_layer->tilings_->FindTilingWithScaleKey( |
| 733 tiling->contents_scale_key()); |
| 732 DCHECK(tiling->raster_transform().translation() == gfx::Vector2dF()); | 734 DCHECK(tiling->raster_transform().translation() == gfx::Vector2dF()); |
| 733 DCHECK(!twin_tiling || twin_tiling->raster_transform().translation() == gfx::V
ector2dF()); | 735 DCHECK(!twin_tiling || |
| 736 twin_tiling->raster_transform().translation() == gfx::Vector2dF()); |
| 734 return twin_tiling; | 737 return twin_tiling; |
| 735 } | 738 } |
| 736 | 739 |
| 737 bool PictureLayerImpl::RequiresHighResToDraw() const { | 740 bool PictureLayerImpl::RequiresHighResToDraw() const { |
| 738 return layer_tree_impl()->RequiresHighResToDraw(); | 741 return layer_tree_impl()->RequiresHighResToDraw(); |
| 739 } | 742 } |
| 740 | 743 |
| 741 gfx::Rect PictureLayerImpl::GetEnclosingRectInTargetSpace() const { | 744 gfx::Rect PictureLayerImpl::GetEnclosingRectInTargetSpace() const { |
| 742 return GetScaledEnclosingRectInTargetSpace(MaximumTilingContentsScale()); | 745 return GetScaledEnclosingRectInTargetSpace(MaximumTilingContentsScale()); |
| 743 } | 746 } |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 880 } | 883 } |
| 881 | 884 |
| 882 void PictureLayerImpl::SetUseTransformedRasterization(bool use) { | 885 void PictureLayerImpl::SetUseTransformedRasterization(bool use) { |
| 883 if (use_transformed_rasterization_ == use) | 886 if (use_transformed_rasterization_ == use) |
| 884 return; | 887 return; |
| 885 | 888 |
| 886 use_transformed_rasterization_ = use; | 889 use_transformed_rasterization_ = use; |
| 887 NoteLayerPropertyChanged(); | 890 NoteLayerPropertyChanged(); |
| 888 } | 891 } |
| 889 | 892 |
| 890 PictureLayerTiling* PictureLayerImpl::AddTiling(const ScaleTranslate2d& contents
_transform) { | 893 PictureLayerTiling* PictureLayerImpl::AddTiling( |
| 894 const ScaleTranslate2d& contents_transform) { |
| 891 DCHECK(CanHaveTilings()); | 895 DCHECK(CanHaveTilings()); |
| 892 DCHECK_GE(contents_transform.scale(), MinimumContentsScale()); | 896 DCHECK_GE(contents_transform.scale(), MinimumContentsScale()); |
| 893 DCHECK_LE(contents_transform.scale(), MaximumContentsScale()); | 897 DCHECK_LE(contents_transform.scale(), MaximumContentsScale()); |
| 894 DCHECK(raster_source_->HasRecordings()); | 898 DCHECK(raster_source_->HasRecordings()); |
| 895 return tilings_->AddTiling(contents_transform, raster_source_); | 899 return tilings_->AddTiling(contents_transform, raster_source_); |
| 896 } | 900 } |
| 897 | 901 |
| 898 void PictureLayerImpl::RemoveAllTilings() { | 902 void PictureLayerImpl::RemoveAllTilings() { |
| 899 tilings_->RemoveAllTilings(); | 903 tilings_->RemoveAllTilings(); |
| 900 // If there are no tilings, then raster scales are no longer meaningful. | 904 // If there are no tilings, then raster scales are no longer meaningful. |
| 901 ResetRasterScale(); | 905 ResetRasterScale(); |
| 902 } | 906 } |
| 903 | 907 |
| 904 void PictureLayerImpl::AddTilingsForRasterScale() { | 908 void PictureLayerImpl::AddTilingsForRasterScale() { |
| 905 // Reset all resolution enums on tilings, we'll be setting new values in this | 909 // Reset all resolution enums on tilings, we'll be setting new values in this |
| 906 // function. | 910 // function. |
| 907 tilings_->MarkAllTilingsNonIdeal(); | 911 tilings_->MarkAllTilingsNonIdeal(); |
| 908 | 912 |
| 909 PictureLayerTiling* high_res = | 913 PictureLayerTiling* high_res = |
| 910 tilings_->FindTilingWithScaleKey(raster_contents_scale_); | 914 tilings_->FindTilingWithScaleKey(raster_contents_scale_); |
| 911 gfx::Vector2dF raster_translation = CalculateRasterTranslation(raster_contents
_scale_); | 915 gfx::Vector2dF raster_translation = |
| 912 if (high_res && high_res->raster_transform().translation() != raster_translati
on) { | 916 CalculateRasterTranslation(raster_contents_scale_); |
| 917 if (high_res && |
| 918 high_res->raster_transform().translation() != raster_translation) { |
| 913 tilings_->Remove(high_res); | 919 tilings_->Remove(high_res); |
| 914 high_res = nullptr; | 920 high_res = nullptr; |
| 915 } | 921 } |
| 916 if (!high_res) { | 922 if (!high_res) { |
| 917 // We always need a high res tiling, so create one if it doesn't exist. | 923 // We always need a high res tiling, so create one if it doesn't exist. |
| 918 high_res = AddTiling(ScaleTranslate2d(raster_contents_scale_, raster_transla
tion)); | 924 high_res = |
| 925 AddTiling(ScaleTranslate2d(raster_contents_scale_, raster_translation)); |
| 919 } else if (high_res->may_contain_low_resolution_tiles()) { | 926 } else if (high_res->may_contain_low_resolution_tiles()) { |
| 920 // If the tiling we find here was LOW_RESOLUTION previously, it may not be | 927 // If the tiling we find here was LOW_RESOLUTION previously, it may not be |
| 921 // fully rastered, so destroy the old tiles. | 928 // fully rastered, so destroy the old tiles. |
| 922 high_res->Reset(); | 929 high_res->Reset(); |
| 923 // Reset the flag now that we'll make it high res, it will have fully | 930 // Reset the flag now that we'll make it high res, it will have fully |
| 924 // rastered content. | 931 // rastered content. |
| 925 high_res->reset_may_contain_low_resolution_tiles(); | 932 high_res->reset_may_contain_low_resolution_tiles(); |
| 926 } | 933 } |
| 927 high_res->set_resolution(HIGH_RESOLUTION); | 934 high_res->set_resolution(HIGH_RESOLUTION); |
| 928 | 935 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1005 tilings_->FindTilingWithScaleKey(low_res_raster_contents_scale_); | 1012 tilings_->FindTilingWithScaleKey(low_res_raster_contents_scale_); |
| 1006 DCHECK(!low_res || low_res->resolution() != HIGH_RESOLUTION); | 1013 DCHECK(!low_res || low_res->resolution() != HIGH_RESOLUTION); |
| 1007 | 1014 |
| 1008 // Only create new low res tilings when the transform is static. This | 1015 // Only create new low res tilings when the transform is static. This |
| 1009 // prevents wastefully creating a paired low res tiling for every new high | 1016 // prevents wastefully creating a paired low res tiling for every new high |
| 1010 // res tiling during a pinch or a CSS animation. | 1017 // res tiling during a pinch or a CSS animation. |
| 1011 bool is_pinching = layer_tree_impl()->PinchGestureActive(); | 1018 bool is_pinching = layer_tree_impl()->PinchGestureActive(); |
| 1012 bool is_animating = draw_properties().screen_space_transform_is_animating; | 1019 bool is_animating = draw_properties().screen_space_transform_is_animating; |
| 1013 if (!is_pinching && !is_animating) { | 1020 if (!is_pinching && !is_animating) { |
| 1014 if (!low_res) | 1021 if (!low_res) |
| 1015 low_res = AddTiling(ScaleTranslate2d(low_res_raster_contents_scale_, gfx::
Vector2dF())); | 1022 low_res = AddTiling( |
| 1023 ScaleTranslate2d(low_res_raster_contents_scale_, gfx::Vector2dF())); |
| 1016 low_res->set_resolution(LOW_RESOLUTION); | 1024 low_res->set_resolution(LOW_RESOLUTION); |
| 1017 } | 1025 } |
| 1018 } | 1026 } |
| 1019 | 1027 |
| 1020 void PictureLayerImpl::RecalculateRasterScales() { | 1028 void PictureLayerImpl::RecalculateRasterScales() { |
| 1021 if (is_directly_composited_image_) { | 1029 if (is_directly_composited_image_) { |
| 1022 if (!raster_source_scale_) | 1030 if (!raster_source_scale_) |
| 1023 raster_source_scale_ = 1.f; | 1031 raster_source_scale_ = 1.f; |
| 1024 | 1032 |
| 1025 float min_scale = MinimumContentsScale(); | 1033 float min_scale = MinimumContentsScale(); |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1389 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { | 1397 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { |
| 1390 return !layer_tree_impl()->IsRecycleTree(); | 1398 return !layer_tree_impl()->IsRecycleTree(); |
| 1391 } | 1399 } |
| 1392 | 1400 |
| 1393 bool PictureLayerImpl::HasValidTilePriorities() const { | 1401 bool PictureLayerImpl::HasValidTilePriorities() const { |
| 1394 return IsOnActiveOrPendingTree() && | 1402 return IsOnActiveOrPendingTree() && |
| 1395 is_drawn_render_surface_layer_list_member(); | 1403 is_drawn_render_surface_layer_list_member(); |
| 1396 } | 1404 } |
| 1397 | 1405 |
| 1398 } // namespace cc | 1406 } // namespace cc |
| OLD | NEW |