| Index: Source/core/rendering/RenderObject.cpp
|
| diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp
|
| index 2772d053cb54e5454e14fc5d323de93a3ff39d7f..8b696c20d161dffec7aa4626ed11f7cfd482f77a 100644
|
| --- a/Source/core/rendering/RenderObject.cpp
|
| +++ b/Source/core/rendering/RenderObject.cpp
|
| @@ -99,6 +99,20 @@ namespace {
|
|
|
| static bool gModifyRenderTreeStructureAnyState = false;
|
|
|
| +bool firstPaintInvalidationTrackingEnabled()
|
| +{
|
| + bool isEnabled;
|
| + TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"), &isEnabled);
|
| + return isEnabled;
|
| +}
|
| +
|
| +typedef WillBeHeapHashSet<RawPtrWillBeWeakMember<const RenderObject> > RenderObjectWeakSet;
|
| +RenderObjectWeakSet& renderObjectNeverHadPaintInvalidationSet()
|
| +{
|
| + DEFINE_STATIC_LOCAL(RenderObjectWeakSet, set, ());
|
| + return set;
|
| +}
|
| +
|
| } // namespace
|
|
|
| using namespace HTMLNames;
|
| @@ -233,6 +247,9 @@ RenderObject::RenderObject(Node* node)
|
| #endif
|
| , m_bitfields(node)
|
| {
|
| + if (firstPaintInvalidationTrackingEnabled())
|
| + renderObjectNeverHadPaintInvalidationSet().add(this);
|
| +
|
| #ifndef NDEBUG
|
| renderObjectCounter.increment();
|
| #endif
|
| @@ -241,6 +258,9 @@ RenderObject::RenderObject(Node* node)
|
|
|
| RenderObject::~RenderObject()
|
| {
|
| + if (firstPaintInvalidationTrackingEnabled())
|
| + renderObjectNeverHadPaintInvalidationSet().remove(this);
|
| +
|
| ASSERT(!m_hasAXObject);
|
| #if ENABLE(OILPAN)
|
| ASSERT(m_didCallDestroy);
|
| @@ -1412,6 +1432,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())
|
|
|