| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 ObjectPaintInvalidator_h | 5 #ifndef ObjectPaintInvalidator_h |
| 6 #define ObjectPaintInvalidator_h | 6 #define ObjectPaintInvalidator_h |
| 7 | 7 |
| 8 #include "platform/graphics/PaintInvalidationReason.h" | 8 #include "platform/graphics/PaintInvalidationReason.h" |
| 9 #include "wtf/Allocator.h" | 9 #include "wtf/Allocator.h" |
| 10 | 10 |
| 11 namespace blink { | 11 namespace blink { |
| 12 | 12 |
| 13 class LayoutObject; | 13 class LayoutObject; |
| 14 class LayoutRect; | 14 class LayoutRect; |
| 15 struct PaintInvalidatorContext; | 15 struct PaintInvalidatorContext; |
| 16 | 16 |
| 17 class ObjectPaintInvalidator { | 17 class ObjectPaintInvalidator { |
| 18 STACK_ALLOCATED(); | 18 STACK_ALLOCATED(); |
| 19 public: | 19 public: |
| 20 ObjectPaintInvalidator(const LayoutObject& object, const PaintInvalidatorCon
text& context) | 20 ObjectPaintInvalidator(const LayoutObject& object, const PaintInvalidatorCon
text& context) |
| 21 : m_object(object), m_context(context) { } | 21 : m_object(object), m_context(context) { } |
| 22 | 22 |
| 23 static void objectWillBeDestroyed(const LayoutObject&); | 23 static void objectWillBeDestroyed(const LayoutObject&); |
| 24 | 24 |
| 25 PaintInvalidationReason invalidatePaintIfNeeded() { return invalidatePaintIf
NeededWithComputedReason(computePaintInvalidationReason()); } | 25 PaintInvalidationReason invalidatePaintIfNeeded() { return invalidatePaintIf
NeededWithComputedReason(computePaintInvalidationReason()); } |
| 26 | 26 |
| 27 PaintInvalidationReason computePaintInvalidationReason(); | 27 PaintInvalidationReason computePaintInvalidationReason(); |
| 28 PaintInvalidationReason invalidatePaintIfNeededWithComputedReason(PaintInval
idationReason); | 28 PaintInvalidationReason invalidatePaintIfNeededWithComputedReason(PaintInval
idationReason); |
| 29 | 29 |
| 30 private: | |
| 31 void invalidateSelectionIfNeeded(PaintInvalidationReason); | |
| 32 | |
| 33 // This function tries to minimize the amount of invalidation generated by i
nvalidating the "difference" between | 30 // This function tries to minimize the amount of invalidation generated by i
nvalidating the "difference" between |
| 34 // |m_context.oldBounds| and |m_context.newBounds|. This means invalidating
the union of the previous rectangles | 31 // |m_context.oldBounds| and |m_context.newBounds|. This means invalidating
the union of the previous rectangles |
| 35 // but not their intersection. The use case is when an element only requires
a paint invalidation (which means | 32 // but not their intersection. The use case is when an element only requires
a paint invalidation (which means |
| 36 // that its content didn't change) and its bounds changed but its location d
idn't. | 33 // that its content didn't change) and its bounds changed but its location d
idn't. |
| 37 // If we don't meet the criteria for an incremental paint, the alternative i
s a full paint invalidation. | 34 // If we don't meet the criteria for an incremental paint, the alternative i
s a full paint invalidation. |
| 38 void incrementallyInvalidatePaint(); | 35 // Returns true if any paint invalidation is done. |
| 36 bool incrementallyInvalidatePaint(); |
| 37 |
| 38 private: |
| 39 void invalidateSelectionIfNeeded(PaintInvalidationReason); |
| 39 | 40 |
| 40 // This function generates a full invalidation, which means invalidating bot
h |oldBounds| and |newBounds|. | 41 // This function generates a full invalidation, which means invalidating bot
h |oldBounds| and |newBounds|. |
| 41 // This is the default choice when generating an invalidation, as it is alwa
ys correct, albeit it may force some extra painting. | 42 // This is the default choice when generating an invalidation, as it is alwa
ys correct, albeit it may force some extra painting. |
| 42 void fullyInvalidatePaint(PaintInvalidationReason, const LayoutRect& oldBoun
ds, const LayoutRect& newBounds); | 43 void fullyInvalidatePaint(PaintInvalidationReason, const LayoutRect& oldBoun
ds, const LayoutRect& newBounds); |
| 43 | 44 |
| 44 const LayoutObject& m_object; | 45 const LayoutObject& m_object; |
| 45 const PaintInvalidatorContext& m_context; | 46 const PaintInvalidatorContext& m_context; |
| 46 }; | 47 }; |
| 47 | 48 |
| 48 } // namespace blink | 49 } // namespace blink |
| 49 | 50 |
| 50 #endif | 51 #endif |
| OLD | NEW |