https://bugs.webkit.org/show_bug.cgi?id=61700
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 29 May 2011 19:00:11 +0000 (19:00 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 29 May 2011 19:00:11 +0000 (19:00 +0000)
Need WebKit2 API to get the size of the render tree
-and corresponding-
<rdar://problem/9512733>

Patch by Beth Dakin <bdakin@apple.com> on 2011-05-29
Reviewed by Darin Adler.

New member variable on RenderArena keeps track of the current amount of memory
allocated in the arena. The new client function sends this piece of data to
WebKit.
* page/ChromeClient.h:
(WebCore::ChromeClient::setRenderTreeSize):
* page/FrameView.cpp:
(WebCore::FrameView::performPostLayoutTasks):
* rendering/RenderArena.cpp:
(WebCore::RenderArena::RenderArena):
(WebCore::RenderArena::allocate):
(WebCore::RenderArena::free):
* rendering/RenderArena.h:
(WebCore::RenderArena::totalRenderArenaSize):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@87639 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/page/ChromeClient.h
Source/WebCore/page/FrameView.cpp
Source/WebCore/rendering/RenderArena.cpp
Source/WebCore/rendering/RenderArena.h

index 2a473e8..ae76a6d 100644 (file)
@@ -1,3 +1,26 @@
+2011-05-29  Beth Dakin  <bdakin@apple.com>
+
+        Reviewed by Darin Adler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=61700
+        Need WebKit2 API to get the size of the render tree
+        -and corresponding-
+        <rdar://problem/9512733>
+
+        New member variable on RenderArena keeps track of the current amount of memory 
+        allocated in the arena. The new client function sends this piece of data to 
+        WebKit.
+        * page/ChromeClient.h:
+        (WebCore::ChromeClient::setRenderTreeSize):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::performPostLayoutTasks):
+        * rendering/RenderArena.cpp:
+        (WebCore::RenderArena::RenderArena):
+        (WebCore::RenderArena::allocate):
+        (WebCore::RenderArena::free):
+        * rendering/RenderArena.h:
+        (WebCore::RenderArena::totalRenderArenaSize):
+
 2011-05-29  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r87566.
index d636fe4..1e4396b 100644 (file)
@@ -324,6 +324,8 @@ namespace WebCore {
         virtual void willRunModalDialogDuringPageDismissal(const DialogType&) const { }
 
         virtual void numWheelEventHandlersChanged(unsigned) = 0;
+
+        virtual void setRenderTreeSize(size_t) { }
         
     protected:
         virtual ~ChromeClient() { }
index 4f0a226..375c286 100644 (file)
@@ -50,6 +50,7 @@
 #include "HTMLPlugInImageElement.h"
 #include "InspectorInstrumentation.h"
 #include "OverflowEvent.h"
+#include "RenderArena.h"
 #include "RenderEmbeddedObject.h"
 #include "RenderFullScreen.h"
 #include "RenderLayer.h"
@@ -2061,6 +2062,11 @@ void FrameView::performPostLayoutTasks()
         m_lastZoomFactor = currentZoomFactor;
         if (resized)
             m_frame->eventHandler()->sendResizeEvent();
+
+        if (Page* page = m_frame->page()) {
+            if (m_frame->page()->mainFrame() == m_frame)
+                page->chrome()->client()->setRenderTreeSize(m_frame->document()->renderArena()->totalRenderArenaSize());
+        }
     }
 }
 
index e15101f..8b12719 100644 (file)
@@ -66,6 +66,8 @@ RenderArena::RenderArena(unsigned arenaSize)
 
     // Zero out the recyclers array
     memset(m_recyclers, 0, sizeof(m_recyclers));
+
+    m_totalSize = 0;
 }
 
 RenderArena::~RenderArena()
@@ -75,6 +77,8 @@ RenderArena::~RenderArena()
 
 void* RenderArena::allocate(size_t size)
 {
+    m_totalSize += size;
+
 #ifndef NDEBUG
     // Use standard malloc so that memory debugging tools work.
     ASSERT(this);
@@ -113,6 +117,8 @@ void* RenderArena::allocate(size_t size)
 
 void RenderArena::free(size_t size, void* ptr)
 {
+    m_totalSize -= size;
+
 #ifndef NDEBUG
     // Use standard free so that memory debugging tools work.
     void* block = static_cast<char*>(ptr) - debugHeaderSize;
index e1ff535..9150e71 100644 (file)
@@ -53,6 +53,8 @@ public:
     void* allocate(size_t);
     void free(size_t, void*);
 
+    size_t totalRenderArenaSize() const { return m_totalSize; }
+
 private:
     // Underlying arena pool
     ArenaPool m_pool;
@@ -60,6 +62,8 @@ private:
     // The recycler array is sparse with the indices being multiples of 4,
     // i.e., 0, 4, 8, 12, 16, 20, ...
     void* m_recyclers[gMaxRecycledSize >> 2];
+
+    size_t m_totalSize;
 };
 
 } // namespace WebCore