Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/TransformPaintPropertyNode.h

Issue 2571043002: Set a direct compositing reason for 3D transform & will-change property tree nodes (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #ifndef TransformPaintPropertyNode_h 5 #ifndef TransformPaintPropertyNode_h
6 #define TransformPaintPropertyNode_h 6 #define TransformPaintPropertyNode_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "platform/geometry/FloatPoint3D.h" 9 #include "platform/geometry/FloatPoint3D.h"
10 #include "platform/graphics/CompositingReasons.h"
10 #include "platform/transforms/TransformationMatrix.h" 11 #include "platform/transforms/TransformationMatrix.h"
11 #include "wtf/PassRefPtr.h" 12 #include "wtf/PassRefPtr.h"
12 #include "wtf/RefCounted.h" 13 #include "wtf/RefCounted.h"
13 #include "wtf/RefPtr.h" 14 #include "wtf/RefPtr.h"
14 15
15 #include <iosfwd> 16 #include <iosfwd>
16 17
17 namespace blink { 18 namespace blink {
18 19
19 // A transform created by a css property such as "transform" or "perspective" 20 // A transform created by a css property such as "transform" or "perspective"
20 // along with a reference to the parent TransformPaintPropertyNode. 21 // along with a reference to the parent TransformPaintPropertyNode.
21 // 22 //
22 // The transform tree is rooted at a node with no parent. This root node should 23 // The transform tree is rooted at a node with no parent. This root node should
23 // not be modified. 24 // not be modified.
24 class PLATFORM_EXPORT TransformPaintPropertyNode 25 class PLATFORM_EXPORT TransformPaintPropertyNode
25 : public RefCounted<TransformPaintPropertyNode> { 26 : public RefCounted<TransformPaintPropertyNode> {
26 public: 27 public:
27 static TransformPaintPropertyNode* root(); 28 static TransformPaintPropertyNode* root();
28 29
29 static PassRefPtr<TransformPaintPropertyNode> create( 30 static PassRefPtr<TransformPaintPropertyNode> create(
30 PassRefPtr<const TransformPaintPropertyNode> parent, 31 PassRefPtr<const TransformPaintPropertyNode> parent,
31 const TransformationMatrix& matrix, 32 const TransformationMatrix& matrix,
32 const FloatPoint3D& origin, 33 const FloatPoint3D& origin,
33 bool flattensInheritedTransform = false, 34 bool flattensInheritedTransform = false,
34 unsigned renderingContextID = 0) { 35 unsigned renderingContextID = 0,
36 CompositingReasons directCompositingReasons = CompositingReasonNone) {
35 return adoptRef(new TransformPaintPropertyNode( 37 return adoptRef(new TransformPaintPropertyNode(
36 matrix, origin, std::move(parent), flattensInheritedTransform, 38 matrix, origin, std::move(parent), flattensInheritedTransform,
37 renderingContextID)); 39 renderingContextID, directCompositingReasons));
38 } 40 }
39 41
40 void update(PassRefPtr<const TransformPaintPropertyNode> parent, 42 void update(
41 const TransformationMatrix& matrix, 43 PassRefPtr<const TransformPaintPropertyNode> parent,
42 const FloatPoint3D& origin, 44 const TransformationMatrix& matrix,
43 bool flattensInheritedTransform = false, 45 const FloatPoint3D& origin,
44 unsigned renderingContextID = 0) { 46 bool flattensInheritedTransform = false,
47 unsigned renderingContextID = 0,
48 CompositingReasons directCompositingReasons = CompositingReasonNone) {
45 DCHECK(!isRoot()); 49 DCHECK(!isRoot());
46 DCHECK(parent != this); 50 DCHECK(parent != this);
47 m_parent = parent; 51 m_parent = parent;
48 m_matrix = matrix; 52 m_matrix = matrix;
49 m_origin = origin; 53 m_origin = origin;
50 m_flattensInheritedTransform = flattensInheritedTransform; 54 m_flattensInheritedTransform = flattensInheritedTransform;
51 m_renderingContextID = renderingContextID; 55 m_renderingContextID = renderingContextID;
56 m_directCompositingReasons = directCompositingReasons;
52 } 57 }
53 58
54 const TransformationMatrix& matrix() const { return m_matrix; } 59 const TransformationMatrix& matrix() const { return m_matrix; }
55 const FloatPoint3D& origin() const { return m_origin; } 60 const FloatPoint3D& origin() const { return m_origin; }
56 61
57 // Parent transform that this transform is relative to, or nullptr if this 62 // Parent transform that this transform is relative to, or nullptr if this
58 // is the root transform. 63 // is the root transform.
59 const TransformPaintPropertyNode* parent() const { return m_parent.get(); } 64 const TransformPaintPropertyNode* parent() const { return m_parent.get(); }
60 bool isRoot() const { return !m_parent; } 65 bool isRoot() const { return !m_parent; }
61 66
62 // If true, content with this transform node (or its descendant) appears in 67 // If true, content with this transform node (or its descendant) appears in
63 // the plane of its parent. This is implemented by flattening the total 68 // the plane of its parent. This is implemented by flattening the total
64 // accumulated transform from its ancestors. 69 // accumulated transform from its ancestors.
65 bool flattensInheritedTransform() const { 70 bool flattensInheritedTransform() const {
66 return m_flattensInheritedTransform; 71 return m_flattensInheritedTransform;
67 } 72 }
68 73
74 bool hasDirectCompositingReasons() const {
75 return m_directCompositingReasons != CompositingReasonNone;
76 }
77
69 // Content whose transform nodes have a common rendering context ID are 3D 78 // Content whose transform nodes have a common rendering context ID are 3D
70 // sorted. If this is 0, content will not be 3D sorted. 79 // sorted. If this is 0, content will not be 3D sorted.
71 unsigned renderingContextID() const { return m_renderingContextID; } 80 unsigned renderingContextID() const { return m_renderingContextID; }
72 bool hasRenderingContext() const { return m_renderingContextID; } 81 bool hasRenderingContext() const { return m_renderingContextID; }
73 82
74 #if DCHECK_IS_ON() 83 #if DCHECK_IS_ON()
75 // The clone function is used by FindPropertiesNeedingUpdate.h for recording 84 // The clone function is used by FindPropertiesNeedingUpdate.h for recording
76 // a transform node before it has been updated, to later detect changes. 85 // a transform node before it has been updated, to later detect changes.
77 PassRefPtr<TransformPaintPropertyNode> clone() const { 86 PassRefPtr<TransformPaintPropertyNode> clone() const {
78 return adoptRef(new TransformPaintPropertyNode(m_matrix, m_origin, m_parent, 87 return adoptRef(new TransformPaintPropertyNode(
79 m_flattensInheritedTransform, 88 m_matrix, m_origin, m_parent, m_flattensInheritedTransform,
80 m_renderingContextID)); 89 m_renderingContextID, m_directCompositingReasons));
81 } 90 }
82 91
83 // The equality operator is used by FindPropertiesNeedingUpdate.h for checking 92 // The equality operator is used by FindPropertiesNeedingUpdate.h for checking
84 // if a transform node has changed. 93 // if a transform node has changed.
85 bool operator==(const TransformPaintPropertyNode& o) const { 94 bool operator==(const TransformPaintPropertyNode& o) const {
86 return m_matrix == o.m_matrix && m_origin == o.m_origin && 95 return m_matrix == o.m_matrix && m_origin == o.m_origin &&
87 m_parent == o.m_parent && 96 m_parent == o.m_parent &&
88 m_flattensInheritedTransform == o.m_flattensInheritedTransform && 97 m_flattensInheritedTransform == o.m_flattensInheritedTransform &&
89 m_renderingContextID == o.m_renderingContextID; 98 m_renderingContextID == o.m_renderingContextID;
90 } 99 }
91 #endif 100 #endif
92 101
93 private: 102 private:
94 TransformPaintPropertyNode( 103 TransformPaintPropertyNode(
95 const TransformationMatrix& matrix, 104 const TransformationMatrix& matrix,
96 const FloatPoint3D& origin, 105 const FloatPoint3D& origin,
97 PassRefPtr<const TransformPaintPropertyNode> parent, 106 PassRefPtr<const TransformPaintPropertyNode> parent,
98 bool flattensInheritedTransform, 107 bool flattensInheritedTransform,
99 unsigned renderingContextID) 108 unsigned renderingContextID,
109 CompositingReasons directCompositingReasons)
100 : m_matrix(matrix), 110 : m_matrix(matrix),
101 m_origin(origin), 111 m_origin(origin),
102 m_parent(parent), 112 m_parent(parent),
103 m_flattensInheritedTransform(flattensInheritedTransform), 113 m_flattensInheritedTransform(flattensInheritedTransform),
104 m_renderingContextID(renderingContextID) {} 114 m_renderingContextID(renderingContextID),
115 m_directCompositingReasons(directCompositingReasons) {}
105 116
106 TransformationMatrix m_matrix; 117 TransformationMatrix m_matrix;
107 FloatPoint3D m_origin; 118 FloatPoint3D m_origin;
108 RefPtr<const TransformPaintPropertyNode> m_parent; 119 RefPtr<const TransformPaintPropertyNode> m_parent;
109 bool m_flattensInheritedTransform; 120 bool m_flattensInheritedTransform;
110 unsigned m_renderingContextID; 121 unsigned m_renderingContextID;
122 CompositingReasons m_directCompositingReasons;
111 }; 123 };
112 124
113 // Redeclared here to avoid ODR issues. 125 // Redeclared here to avoid ODR issues.
114 // See platform/testing/PaintPrinters.h. 126 // See platform/testing/PaintPrinters.h.
115 void PrintTo(const TransformPaintPropertyNode&, std::ostream*); 127 void PrintTo(const TransformPaintPropertyNode&, std::ostream*);
116 128
117 } // namespace blink 129 } // namespace blink
118 130
119 #endif // TransformPaintPropertyNode_h 131 #endif // TransformPaintPropertyNode_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698