OLD | NEW |
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 UI_COMPOSITOR_PAINT_CONTEXT_H_ | 5 #ifndef UI_COMPOSITOR_PAINT_CONTEXT_H_ |
6 #define UI_COMPOSITOR_PAINT_CONTEXT_H_ | 6 #define UI_COMPOSITOR_PAINT_CONTEXT_H_ |
7 | 7 |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "ui/compositor/compositor_export.h" | 10 #include "ui/compositor/compositor_export.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 // Clone a PaintContext with an additional |offset|. | 49 // Clone a PaintContext with an additional |offset|. |
50 PaintContext CloneWithPaintOffset(const gfx::Vector2d& offset) const { | 50 PaintContext CloneWithPaintOffset(const gfx::Vector2d& offset) const { |
51 return PaintContext(*this, offset); | 51 return PaintContext(*this, offset); |
52 } | 52 } |
53 | 53 |
54 // Clone a PaintContext that has no consideration for invalidation. | 54 // Clone a PaintContext that has no consideration for invalidation. |
55 PaintContext CloneWithoutInvalidation() const { | 55 PaintContext CloneWithoutInvalidation() const { |
56 return PaintContext(canvas_); | 56 return PaintContext(canvas_); |
57 } | 57 } |
58 | 58 |
59 // When true, IsRectInvalid() can be called, otherwise its result would be | 59 // When true, IsRectInvalidated() can be called, otherwise its result would be |
60 // invalid. | 60 // invalid. |
61 bool CanCheckInvalid() const { return !invalidation_.IsEmpty(); } | 61 bool CanCheckInvalidated() const { return !invalidation_.IsEmpty(); } |
62 | |
63 // When true, if a thing is not invalidated it does not need to paint itself. | |
64 // When false, everything should provide an output when painting regardless of | |
65 // being invalidated in order to remain visible. | |
66 bool ShouldEarlyOutOfPaintingWhenValid() const { return !!canvas_; } | |
67 | 62 |
68 // When true, the |bounds| touches an invalidated area, so should be | 63 // When true, the |bounds| touches an invalidated area, so should be |
69 // re-painted. When false, re-painting can be skipped. Bounds should be in | 64 // re-painted. When false, re-painting can be skipped. Bounds should be in |
70 // the local space with offsets up to the painting root in the PaintContext. | 65 // the local space with offsets up to the painting root in the PaintContext. |
71 bool IsRectInvalid(const gfx::Rect& bounds) const { | 66 bool IsRectInvalidated(const gfx::Rect& bounds) const { |
72 DCHECK(CanCheckInvalid()); | 67 DCHECK(CanCheckInvalidated()); |
73 return invalidation_.Intersects(bounds + offset_); | 68 return invalidation_.Intersects(bounds + offset_); |
74 } | 69 } |
75 | 70 |
76 #if DCHECK_IS_ON() | 71 #if DCHECK_IS_ON() |
77 void Visited(void* visited) const { | 72 void Visited(void* visited) const { |
78 if (!root_visited_) | 73 if (!root_visited_) |
79 root_visited_ = visited; | 74 root_visited_ = visited; |
80 } | 75 } |
81 void* RootVisited() const { return root_visited_; } | 76 void* RootVisited() const { return root_visited_; } |
82 const gfx::Vector2d& PaintOffset() const { return offset_; } | 77 const gfx::Vector2d& PaintOffset() const { return offset_; } |
83 #endif | 78 #endif |
84 | 79 |
85 const gfx::Rect& InvalidationForTesting() const { return invalidation_; } | 80 const gfx::Rect& InvalidationForTesting() const { return invalidation_; } |
86 | 81 |
87 private: | 82 private: |
88 // The Recorder classes need access to the internal canvas and friends, but we | 83 // The Recorder classes need access to the internal canvas and friends, but we |
89 // don't want to expose them on this class so that people must go through the | 84 // don't want to expose them on this class so that people must go through the |
90 // recorders to access them. | 85 // recorders to access them. |
91 friend class ClipTransformRecorder; | 86 friend class ClipTransformRecorder; |
92 friend class CompositingRecorder; | 87 friend class CompositingRecorder; |
93 friend class PaintRecorder; | 88 friend class PaintRecorder; |
94 // The Cache class also needs to access the DisplayItemList to append its | |
95 // cache contents. | |
96 friend class PaintCache; | |
97 | 89 |
98 PaintContext& operator=(const PaintContext& other) = delete; | 90 PaintContext& operator=(const PaintContext& other) = delete; |
99 | 91 |
100 // Clone a PaintContext with an additional |offset|. | 92 // Clone a PaintContext with an additional |offset|. |
101 PaintContext(const PaintContext& other, const gfx::Vector2d& offset); | 93 PaintContext(const PaintContext& other, const gfx::Vector2d& offset); |
102 | 94 |
103 gfx::Canvas* canvas_; | 95 gfx::Canvas* canvas_; |
104 cc::DisplayItemList* list_; | 96 cc::DisplayItemList* list_; |
105 scoped_ptr<SkPictureRecorder> recorder_; | 97 scoped_ptr<SkPictureRecorder> recorder_; |
106 // The device scale of the frame being painted. Used to determine which bitmap | 98 // The device scale of the frame being painted. Used to determine which bitmap |
(...skipping 15 matching lines...) Expand all Loading... |
122 mutable void* root_visited_; | 114 mutable void* root_visited_; |
123 // Used to verify that paint recorders are not nested. True while a paint | 115 // Used to verify that paint recorders are not nested. True while a paint |
124 // recorder is active. | 116 // recorder is active. |
125 mutable bool inside_paint_recorder_; | 117 mutable bool inside_paint_recorder_; |
126 #endif | 118 #endif |
127 }; | 119 }; |
128 | 120 |
129 } // namespace ui | 121 } // namespace ui |
130 | 122 |
131 #endif // UI_COMPOSITOR_PAINT_CONTEXT_H_ | 123 #endif // UI_COMPOSITOR_PAINT_CONTEXT_H_ |
OLD | NEW |