| Index: third_party/WebKit/Source/core/layout/LayoutTable.h | 
| diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.h b/third_party/WebKit/Source/core/layout/LayoutTable.h | 
| index 09ac5911a0a9a7e58e472106b7f2094866f6b5e8..2148c7826fff75c30e0ac0c190561f2046cd6917 100644 | 
| --- a/third_party/WebKit/Source/core/layout/LayoutTable.h | 
| +++ b/third_party/WebKit/Source/core/layout/LayoutTable.h | 
| @@ -29,7 +29,9 @@ | 
| #include "core/CSSPropertyNames.h" | 
| #include "core/CoreExport.h" | 
| #include "core/layout/LayoutBlock.h" | 
| +#include "core/paint/PaintResult.h" | 
| #include "core/style/CollapsedBorderValue.h" | 
| +#include "platform/graphics/paint/CullRect.h" | 
| #include "wtf/Vector.h" | 
| #include <memory> | 
|  | 
| @@ -377,8 +379,7 @@ | 
| LayoutTableCell* cellBefore(const LayoutTableCell*) const; | 
| LayoutTableCell* cellAfter(const LayoutTableCell*) const; | 
|  | 
| -  typedef Vector<CollapsedBorderValue> CollapsedBorderValues; | 
| -  void invalidateCollapsedBorders(); | 
| +  void invalidateCollapsedBorders(PaintInvalidationReason); | 
|  | 
| bool hasSections() const { return m_head || m_foot || m_firstBody; } | 
|  | 
| @@ -407,9 +408,23 @@ | 
|  | 
| void paintMask(const PaintInfo&, const LayoutPoint&) const final; | 
|  | 
| -  const CollapsedBorderValues& collapsedBorders() const { | 
| -    ASSERT(m_collapsedBordersValid); | 
| -    return m_collapsedBorders; | 
| +  struct CollapsedBordersInfo { | 
| +    explicit CollapsedBordersInfo(const Vector<CollapsedBorderValue>& values) | 
| +        : values(std::move(values)) {} | 
| + | 
| +    PaintResult lastPaintResult = FullyPainted; | 
| +    CullRect lastPaintRect; | 
| +    const Vector<CollapsedBorderValue> values; | 
| +  }; | 
| + | 
| +  bool hasCollapsedBorders() const { | 
| +    DCHECK(m_collapsedBordersValid); | 
| +    DCHECK(!m_collapsedBordersInfo || collapseBorders()); | 
| +    return !!m_collapsedBordersInfo; | 
| +  } | 
| +  CollapsedBordersInfo& getCollapsedBordersInfo() const { | 
| +    DCHECK(hasCollapsedBorders()); | 
| +    return *m_collapsedBordersInfo; | 
| } | 
|  | 
| void subtractCaptionRect(LayoutRect&) const; | 
| @@ -552,7 +567,7 @@ | 
| // need to compare a cells border against all the adjoining cells, rows, | 
| // row groups, column, column groups and table. Thus we cache them in this | 
| // field. | 
| -  CollapsedBorderValues m_collapsedBorders; | 
| +  std::unique_ptr<CollapsedBordersInfo> m_collapsedBordersInfo; | 
| bool m_collapsedBordersValid : 1; | 
|  | 
| mutable bool m_hasColElements : 1; | 
|  |