Title: [157297] trunk/Source/WebCore
Revision
157297
Author
[email protected]
Date
2013-10-11 02:39:28 -0700 (Fri, 11 Oct 2013)

Log Message

Make RenderLayer not arena-allocated.
<https://webkit.org/b/87523>

Reviewed by Antti Koivisto.

Let RenderLayerModelObject store its RenderLayer in a unique_ptr.
Layers are relatively low-volume objects and this looks neutral
on our performance tests.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (157296 => 157297)


--- trunk/Source/WebCore/ChangeLog	2013-10-11 08:35:36 UTC (rev 157296)
+++ trunk/Source/WebCore/ChangeLog	2013-10-11 09:39:28 UTC (rev 157297)
@@ -1,3 +1,14 @@
+2013-10-11  Andreas Kling  <[email protected]>
+
+        Make RenderLayer not arena-allocated.
+        <https://webkit.org/b/87523>
+
+        Reviewed by Antti Koivisto.
+
+        Let RenderLayerModelObject store its RenderLayer in a unique_ptr.
+        Layers are relatively low-volume objects and this looks neutral
+        on our performance tests.
+
 2013-10-11  Zalan Bujtas  <[email protected]>
 
         REGRESSION (r155607): _javascript_ site does not load visually on panerabread.com

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (157296 => 157297)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2013-10-11 08:35:36 UTC (rev 157296)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2013-10-11 09:39:28 UTC (rev 157297)
@@ -1731,25 +1731,6 @@
     }
 }
 
-void* RenderLayer::operator new(size_t sz, RenderArena& renderArena)
-{
-    return renderArena.allocate(sz);
-}
-
-void RenderLayer::operator delete(void* ptr, size_t sz)
-{
-    // Stash size where destroy can find it.
-    *(size_t *)ptr = sz;
-}
-
-void RenderLayer::destroy(RenderArena& renderArena)
-{
-    delete this;
-
-    // Recover the size left there for us by operator delete and free the memory.
-    renderArena.free(*(size_t *)this, this);
-}
-
 void RenderLayer::addChild(RenderLayer* child, RenderLayer* beforeChild)
 {
     RenderLayer* prevSibling = beforeChild ? beforeChild->previousSibling() : lastChild();

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (157296 => 157297)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2013-10-11 08:35:36 UTC (rev 157296)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2013-10-11 09:39:28 UTC (rev 157297)
@@ -748,13 +748,6 @@
     bool hasBlendMode() const { return false; }
 #endif
 
-    // Overloaded new operator. Derived classes must override operator new
-    // in order to allocate out of the RenderArena.
-    void* operator new(size_t, RenderArena&);
-
-    // Overridden to prevent the normal delete from being called.
-    void operator delete(void*, size_t);
-
 #if USE(ACCELERATED_COMPOSITING)
     bool isComposited() const { return m_backing != 0; }
     bool hasCompositedMask() const;
@@ -887,9 +880,6 @@
 
     IntSize clampScrollOffset(const IntSize&) const;
 
-    // The normal operator new is disallowed on all render objects.
-    void* operator new(size_t) throw();
-
     void setNextSibling(RenderLayer* next) { m_next = next; }
     void setPreviousSibling(RenderLayer* prev) { m_previous = prev; }
     void setParent(RenderLayer* parent);
@@ -1117,9 +1107,6 @@
     friend class RenderLayerCompositor;
     friend class RenderLayerModelObject;
 
-    // Only safe to call from RenderBoxModelObject::destroyLayer(RenderArena&)
-    void destroy(RenderArena&);
-
     LayoutUnit overflowTop() const;
     LayoutUnit overflowBottom() const;
     LayoutUnit overflowLeft() const;

Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp (157296 => 157297)


--- trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp	2013-10-11 08:35:36 UTC (rev 157296)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp	2013-10-11 09:39:28 UTC (rev 157297)
@@ -39,7 +39,6 @@
 
 RenderLayerModelObject::RenderLayerModelObject(Element* element, unsigned baseTypeFlags)
     : RenderElement(element, baseTypeFlags | RenderLayerModelObjectFlag)
-    , m_layer(0)
 {
 }
 
@@ -54,8 +53,7 @@
 {
     ASSERT(!hasLayer()); // Callers should have already called setHasLayer(false)
     ASSERT(m_layer);
-    m_layer->destroy(renderArena());
-    m_layer = 0;
+    m_layer = nullptr;
 }
 
 void RenderLayerModelObject::ensureLayer()
@@ -63,7 +61,7 @@
     if (m_layer)
         return;
 
-    m_layer = new (renderArena()) RenderLayer(*this);
+    m_layer = std::make_unique<RenderLayer>(*this);
     setHasLayer(true);
     m_layer->insertOnlyThisLayer();
 }

Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.h (157296 => 157297)


--- trunk/Source/WebCore/rendering/RenderLayerModelObject.h	2013-10-11 08:35:36 UTC (rev 157296)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.h	2013-10-11 09:39:28 UTC (rev 157297)
@@ -38,7 +38,7 @@
     void destroyLayer();
 
     bool hasSelfPaintingLayer() const;
-    RenderLayer* layer() const { return m_layer; }
+    RenderLayer* layer() const { return m_layer.get(); }
 
     virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle) OVERRIDE;
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OVERRIDE;
@@ -56,7 +56,7 @@
     virtual void willBeDestroyed() OVERRIDE;
 
 private:
-    RenderLayer* m_layer;
+    std::unique_ptr<RenderLayer> m_layer;
 
     // Used to store state between styleWillChange and styleDidChange
     static bool s_wasFloating;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to