Title: [158310] trunk/Source
Revision
158310
Author
akl...@apple.com
Date
2013-10-30 13:40:38 -0700 (Wed, 30 Oct 2013)

Log Message

Let Page::renderTreeSize() be the number of renderers.
<https://webkit.org/b/123518>
<rdar://problem/15348679>

The old metric was "number of bytes allocated in RenderArena" and
that was heading towards obsolescence, fast.

Instead, keep a count of RenderObjects instantiated on RenderView.
While a bit ugly, this lets us move forward with rendering memory
model improvements without breaking features.

Reviewed by Beth Dakin.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (158309 => 158310)


--- trunk/Source/WebCore/ChangeLog	2013-10-30 20:32:27 UTC (rev 158309)
+++ trunk/Source/WebCore/ChangeLog	2013-10-30 20:40:38 UTC (rev 158310)
@@ -1,3 +1,18 @@
+2013-10-30  Andreas Kling  <akl...@apple.com>
+
+        Let Page::renderTreeSize() be the number of renderers.
+        <https://webkit.org/b/123518>
+        <rdar://problem/15348679>
+
+        The old metric was "number of bytes allocated in RenderArena" and
+        that was heading towards obsolescence, fast.
+
+        Instead, keep a count of RenderObjects instantiated on RenderView.
+        While a bit ugly, this lets us move forward with rendering memory
+        model improvements without breaking features.
+
+        Reviewed by Beth Dakin.
+
 2013-10-30  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         WebKit/win/WebKitGraphics.h:void WebDrawText(WebTextRenderInfo*); is never called

Modified: trunk/Source/WebCore/page/Page.cpp (158309 => 158310)


--- trunk/Source/WebCore/page/Page.cpp	2013-10-30 20:32:27 UTC (rev 158309)
+++ trunk/Source/WebCore/page/Page.cpp	2013-10-30 20:40:38 UTC (rev 158310)
@@ -237,16 +237,13 @@
 #endif
 }
 
-ArenaSize Page::renderTreeSize() const
+uint64_t Page::renderTreeSize() const
 {
-    ArenaSize total(0, 0);
+    uint64_t total = 0;
     for (const Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
-        if (!frame->document())
+        if (!frame->document() || !frame->document()->renderView())
             continue;
-        if (RenderArena* arena = frame->document()->renderArena()) {
-            total.treeSize += arena->totalRenderArenaSize();
-            total.allocated += arena->totalRenderArenaAllocatedBytes();
-        }
+        total += frame->document()->renderView()->rendererCount();
     }
     return total;
 }

Modified: trunk/Source/WebCore/page/Page.h (158309 => 158310)


--- trunk/Source/WebCore/page/Page.h	2013-10-30 20:32:27 UTC (rev 158309)
+++ trunk/Source/WebCore/page/Page.h	2013-10-30 20:40:38 UTC (rev 158310)
@@ -103,16 +103,6 @@
 
 float deviceScaleFactor(Frame*);
 
-struct ArenaSize {
-    ArenaSize(size_t treeSize, size_t allocated)
-        : treeSize(treeSize)
-        , allocated(allocated)
-    {
-    }
-    size_t treeSize;
-    size_t allocated;
-};
-
 class Page : public Supplementable<Page> {
     WTF_MAKE_NONCOPYABLE(Page);
     friend class Settings;
@@ -145,7 +135,7 @@
     explicit Page(PageClients&);
     ~Page();
 
-    ArenaSize renderTreeSize() const;
+    uint64_t renderTreeSize() const;
 
     void setNeedsRecalcStyleInAllFrames();
 

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (158309 => 158310)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2013-10-30 20:32:27 UTC (rev 158309)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2013-10-30 20:40:38 UTC (rev 158310)
@@ -113,6 +113,8 @@
 #endif
     , m_bitfields(node)
 {
+    if (!node.isDocumentNode())
+        view().didCreateRenderer();
 #ifndef NDEBUG
     renderObjectCounter.increment();
 #endif
@@ -124,6 +126,7 @@
     ASSERT(!m_hasAXObject);
     renderObjectCounter.decrement();
 #endif
+    view().didDestroyRenderer();
 }
 
 RenderTheme* RenderObject::theme() const

Modified: trunk/Source/WebCore/rendering/RenderView.cpp (158309 => 158310)


--- trunk/Source/WebCore/rendering/RenderView.cpp	2013-10-30 20:32:27 UTC (rev 158309)
+++ trunk/Source/WebCore/rendering/RenderView.cpp	2013-10-30 20:40:38 UTC (rev 158310)
@@ -63,6 +63,7 @@
     , m_selectionEnd(0)
     , m_selectionStartPos(-1)
     , m_selectionEndPos(-1)
+    , m_rendererCount(0)
     , m_maximalOutlineSize(0)
     , m_pageLogicalHeight(0)
     , m_pageLogicalHeightChanged(false)

Modified: trunk/Source/WebCore/rendering/RenderView.h (158309 => 158310)


--- trunk/Source/WebCore/rendering/RenderView.h	2013-10-30 20:32:27 UTC (rev 158309)
+++ trunk/Source/WebCore/rendering/RenderView.h	2013-10-30 20:40:38 UTC (rev 158310)
@@ -230,6 +230,10 @@
     bool hasSoftwareFilters() const { return m_hasSoftwareFilters; }
 #endif
 
+    uint64_t rendererCount() const { return m_rendererCount; }
+    void didCreateRenderer() { ++m_rendererCount; }
+    void didDestroyRenderer() { --m_rendererCount; }
+
 protected:
     virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
     virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const OVERRIDE;
@@ -297,6 +301,8 @@
     int m_selectionStartPos;
     int m_selectionEndPos;
 
+    uint64_t m_rendererCount;
+
     // FIXME: Only used by embedded WebViews inside AppKit NSViews.  Find a way to remove.
     struct LegacyPrinting {
         LegacyPrinting()

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (158309 => 158310)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-10-30 20:32:27 UTC (rev 158309)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-10-30 20:40:38 UTC (rev 158310)
@@ -631,7 +631,7 @@
 {
     if (!m_page)
         return 0;
-    return m_page->renderTreeSize().treeSize;
+    return m_page->renderTreeSize();
 }
 
 void WebPage::setTracksRepaints(bool trackRepaints)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to