Index: cc/trees/property_tree.h |
diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h |
index 10896439072f987cfb54ea841abca1122b156359..a12c969c141d012e38d9cb675c64a8c91dc7c96d 100644 |
--- a/cc/trees/property_tree.h |
+++ b/cc/trees/property_tree.h |
@@ -120,6 +120,7 @@ class CC_EXPORT PropertyTree { |
private: |
std::vector<T> nodes_; |
+ friend class TransformTree; |
bool needs_update_; |
PropertyTrees* property_trees_; |
}; |
@@ -194,6 +195,8 @@ class CC_EXPORT TransformTree final : public PropertyTree<TransformNode> { |
TransformNode* node, |
TransformNode* parent_node); |
+ void set_needs_update(bool needs_update); |
+ |
// A TransformNode's source_to_parent value is used to account for the fact |
// that fixed-position layers are positioned by Blink wrt to their layer tree |
// parent (their "source"), but are parented in the transform tree by their |
@@ -247,12 +250,12 @@ class CC_EXPORT TransformTree final : public PropertyTree<TransformNode> { |
return nodes_affected_by_outer_viewport_bounds_delta_; |
} |
- const gfx::Transform& FromTarget(int node_id, int effect) const; |
+ gfx::Transform FromTarget(int node_id, int effect) const; |
void SetFromTarget(int node_id, const gfx::Transform& transform); |
// TODO(sunxd): Remove target space transforms in cached data when we |
// completely implement computing draw transforms on demand. |
- const gfx::Transform& ToTarget(int node_id, int effect_id) const; |
+ gfx::Transform ToTarget(int node_id, int effect_id) const; |
void SetToTarget(int node_id, const gfx::Transform& transform); |
const gfx::Transform& FromScreen(int node_id) const; |
@@ -517,38 +520,52 @@ struct CombinedAnimationScale { |
}; |
struct DrawTransforms { |
+ // We compute invertibility of a draw transforms lazily. |
+ // Invertible is true if we have not computed the inverse of either to_target |
+ // or from_target, or to_target / from_target is invertible. |
bool invertible; |
ajuma
2016/10/12 20:08:47
Having this be true when we don't know if the tran
sunxd
2016/10/12 21:08:19
Done.
|
+ // From_valid is true if the from_target is already computed directly or |
+ // computed by inverting an invertible to_target. |
+ bool from_valid; |
+ // To_valid is true if to_target stores a valid result, similar to from_valid. |
+ bool to_valid; |
gfx::Transform from_target; |
gfx::Transform to_target; |
DrawTransforms(gfx::Transform from, gfx::Transform to) |
- : invertible(true), from_target(from), to_target(to) {} |
+ : invertible(true), |
+ from_valid(false), |
+ to_valid(false), |
+ from_target(from), |
+ to_target(to) {} |
bool operator==(const DrawTransforms& other) const { |
- return invertible == other.invertible && from_target == other.from_target && |
- to_target == other.to_target; |
+ return from_valid == other.from_valid && to_valid == other.to_valid && |
+ from_target == other.from_target && to_target == other.to_target; |
} |
}; |
struct DrawTransformData { |
int update_number; |
+ int target_id; |
+ |
DrawTransforms transforms; |
// TODO(sunxd): Move screen space transforms here if it can improve |
// performance. |
DrawTransformData() |
- : update_number(-1), transforms(gfx::Transform(), gfx::Transform()) {} |
+ : update_number(-1), |
+ target_id(-1), |
+ transforms(gfx::Transform(), gfx::Transform()) {} |
}; |
struct PropertyTreesCachedData { |
int property_tree_update_number; |
std::vector<AnimationScaleData> animation_scales; |
- mutable std::vector<std::unordered_map<int, DrawTransformData>> |
- draw_transforms; |
+ mutable std::vector<std::vector<DrawTransformData>> draw_transforms; |
PropertyTreesCachedData(); |
~PropertyTreesCachedData(); |
}; |
- |
ajuma
2016/10/12 20:08:47
Nit: this line shouldn't be deleted
sunxd
2016/10/12 21:08:19
Done.
|
class CC_EXPORT PropertyTrees final { |
public: |
PropertyTrees(); |
@@ -588,7 +605,6 @@ class CC_EXPORT PropertyTrees final { |
int sequence_number; |
bool is_main_thread; |
bool is_active; |
- bool verify_transform_tree_calculations; |
void clear(); |
@@ -622,9 +638,17 @@ class CC_EXPORT PropertyTrees final { |
float maximum_animation_scale, |
float starting_animation_scale); |
+ bool GetToTarget(int transform_id, |
+ int effect_id, |
+ gfx::Transform* to_target) const; |
+ bool GetFromTarget(int transform_id, |
+ int effect_id, |
+ gfx::Transform* from_target) const; |
+ |
// GetDrawTransforms may change the value of cached_data_. |
- const DrawTransforms& GetDrawTransforms(int transform_id, |
- int effect_id) const; |
+ DrawTransforms& GetDrawTransforms(int transform_id, int effect_id) const; |
+ DrawTransformData& FetchDrawTransformsDataFromCache(int transform_id, |
ajuma
2016/10/12 20:08:47
Can this be private?
sunxd
2016/10/12 21:08:19
Done.
|
+ int effect_id) const; |
void ResetCachedData(); |
void UpdateCachedNumber(); |