Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 4eba5889a3cc81b31d6948153f0f1533cd44c166..e77dc03fabd602a85a4931310e0d7bfba3203c2d 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -84,6 +84,7 @@ |
#include "platform/TraceEvent.h" |
#include "platform/TracedValue.h" |
#include "platform/geometry/TransformState.h" |
+#include "platform/graphics/FirstPaintInvalidationTracking.h" |
#include "platform/graphics/GraphicsContext.h" |
#include "wtf/RefCountedLeakCounter.h" |
#include "wtf/text/StringBuilder.h" |
@@ -99,6 +100,13 @@ namespace { |
static bool gModifyRenderTreeStructureAnyState = false; |
+typedef WillBeHeapHashSet<RawPtrWillBeWeakMember<const RenderObject> > RenderObjectWeakSet; |
+RenderObjectWeakSet& renderObjectNeverHadPaintInvalidationSet() |
+{ |
+ DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<RenderObjectWeakSet>, set, (adoptPtrWillBeNoop(new RenderObjectWeakSet()))); |
+ return *set; |
+} |
+ |
} // namespace |
using namespace HTMLNames; |
@@ -233,6 +241,9 @@ RenderObject::RenderObject(Node* node) |
#endif |
, m_bitfields(node) |
{ |
+ if (firstPaintInvalidationTrackingEnabled()) |
+ renderObjectNeverHadPaintInvalidationSet().add(this); |
+ |
#ifndef NDEBUG |
renderObjectCounter.increment(); |
#endif |
@@ -241,6 +252,9 @@ RenderObject::RenderObject(Node* node) |
RenderObject::~RenderObject() |
{ |
+ if (firstPaintInvalidationTrackingEnabled()) |
+ renderObjectNeverHadPaintInvalidationSet().remove(this); |
+ |
ASSERT(!m_hasAXObject); |
#if ENABLE(OILPAN) |
ASSERT(m_didCallDestroy); |
@@ -1410,6 +1424,20 @@ void RenderObject::paint(PaintInfo&, const LayoutPoint&) |
{ |
} |
+void RenderObject::setHadPaintInvalidation() |
+{ |
+ if (firstPaintInvalidationTrackingEnabled()) |
+ renderObjectNeverHadPaintInvalidationSet().remove(this); |
+} |
+ |
+bool RenderObject::hadPaintInvalidation() const |
+{ |
+ if (!firstPaintInvalidationTrackingEnabled()) |
+ return true; |
+ |
+ return !renderObjectNeverHadPaintInvalidationSet().contains(this); |
+} |
+ |
const RenderLayerModelObject* RenderObject::containerForPaintInvalidation() const |
{ |
if (!isRooted()) |