| Index: cc/trees/property_tree.h
 | 
| diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h
 | 
| index 4c10be1f56dabe08320eea73c4c3c918a4076ffd..ef47bce9edd1a1bb7938ac7771b895f7d79c64e4 100644
 | 
| --- a/cc/trees/property_tree.h
 | 
| +++ b/cc/trees/property_tree.h
 | 
| @@ -26,13 +26,42 @@ struct CC_EXPORT TransformNodeData {
 | 
|    TransformNodeData();
 | 
|    ~TransformNodeData();
 | 
|  
 | 
| +  // The local transform information is combined to form to_parent (ignoring
 | 
| +  // snapping) as follows:
 | 
| +  //
 | 
| +  //   to_parent = M_post_local * T_scroll * M_local * M_pre_local.
 | 
| +  //
 | 
| +  // The pre/post may seem odd when read LTR, but we multiply our points from
 | 
| +  // the right, so the pre_local matrix affects the result "first". This lines
 | 
| +  // up with the notions of pre/post used in skia and gfx::Transform.
 | 
| +  //
 | 
| +  // TODO(vollick): The values labeled with "will be moved..." take up a lot of
 | 
| +  // space, but are only necessary for animated or scrolled nodes (otherwise
 | 
| +  // we'll just use the baked to_parent). These values will be ultimately stored
 | 
| +  // directly on the transform/scroll display list items when that's possible,
 | 
| +  // or potentially in a scroll tree.
 | 
| +  //
 | 
| +  // TODO(vollick): will be moved when accelerated effects are implemented.
 | 
| +  gfx::Transform pre_local;
 | 
| +  gfx::Transform local;
 | 
| +  gfx::Transform post_local;
 | 
| +
 | 
|    gfx::Transform to_parent;
 | 
|    gfx::Transform from_parent;
 | 
|  
 | 
| +  gfx::Transform to_target;
 | 
| +  gfx::Transform from_target;
 | 
| +
 | 
|    gfx::Transform to_screen;
 | 
|    gfx::Transform from_screen;
 | 
|  
 | 
|    int target_id;
 | 
| +  // This id is used for all content that draws into a render surface associated
 | 
| +  // with this transform node.
 | 
| +  int content_target_id;
 | 
| +
 | 
| +  // TODO(vollick): will be moved when accelerated effects are implemented.
 | 
| +  bool needs_local_transform_update;
 | 
|  
 | 
|    bool is_invertible;
 | 
|    bool ancestors_are_invertible;
 | 
| @@ -41,6 +70,16 @@ struct CC_EXPORT TransformNodeData {
 | 
|    bool to_screen_is_animated;
 | 
|  
 | 
|    bool flattens;
 | 
| +  bool scrolls;
 | 
| +
 | 
| +  bool needs_sublayer_scale;
 | 
| +  // This is used as a fallback when we either cannot adjust raster scale or if
 | 
| +  // the raster scale cannot be extracted from the screen space transform.
 | 
| +  float layer_scale_factor;
 | 
| +  gfx::Vector2dF sublayer_scale;
 | 
| +
 | 
| +  // TODO(vollick): will be moved when accelerated effects are implemented.
 | 
| +  gfx::Vector2dF scroll_offset;
 | 
|  
 | 
|    void set_to_parent(const gfx::Transform& transform) {
 | 
|      to_parent = transform;
 | 
| @@ -105,9 +144,8 @@ class CC_EXPORT TransformTree final : public PropertyTree<TransformNode> {
 | 
|    // aligned with respect to one another.
 | 
|    bool Are2DAxisAligned(int source_id, int dest_id) const;
 | 
|  
 | 
| -  // This recomputes the screen space transform (and its inverse) for the node
 | 
| -  // at |id|.
 | 
| -  void UpdateScreenSpaceTransform(int id);
 | 
| +  // Updates the parent, target, and screen space transforms and snapping.
 | 
| +  void UpdateTransforms(int id);
 | 
|  
 | 
|   private:
 | 
|    // Returns true iff the node at |desc_id| is a descendant of the node at
 | 
| @@ -130,6 +168,16 @@ class CC_EXPORT TransformTree final : public PropertyTree<TransformNode> {
 | 
|    bool CombineInversesBetween(int source_id,
 | 
|                                int dest_id,
 | 
|                                gfx::Transform* transform) const;
 | 
| +
 | 
| +  void UpdateLocalTransform(TransformNode* node);
 | 
| +  void UpdateScreenSpaceTransform(TransformNode* node,
 | 
| +                                  TransformNode* parent_node,
 | 
| +                                  TransformNode* target_node);
 | 
| +  void UpdateSublayerScale(TransformNode* node);
 | 
| +  void UpdateTargetSpaceTransform(TransformNode* node,
 | 
| +                                  TransformNode* target_node);
 | 
| +  void UpdateIsAnimated(TransformNode* node, TransformNode* parent_node);
 | 
| +  void UpdateSnapping(TransformNode* node);
 | 
|  };
 | 
|  
 | 
|  class CC_EXPORT ClipTree final : public PropertyTree<ClipNode> {};
 | 
| 
 |