summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/Page.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
commitcd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch)
tree8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/WebCore/page/Page.cpp
parentd11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff)
downloadqtwebkit-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.cpp45
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)