Title: [222653] trunk/Source/WebCore
Revision
222653
Author
[email protected]
Date
2017-09-29 10:50:59 -0700 (Fri, 29 Sep 2017)

Log Message

Add WeakPtr support to RenderObject.
https://bugs.webkit.org/show_bug.cgi?id=177429
<rdar://problem/34625212>

Reviewed by Dean Jackson.

This is in preparation to start using weak pointers extensively in rendering.

No change in functionality.

* loader/SubframeLoader.cpp:
(WebCore::SubframeLoader::loadPlugin):
* page/FrameView.cpp:
(WebCore::FrameView::updateEmbeddedObject):
* rendering/RenderMultiColumnFlow.cpp:
(WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
* rendering/RenderMultiColumnSpannerPlaceholder.h:
* rendering/RenderObject.cpp:
* rendering/RenderObject.h:
(WebCore::RenderObject::createWeakPtr):
* rendering/RenderView.cpp:
(WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
(WebCore::RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator):
* rendering/RenderView.h:
* rendering/RenderWidget.cpp:
(WebCore::RenderWidget::setWidgetGeometry):
(WebCore::RenderWidget::setWidget):
(WebCore::RenderWidget::updateWidgetPosition):
* rendering/RenderWidget.h:
(WebCore::RenderWidget::createWeakPtr): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (222652 => 222653)


--- trunk/Source/WebCore/ChangeLog	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/ChangeLog	2017-09-29 17:50:59 UTC (rev 222653)
@@ -1,3 +1,36 @@
+2017-09-29  Zalan Bujtas  <[email protected]>
+
+        Add WeakPtr support to RenderObject.
+        https://bugs.webkit.org/show_bug.cgi?id=177429
+        <rdar://problem/34625212>
+
+        Reviewed by Dean Jackson.
+
+        This is in preparation to start using weak pointers extensively in rendering.
+
+        No change in functionality.
+
+        * loader/SubframeLoader.cpp:
+        (WebCore::SubframeLoader::loadPlugin):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::updateEmbeddedObject):
+        * rendering/RenderMultiColumnFlow.cpp:
+        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
+        * rendering/RenderMultiColumnSpannerPlaceholder.h:
+        * rendering/RenderObject.cpp:
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::createWeakPtr):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
+        (WebCore::RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator):
+        * rendering/RenderView.h:
+        * rendering/RenderWidget.cpp:
+        (WebCore::RenderWidget::setWidgetGeometry):
+        (WebCore::RenderWidget::setWidget):
+        (WebCore::RenderWidget::updateWidgetPosition):
+        * rendering/RenderWidget.h:
+        (WebCore::RenderWidget::createWeakPtr): Deleted.
+
 2017-09-29  Enrique Ocaña González  <[email protected]>
 
         [GStreamer] Refactor media player to use MediaTime consistently

Modified: trunk/Source/WebCore/loader/SubframeLoader.cpp (222652 => 222653)


--- trunk/Source/WebCore/loader/SubframeLoader.cpp	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/loader/SubframeLoader.cpp	2017-09-29 17:50:59 UTC (rev 222653)
@@ -411,7 +411,7 @@
         loadManually = false;
 #endif
 
-    auto weakRenderer = renderer->createWeakPtr();
+    auto weakRenderer = renderer->createWeakPtr<RenderEmbeddedObject>();
 
     auto widget = m_frame.loader().client().createPlugin(contentSize, pluginElement, url, paramNames, paramValues, mimeType, loadManually);
 

Modified: trunk/Source/WebCore/page/FrameView.cpp (222652 => 222653)


--- trunk/Source/WebCore/page/FrameView.cpp	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/page/FrameView.cpp	2017-09-29 17:50:59 UTC (rev 222653)
@@ -3441,7 +3441,7 @@
         return;
     }
 
-    auto weakRenderer = embeddedObject.createWeakPtr();
+    auto weakRenderer = embeddedObject.createWeakPtr<RenderEmbeddedObject>();
 
     // FIXME: This could turn into a real virtual dispatch if we defined
     // updateWidget(PluginCreationOption) on HTMLElement.

Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp	2017-09-29 17:50:59 UTC (rev 222653)
@@ -438,7 +438,7 @@
             }
             
             ASSERT(!m_spannerMap.get(placeholder.spanner()));
-            m_spannerMap.add(placeholder.spanner(), placeholder.createWeakPtr());
+            m_spannerMap.add(placeholder.spanner(), placeholder.createWeakPtr<RenderMultiColumnSpannerPlaceholder>());
             ASSERT(!placeholder.firstChild()); // There should be no children here, but if there are, we ought to skip them.
             continue;
         }

Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h	2017-09-29 17:50:59 UTC (rev 222653)
@@ -31,8 +31,6 @@
 
 #include "RenderBox.h"
 
-#include <wtf/WeakPtr.h>
-
 namespace WebCore {
 
 class RenderMultiColumnFlow;
@@ -43,7 +41,6 @@
 
     RenderBox* spanner() const { return m_spanner; }
     RenderMultiColumnFlow* fragmentedFlow() const { return m_fragmentedFlow; }
-    WeakPtr<RenderMultiColumnSpannerPlaceholder> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(*this); }
 
 private:
     RenderMultiColumnSpannerPlaceholder(RenderMultiColumnFlow*, RenderBox& spanner, RenderStyle&&);
@@ -55,7 +52,6 @@
 
     RenderBox* m_spanner;
     RenderMultiColumnFlow* m_fragmentedFlow;
-    WeakPtrFactory<RenderMultiColumnSpannerPlaceholder> m_weakPtrFactory;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2017-09-29 17:50:59 UTC (rev 222653)
@@ -97,7 +97,7 @@
 
 struct SameSizeAsRenderObject {
     virtual ~SameSizeAsRenderObject() { } // Allocate vtable pointer.
-    void* pointers[4];
+    void* pointers[5];
 #ifndef NDEBUG
     unsigned m_debugBitfields : 2;
 #endif

Modified: trunk/Source/WebCore/rendering/RenderObject.h (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderObject.h	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2017-09-29 17:50:59 UTC (rev 222653)
@@ -36,6 +36,7 @@
 #include "ScrollAlignment.h"
 #include "StyleImage.h"
 #include "TextAffinity.h"
+#include <wtf/WeakPtr.h>
 
 namespace WebCore {
 
@@ -108,6 +109,9 @@
     explicit RenderObject(Node&);
     virtual ~RenderObject();
 
+    template<typename T>
+    WeakPtr<T> createWeakPtr() { return m_weakFactory.createWeakPtr<T>(*this); }
+
     RenderTheme& theme() const;
 
     virtual const char* renderName() const = 0;
@@ -834,6 +838,8 @@
     RenderObject* m_previous;
     RenderObject* m_next;
 
+    WeakPtrFactory<RenderObject> m_weakFactory;
+
 #ifndef NDEBUG
     bool m_hasAXObject             : 1;
     bool m_setNeedsLayoutForbidden : 1;

Modified: trunk/Source/WebCore/rendering/RenderView.cpp (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderView.cpp	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderView.cpp	2017-09-29 17:50:59 UTC (rev 222653)
@@ -1288,19 +1288,19 @@
     if (!rootRenderView)
         return;
 
-    m_rootView = rootRenderView->createWeakPtr();
-    m_wasAccumulatingRepaintRegion = !!m_rootView->m_accumulatedRepaintRegion;
+    m_wasAccumulatingRepaintRegion = !!rootRenderView->m_accumulatedRepaintRegion;
     if (!m_wasAccumulatingRepaintRegion)
-        m_rootView->m_accumulatedRepaintRegion = std::make_unique<Region>();
+        rootRenderView->m_accumulatedRepaintRegion = std::make_unique<Region>();
+    m_rootView = rootRenderView->createWeakPtr<RenderView>();
 }
 
 RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator()
 {
+    if (m_wasAccumulatingRepaintRegion)
+        return;
     if (!m_rootView)
         return;
-    if (m_wasAccumulatingRepaintRegion)
-        return;
-    m_rootView->flushAccumulatedRepaintRegion();
+    m_rootView.get()->flushAccumulatedRepaintRegion();
 }
 
 unsigned RenderView::pageNumberForBlockProgressionOffset(int offset) const

Modified: trunk/Source/WebCore/rendering/RenderView.h (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderView.h	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderView.h	2017-09-29 17:50:59 UTC (rev 222653)
@@ -233,8 +233,6 @@
         bool m_wasAccumulatingRepaintRegion;
     };
 
-    WeakPtr<RenderView> createWeakPtr() { return m_weakFactory.createWeakPtr(*this); }
-
     void scheduleLazyRepaint(RenderBox&);
     void unscheduleLazyRepaint(RenderBox&);
 
@@ -322,7 +320,6 @@
 private:
     FrameView& m_frameView;
 
-    WeakPtrFactory<RenderView> m_weakFactory;
     RenderObject* m_selectionUnsplitStart { nullptr };
     RenderObject* m_selectionUnsplitEnd { nullptr };
     std::optional<unsigned> m_selectionUnsplitStartPos;

Modified: trunk/Source/WebCore/rendering/RenderWidget.cpp (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderWidget.cpp	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderWidget.cpp	2017-09-29 17:50:59 UTC (rev 222653)
@@ -128,7 +128,7 @@
 
     m_clipRect = clipRect;
 
-    WeakPtr<RenderWidget> weakThis = createWeakPtr();
+    auto weakThis = createWeakPtr<RenderWidget>();
     // These calls *may* cause this renderer to disappear from underneath...
     if (boundsChanged)
         m_widget->setFrameRect(newFrameRect);
@@ -178,7 +178,7 @@
         // widget immediately, but we have to have really been fully constructed.
         if (hasInitializedStyle()) {
             if (!needsLayout()) {
-                WeakPtr<RenderWidget> weakThis = createWeakPtr();
+                auto weakThis = createWeakPtr<RenderWidget>();
                 updateWidgetGeometry();
                 if (!weakThis)
                     return;
@@ -322,7 +322,7 @@
     if (!m_widget)
         return ChildWidgetState::Destroyed;
 
-    WeakPtr<RenderWidget> weakThis = createWeakPtr();
+    auto weakThis = createWeakPtr<RenderWidget>();
     bool widgetSizeChanged = updateWidgetGeometry();
     if (!weakThis || !m_widget)
         return ChildWidgetState::Destroyed;

Modified: trunk/Source/WebCore/rendering/RenderWidget.h (222652 => 222653)


--- trunk/Source/WebCore/rendering/RenderWidget.h	2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderWidget.h	2017-09-29 17:50:59 UTC (rev 222653)
@@ -25,7 +25,6 @@
 #include "OverlapTestRequestClient.h"
 #include "RenderReplaced.h"
 #include "Widget.h"
-#include <wtf/WeakPtr.h>
 
 namespace WebCore {
 
@@ -71,8 +70,6 @@
 
     bool requiresAcceleratedCompositing() const;
 
-    WeakPtr<RenderWidget> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(*this); }
-
     void ref() { ++m_refCount; }
     void deref();
 
@@ -101,7 +98,6 @@
     bool setWidgetGeometry(const LayoutRect&);
     bool updateWidgetGeometry();
 
-    WeakPtrFactory<RenderWidget> m_weakPtrFactory;
     RefPtr<Widget> m_widget;
     IntRect m_clipRect; // The rectangle needs to remain correct after scrolling, so it is stored in content view coordinates, and not clipped to window.
     unsigned m_refCount { 1 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to