OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 1933 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1944 .combined_maximum_animation_target_scale = maximum_animation_scale; | 1944 .combined_maximum_animation_target_scale = maximum_animation_scale; |
1945 cached_data_.animation_scales[transform_id] | 1945 cached_data_.animation_scales[transform_id] |
1946 .combined_starting_animation_scale = starting_animation_scale; | 1946 .combined_starting_animation_scale = starting_animation_scale; |
1947 cached_data_.animation_scales[transform_id].update_number = | 1947 cached_data_.animation_scales[transform_id].update_number = |
1948 cached_data_.transform_tree_update_number; | 1948 cached_data_.transform_tree_update_number; |
1949 } | 1949 } |
1950 | 1950 |
1951 bool PropertyTrees::GetToTarget(int transform_id, | 1951 bool PropertyTrees::GetToTarget(int transform_id, |
1952 int effect_id, | 1952 int effect_id, |
1953 gfx::Transform* to_target) const { | 1953 gfx::Transform* to_target) const { |
| 1954 if (effect_id == EffectTree::kContentsRootNodeId) { |
| 1955 *to_target = transform_tree.ToScreen(transform_id); |
| 1956 return true; |
| 1957 } |
1954 DrawTransforms& transforms = GetDrawTransforms(transform_id, effect_id); | 1958 DrawTransforms& transforms = GetDrawTransforms(transform_id, effect_id); |
1955 if (transforms.to_valid) { | 1959 if (transforms.to_valid) { |
1956 *to_target = transforms.to_target; | 1960 *to_target = transforms.to_target; |
1957 return true; | 1961 return true; |
1958 } else if (!transforms.might_be_invertible) { | 1962 } else if (!transforms.might_be_invertible) { |
1959 return false; | 1963 return false; |
1960 } else { | 1964 } else { |
1961 transforms.might_be_invertible = | 1965 transforms.might_be_invertible = |
1962 transforms.from_target.GetInverse(to_target); | 1966 transforms.from_target.GetInverse(to_target); |
1963 transforms.to_valid = transforms.might_be_invertible; | 1967 transforms.to_valid = transforms.might_be_invertible; |
1964 transforms.to_target = *to_target; | 1968 transforms.to_target = *to_target; |
1965 return transforms.to_valid; | 1969 return transforms.to_valid; |
1966 } | 1970 } |
1967 } | 1971 } |
1968 | 1972 |
1969 bool PropertyTrees::GetFromTarget(int transform_id, | 1973 bool PropertyTrees::GetFromTarget(int transform_id, |
1970 int effect_id, | 1974 int effect_id, |
1971 gfx::Transform* from_target) const { | 1975 gfx::Transform* from_target) const { |
| 1976 const TransformNode* node = transform_tree.Node(transform_id); |
| 1977 if (node->ancestors_are_invertible && |
| 1978 effect_id == EffectTree::kContentsRootNodeId) { |
| 1979 *from_target = transform_tree.FromScreen(transform_id); |
| 1980 return true; |
| 1981 } |
1972 DrawTransforms& transforms = GetDrawTransforms(transform_id, effect_id); | 1982 DrawTransforms& transforms = GetDrawTransforms(transform_id, effect_id); |
1973 if (transforms.from_valid) { | 1983 if (transforms.from_valid) { |
1974 *from_target = transforms.from_target; | 1984 *from_target = transforms.from_target; |
1975 return true; | 1985 return true; |
1976 } else if (!transforms.might_be_invertible) { | 1986 } else if (!transforms.might_be_invertible) { |
1977 return false; | 1987 return false; |
1978 } else { | 1988 } else { |
1979 transforms.might_be_invertible = | 1989 transforms.might_be_invertible = |
1980 transforms.to_target.GetInverse(from_target); | 1990 transforms.to_target.GetInverse(from_target); |
1981 transforms.from_valid = transforms.might_be_invertible; | 1991 transforms.from_valid = transforms.might_be_invertible; |
(...skipping 15 matching lines...) Expand all Loading... |
1997 } | 2007 } |
1998 } | 2008 } |
1999 // Add an entry to the cache. | 2009 // Add an entry to the cache. |
2000 cached_data_.draw_transforms[transform_id].push_back(DrawTransformData()); | 2010 cached_data_.draw_transforms[transform_id].push_back(DrawTransformData()); |
2001 DrawTransformData& data = cached_data_.draw_transforms[transform_id].back(); | 2011 DrawTransformData& data = cached_data_.draw_transforms[transform_id].back(); |
2002 data.update_number = -1; | 2012 data.update_number = -1; |
2003 data.target_id = dest_id; | 2013 data.target_id = dest_id; |
2004 return data; | 2014 return data; |
2005 } | 2015 } |
2006 | 2016 |
| 2017 ClipRectData* PropertyTrees::FetchClipRectFromCache(int clip_id, |
| 2018 int target_id) { |
| 2019 ClipNode* clip_node = clip_tree.Node(clip_id); |
| 2020 for (auto& data : clip_node->cached_clip_rects) { |
| 2021 if (data.target_id == target_id || data.target_id == -1) |
| 2022 return &data; |
| 2023 } |
| 2024 clip_node->cached_clip_rects.push_back(ClipRectData()); |
| 2025 return &clip_node->cached_clip_rects.back(); |
| 2026 } |
| 2027 |
2007 DrawTransforms& PropertyTrees::GetDrawTransforms(int transform_id, | 2028 DrawTransforms& PropertyTrees::GetDrawTransforms(int transform_id, |
2008 int effect_id) const { | 2029 int effect_id) const { |
2009 const EffectNode* effect_node = effect_tree.Node(effect_id); | 2030 const EffectNode* effect_node = effect_tree.Node(effect_id); |
2010 int dest_id = effect_node->transform_id; | 2031 int dest_id = effect_node->transform_id; |
2011 | 2032 |
2012 DrawTransformData& data = | 2033 DrawTransformData& data = |
2013 FetchDrawTransformsDataFromCache(transform_id, dest_id); | 2034 FetchDrawTransformsDataFromCache(transform_id, dest_id); |
2014 | 2035 |
2015 DCHECK(data.update_number != cached_data_.transform_tree_update_number || | 2036 DCHECK(data.update_number != cached_data_.transform_tree_update_number || |
2016 data.target_id != EffectTree::kInvalidNodeId); | 2037 data.target_id != EffectTree::kInvalidNodeId); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2082 const EffectNode* effect_node = effect_tree.Node(effect_id); | 2103 const EffectNode* effect_node = effect_tree.Node(effect_id); |
2083 | 2104 |
2084 if (effect_node->surface_contents_scale.x() != 0.0 && | 2105 if (effect_node->surface_contents_scale.x() != 0.0 && |
2085 effect_node->surface_contents_scale.y() != 0.0) | 2106 effect_node->surface_contents_scale.y() != 0.0) |
2086 screen_space_transform.Scale(1.0 / effect_node->surface_contents_scale.x(), | 2107 screen_space_transform.Scale(1.0 / effect_node->surface_contents_scale.x(), |
2087 1.0 / effect_node->surface_contents_scale.y()); | 2108 1.0 / effect_node->surface_contents_scale.y()); |
2088 return screen_space_transform; | 2109 return screen_space_transform; |
2089 } | 2110 } |
2090 | 2111 |
2091 } // namespace cc | 2112 } // namespace cc |
OLD | NEW |