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
+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.
virtual void willRunModalDialogDuringPageDismissal(const DialogType&) const { }
virtual void numWheelEventHandlersChanged(unsigned) = 0;
+
+ virtual void setRenderTreeSize(size_t) { }
protected:
virtual ~ChromeClient() { }
#include "HTMLPlugInImageElement.h"
#include "InspectorInstrumentation.h"
#include "OverflowEvent.h"
+#include "RenderArena.h"
#include "RenderEmbeddedObject.h"
#include "RenderFullScreen.h"
#include "RenderLayer.h"
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());
+ }
}
}
// Zero out the recyclers array
memset(m_recyclers, 0, sizeof(m_recyclers));
+
+ m_totalSize = 0;
}
RenderArena::~RenderArena()
void* RenderArena::allocate(size_t size)
{
+ m_totalSize += size;
+
#ifndef NDEBUG
// Use standard malloc so that memory debugging tools work.
ASSERT(this);
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;
void* allocate(size_t);
void free(size_t, void*);
+ size_t totalRenderArenaSize() const { return m_totalSize; }
+
private:
// Underlying arena pool
ArenaPool m_pool;
// 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