Chromium Code Reviews| 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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 | 42 |
| 43 // Even for really wide viewports, at some point GPU raster should use | 43 // Even for really wide viewports, at some point GPU raster should use |
| 44 // less than 4 tiles to fill the viewport. This is set to 256 as a | 44 // less than 4 tiles to fill the viewport. This is set to 256 as a |
| 45 // sane minimum for now, but we might want to tune this for low-end. | 45 // sane minimum for now, but we might want to tune this for low-end. |
| 46 const int kMinHeightForGpuRasteredTile = 256; | 46 const int kMinHeightForGpuRasteredTile = 256; |
| 47 | 47 |
| 48 // When making odd-sized tiles, round them up to increase the chances | 48 // When making odd-sized tiles, round them up to increase the chances |
| 49 // of using the same tile size. | 49 // of using the same tile size. |
| 50 const int kTileRoundUp = 64; | 50 const int kTileRoundUp = 64; |
| 51 | 51 |
| 52 // The precision value for rounding floating points values (of scale factors), | |
| 53 // to given decimal places so that scale factors which are almost equal (differ | |
| 54 // by some threshold magnitude of floating point epsilon) are considered as | |
| 55 // same. | |
| 56 const int kScalePrecision = 4; | |
| 57 | |
| 58 float RoundToFixedPrecision(float value) { | |
| 59 // Limiting precision 1 <= kScalePrecision <= 8, as floating point precision | |
| 60 // of >= 12 gives different values, 8 on a safer side. | |
| 61 DCHECK(kScalePrecision >= 1 && kScalePrecision <= 8); | |
| 62 | |
| 63 const float factor = pow(10, kScalePrecision); | |
| 64 float integral; | |
| 65 float fractional = std::modf(value, &integral); | |
|
prashant.n
2015/09/01 16:55:25
I tried checking standard way for doing this. Defi
| |
| 66 fractional *= factor; | |
| 67 fractional = std::round(fractional); | |
| 68 fractional /= factor; | |
| 69 return integral + fractional; | |
| 70 } | |
| 71 | |
| 52 } // namespace | 72 } // namespace |
| 53 | 73 |
| 54 namespace cc { | 74 namespace cc { |
| 55 | 75 |
| 56 PictureLayerImpl::PictureLayerImpl( | 76 PictureLayerImpl::PictureLayerImpl( |
| 57 LayerTreeImpl* tree_impl, | 77 LayerTreeImpl* tree_impl, |
| 58 int id, | 78 int id, |
| 59 bool is_mask, | 79 bool is_mask, |
| 60 scoped_refptr<SyncedScrollOffset> scroll_offset) | 80 scoped_refptr<SyncedScrollOffset> scroll_offset) |
| 61 : LayerImpl(tree_impl, id, scroll_offset), | 81 : LayerImpl(tree_impl, id, scroll_offset), |
| (...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 895 return true; | 915 return true; |
| 896 | 916 |
| 897 return false; | 917 return false; |
| 898 } | 918 } |
| 899 | 919 |
| 900 void PictureLayerImpl::RecalculateRasterScales() { | 920 void PictureLayerImpl::RecalculateRasterScales() { |
| 901 float old_raster_contents_scale = raster_contents_scale_; | 921 float old_raster_contents_scale = raster_contents_scale_; |
| 902 float old_raster_page_scale = raster_page_scale_; | 922 float old_raster_page_scale = raster_page_scale_; |
| 903 float old_raster_source_scale = raster_source_scale_; | 923 float old_raster_source_scale = raster_source_scale_; |
| 904 | 924 |
| 925 // Get fixed precision values to avoid creating extra tilings for scales | |
| 926 // which are almost equal. | |
| 905 raster_device_scale_ = ideal_device_scale_; | 927 raster_device_scale_ = ideal_device_scale_; |
| 906 raster_page_scale_ = ideal_page_scale_; | 928 raster_page_scale_ = ideal_page_scale_; |
| 907 raster_source_scale_ = ideal_source_scale_; | 929 raster_source_scale_ = ideal_source_scale_; |
| 908 raster_contents_scale_ = ideal_contents_scale_; | 930 raster_contents_scale_ = RoundToFixedPrecision(ideal_contents_scale_); |
|
prashant.n
2015/09/01 16:55:25
I thought of rounding all raster scales, so that a
| |
| 909 | 931 |
| 910 // If we're not animating, or leaving an animation, and the | 932 // If we're not animating, or leaving an animation, and the |
| 911 // ideal_source_scale_ changes, then things are unpredictable, and we fix | 933 // ideal_source_scale_ changes, then things are unpredictable, and we fix |
| 912 // the raster_source_scale_ in place. | 934 // the raster_source_scale_ in place. |
| 913 if (old_raster_source_scale && | 935 if (old_raster_source_scale && |
| 914 !draw_properties().screen_space_transform_is_animating && | 936 !draw_properties().screen_space_transform_is_animating && |
| 915 !was_screen_space_transform_animating_ && | 937 !was_screen_space_transform_animating_ && |
| 916 old_raster_source_scale != ideal_source_scale_) | 938 old_raster_source_scale != ideal_source_scale_) |
| 917 raster_source_scale_is_fixed_ = true; | 939 raster_source_scale_is_fixed_ = true; |
| 918 | 940 |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1226 | 1248 |
| 1227 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { | 1249 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { |
| 1228 return !layer_tree_impl()->IsRecycleTree(); | 1250 return !layer_tree_impl()->IsRecycleTree(); |
| 1229 } | 1251 } |
| 1230 | 1252 |
| 1231 bool PictureLayerImpl::HasValidTilePriorities() const { | 1253 bool PictureLayerImpl::HasValidTilePriorities() const { |
| 1232 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); | 1254 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); |
| 1233 } | 1255 } |
| 1234 | 1256 |
| 1235 } // namespace cc | 1257 } // namespace cc |
| OLD | NEW |