| Index: third_party/WebKit/Source/core/layout/PaintInvalidationState.h | 
| diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h | 
| index 196cbf9b3d6af364571960c31cd6a1890073446b..a57194e1313ba012e3de59969f0c5c2c8929f11c 100644 | 
| --- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h | 
| +++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h | 
| @@ -7,6 +7,7 @@ | 
|  | 
| #include "core/CoreExport.h" | 
| #include "platform/geometry/LayoutRect.h" | 
| +#include "platform/graphics/PaintInvalidationReason.h" | 
| #include "platform/transforms/AffineTransform.h" | 
| #include "wtf/Allocator.h" | 
| #include "wtf/Noncopyable.h" | 
| @@ -51,13 +52,17 @@ public: | 
| // local space (border box space for LayoutBoxes). After invalidation of the current object, | 
| // before invalidation of the subtrees, this method must be called to apply clip and scroll offset | 
| // etc. for creating child PaintInvalidationStates. | 
| -    void updateForChildren(); | 
| +    void updateForChildren(PaintInvalidationReason); | 
|  | 
| -    bool forcedSubtreeInvalidationWithinContainer() const { return m_forcedSubtreeInvalidationWithinContainer; } | 
| -    void setForceSubtreeInvalidationWithinContainer() { m_forcedSubtreeInvalidationWithinContainer = true; } | 
| +    bool hasForcedSubtreeInvalidationFlags() const { return m_forcedSubtreeInvalidationFlags; } | 
|  | 
| -    bool forcedSubtreeInvalidationRectUpdateWithinContainer() const { return m_forcedSubtreeInvalidationRectUpdateWithinContainer; } | 
| -    void setForceSubtreeInvalidationRectUpdateWithinContainer() { m_forcedSubtreeInvalidationRectUpdateWithinContainer = true; } | 
| +    bool forcedSubtreeInvalidationCheckingWithinContainer() const { return m_forcedSubtreeInvalidationFlags & InvalidationChecking; } | 
| +    void setForceSubtreeInvalidationCheckingWithinContainer() { m_forcedSubtreeInvalidationFlags |= InvalidationChecking; } | 
| + | 
| +    bool forcedSubtreeFullInvalidationWithinContainer() const { return m_forcedSubtreeInvalidationFlags & FullInvalidation; } | 
| + | 
| +    bool forcedSubtreeInvalidationRectUpdateWithinContainerOnly() const { return m_forcedSubtreeInvalidationFlags == InvalidationRectUpdate; } | 
| +    void setForceSubtreeInvalidationRectUpdateWithinContainer() { m_forcedSubtreeInvalidationFlags |= InvalidationRectUpdate; } | 
|  | 
| const LayoutBoxModelObject& paintInvalidationContainer() const { return *m_paintInvalidationContainer; } | 
|  | 
| @@ -95,8 +100,13 @@ private: | 
|  | 
| const LayoutObject& m_currentObject; | 
|  | 
| -    bool m_forcedSubtreeInvalidationWithinContainer; | 
| -    bool m_forcedSubtreeInvalidationRectUpdateWithinContainer; | 
| +    enum ForcedSubtreeInvalidationFlag { | 
| +        InvalidationChecking = 1 << 0, | 
| +        InvalidationRectUpdate = 1 << 1, | 
| +        FullInvalidation = 1 << 2, | 
| +        FullInvalidationForStackedContents = 1 << 3, | 
| +    }; | 
| +    unsigned m_forcedSubtreeInvalidationFlags; | 
|  | 
| bool m_clipped; | 
| bool m_clippedForAbsolutePosition; | 
|  |