diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
commit | cd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch) | |
tree | 8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/WebCore/page/Page.cpp | |
parent | d11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff) | |
download | qtwebkit-cd44dc59cdfc39534aef4d417e9f3c412e3be139.tar.gz |
Imported WebKit commit fce473cb4d55aa9fe9d0b0322a2fffecb731b961 (http://svn.webkit.org/repository/webkit/trunk@106560)
Diffstat (limited to 'Source/WebCore/page/Page.cpp')
-rw-r--r-- | Source/WebCore/page/Page.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Source/WebCore/page/Page.cpp b/Source/WebCore/page/Page.cpp index 0c6ff55ba..2442bf7c2 100644 --- a/Source/WebCore/page/Page.cpp +++ b/Source/WebCore/page/Page.cpp @@ -59,6 +59,7 @@ #include "PluginData.h" #include "PluginView.h" #include "PluginViewBase.h" +#include "PointerLockController.h" #include "ProgressTracker.h" #include "RenderTheme.h" #include "RenderView.h" @@ -146,6 +147,9 @@ Page::Page(PageClients& pageClients) #if ENABLE(NOTIFICATIONS) , m_notificationController(NotificationController::create(this, pageClients.notificationClient)) #endif +#if ENABLE(POINTER_LOCK) + , m_pointerLockController(PointerLockController::create(this)) +#endif #if ENABLE(INPUT_SPEECH) , m_speechInputClient(pageClients.speechInputClient) #endif @@ -182,6 +186,7 @@ Page::Page(PageClients& pageClients) , m_visibilityState(PageVisibilityStateVisible) #endif , m_displayID(0) + , m_isCountingRelevantRepaintedObjects(false) { if (!allPages) { allPages = new HashSet<Page*>; @@ -1076,6 +1081,46 @@ PageVisibilityState Page::visibilityState() const } #endif +static uint64_t gPaintedObjectCounterThreshold = 0; + +void Page::setRelevantRepaintedObjectsCounterThreshold(uint64_t threshold) +{ + gPaintedObjectCounterThreshold = threshold; +} + +void Page::startCountingRelevantRepaintedObjects() +{ + m_isCountingRelevantRepaintedObjects = true; + + // Clear the HashSet in case we didn't hit the threshold last time. + m_relevantPaintedRenderObjects.clear(); +} + +void Page::addRelevantRepaintedObject(RenderObject* object, const IntRect& objectPaintRect) +{ + if (!m_isCountingRelevantRepaintedObjects) + return; + + // We don't need to do anything if there is no counter threshold. + if (!gPaintedObjectCounterThreshold) + return; + + // The objects are only relevant if they are being painted within the viewRect(). + if (RenderView* view = object->view()) { + if (!objectPaintRect.intersects(view->viewRect())) + return; + } + + m_relevantPaintedRenderObjects.add(object); + + if (m_relevantPaintedRenderObjects.size() == static_cast<int>(gPaintedObjectCounterThreshold)) { + m_isCountingRelevantRepaintedObjects = false; + m_relevantPaintedRenderObjects.clear(); + if (Frame* frame = mainFrame()) + frame->loader()->didNewFirstVisuallyNonEmptyLayout(); + } +} + Page::PageClients::PageClients() : chromeClient(0) , contextMenuClient(0) |