- 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)