Title: [95967] trunk/Source
Revision
95967
Author
simon.fra...@apple.com
Date
2011-09-26 11:57:14 -0700 (Mon, 26 Sep 2011)

Log Message

Repaint tests don't work in WebKit2
https://bugs.webkit.org/show_bug.cgi?id=68453

Reviewed by Sam Weinig.

Source/WebCore:

Have FrameView keep track of repaint rects when asked to, and
expose this set of repaint rects via private WebKit API for later
use by DumpRenderTree.

The repaint rects are in WebView coordinates, so we have to
unapply the scroll offset.

* WebCore.exp.in:
* page/FrameView.cpp:
(WebCore::FrameView::FrameView):
(WebCore::FrameView::reset):
(WebCore::FrameView::repaintContentRectangle):
(WebCore::FrameView::setTracksRepaints):
* page/FrameView.h:
(WebCore::FrameView::isTrackingRepaints):
(WebCore::FrameView::resetTrackedRepaints):
(WebCore::FrameView::trackedRepaintRects):

Source/WebKit/mac:

Have FrameView keep track of repaint rects when asked to, and
expose this set of repaint rects via private WebKit API for later
use by DumpRenderTree.

* WebView/WebView.mm:
(-[WebView setTracksRepaints:]):
(-[WebView isTrackingRepaints]):
(-[WebView resetTrackedRepaints]):
(-[WebView trackedRepaintRects]):
* WebView/WebViewPrivate.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (95966 => 95967)


--- trunk/Source/WebCore/ChangeLog	2011-09-26 18:53:48 UTC (rev 95966)
+++ trunk/Source/WebCore/ChangeLog	2011-09-26 18:57:14 UTC (rev 95967)
@@ -1,3 +1,28 @@
+2011-09-23  Simon Fraser  <simon.fra...@apple.com>
+
+        Repaint tests don't work in WebKit2
+        https://bugs.webkit.org/show_bug.cgi?id=68453
+
+        Reviewed by Sam Weinig.
+
+        Have FrameView keep track of repaint rects when asked to, and
+        expose this set of repaint rects via private WebKit API for later
+        use by DumpRenderTree.
+        
+        The repaint rects are in WebView coordinates, so we have to
+        unapply the scroll offset.
+
+        * WebCore.exp.in:
+        * page/FrameView.cpp:
+        (WebCore::FrameView::FrameView):
+        (WebCore::FrameView::reset):
+        (WebCore::FrameView::repaintContentRectangle):
+        (WebCore::FrameView::setTracksRepaints):
+        * page/FrameView.h:
+        (WebCore::FrameView::isTrackingRepaints):
+        (WebCore::FrameView::resetTrackedRepaints):
+        (WebCore::FrameView::trackedRepaintRects):
+
 2011-09-26  Antti Koivisto  <an...@apple.com>
 
         Optimize matching of common pseudo classes

Modified: trunk/Source/WebCore/WebCore.exp.in (95966 => 95967)


--- trunk/Source/WebCore/WebCore.exp.in	2011-09-26 18:53:48 UTC (rev 95966)
+++ trunk/Source/WebCore/WebCore.exp.in	2011-09-26 18:57:14 UTC (rev 95967)
@@ -970,6 +970,7 @@
 __ZN7WebCore9FrameView15setMarginHeightEi
 __ZN7WebCore9FrameView16setPaintBehaviorEj
 __ZN7WebCore9FrameView17setScrollPositionERKNS_8IntPointE
+__ZN7WebCore9FrameView17setTracksRepaintsEb
 __ZN7WebCore9FrameView18updateControlTintsEv
 __ZN7WebCore9FrameView20enterCompositingModeEv
 __ZN7WebCore9FrameView21flushDeferredRepaintsEv

Modified: trunk/Source/WebCore/page/FrameView.cpp (95966 => 95967)


--- trunk/Source/WebCore/page/FrameView.cpp	2011-09-26 18:53:48 UTC (rev 95966)
+++ trunk/Source/WebCore/page/FrameView.cpp	2011-09-26 18:57:14 UTC (rev 95967)
@@ -131,6 +131,7 @@
     , m_wasScrolledByUser(false)
     , m_inProgrammaticScroll(false)
     , m_deferredRepaintTimer(this, &FrameView::deferredRepaintTimerFired)
+    , m_isTrackingRepaints(false)
     , m_shouldUpdateWhileOffscreen(true)
     , m_deferSetNeedsLayouts(0)
     , m_setNeedsLayoutWasDeferred(false)
@@ -227,6 +228,8 @@
     m_repaintRects.clear();
     m_deferredRepaintDelay = s_initialDeferredRepaintDelayDuringLoading;
     m_deferredRepaintTimer.stop();
+    m_isTrackingRepaints = false;
+    m_trackedRepaintRects.clear();
     m_lastPaintTime = 0;
     m_paintBehavior = PaintBehaviorNormal;
     m_isPainting = false;
@@ -1695,6 +1698,12 @@
 void FrameView::repaintContentRectangle(const LayoutRect& r, bool immediate)
 {
     ASSERT(!m_frame->ownerElement());
+    
+    if (m_isTrackingRepaints) {
+        IntRect repaintRect = r;
+        repaintRect.move(-scrollOffset());
+        m_trackedRepaintRects.append(repaintRect);
+    }
 
     double delay = m_deferringRepaints ? 0 : adjustedDeferredRepaintDelay();
     if ((m_deferringRepaints || m_deferredRepaintTimer.isActive() || delay) && !immediate) {
@@ -3055,6 +3064,15 @@
     s_deferredRepaintDelayIncrementDuringLoading = p;
 }
 
+void FrameView::setTracksRepaints(bool trackRepaints)
+{
+    if (trackRepaints == m_isTrackingRepaints)
+        return;
+    
+    m_trackedRepaintRects.clear();
+    m_isTrackingRepaints = trackRepaints;
+}
+
 bool FrameView::isVerticalDocument() const
 {
     if (!m_frame)

Modified: trunk/Source/WebCore/page/FrameView.h (95966 => 95967)


--- trunk/Source/WebCore/page/FrameView.h	2011-09-26 18:53:48 UTC (rev 95966)
+++ trunk/Source/WebCore/page/FrameView.h	2011-09-26 18:57:14 UTC (rev 95967)
@@ -294,6 +294,11 @@
     RenderBox* embeddedContentBox() const;
 
     void clearOwningRendererForCustomScrollbars(RenderBox*);
+    
+    void setTracksRepaints(bool);
+    bool isTrackingRepaints() const { return m_isTrackingRepaints; }
+    void resetTrackedRepaints() { m_trackedRepaintRects.clear(); }
+    const Vector<IntRect>& trackedRepaintRects() const { return m_trackedRepaintRects; }
 
 protected:
     virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const LayoutRect& rectToScroll, const LayoutRect& clipRect);
@@ -446,6 +451,9 @@
     Timer<FrameView> m_deferredRepaintTimer;
     double m_deferredRepaintDelay;
     double m_lastPaintTime;
+    
+    bool m_isTrackingRepaints; // Used for testing.
+    Vector<IntRect> m_trackedRepaintRects;
 
     bool m_shouldUpdateWhileOffscreen;
 

Modified: trunk/Source/WebKit/mac/ChangeLog (95966 => 95967)


--- trunk/Source/WebKit/mac/ChangeLog	2011-09-26 18:53:48 UTC (rev 95966)
+++ trunk/Source/WebKit/mac/ChangeLog	2011-09-26 18:57:14 UTC (rev 95967)
@@ -1,3 +1,21 @@
+2011-09-23  Simon Fraser  <simon.fra...@apple.com>
+
+        Repaint tests don't work in WebKit2
+        https://bugs.webkit.org/show_bug.cgi?id=68453
+
+        Reviewed by Sam Weinig.
+
+        Have FrameView keep track of repaint rects when asked to, and
+        expose this set of repaint rects via private WebKit API for later
+        use by DumpRenderTree.
+
+        * WebView/WebView.mm:
+        (-[WebView setTracksRepaints:]):
+        (-[WebView isTrackingRepaints]):
+        (-[WebView resetTrackedRepaints]):
+        (-[WebView trackedRepaintRects]):
+        * WebView/WebViewPrivate.h:
+
 2011-09-25  Mark Hahnenberg  <mhahnenb...@apple.com>
 
         Add custom vtable struct to ClassInfo struct

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (95966 => 95967)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2011-09-26 18:53:48 UTC (rev 95966)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2011-09-26 18:57:14 UTC (rev 95967)
@@ -2432,6 +2432,45 @@
     return _private->includesFlattenedCompositingLayersWhenDrawingToBitmap;
 }
 
+- (void)setTracksRepaints:(BOOL)flag
+{
+    Frame* coreFrame = [self _mainCoreFrame];
+    if (FrameView* view = coreFrame->view())
+        view->setTracksRepaints(flag);
+}
+
+- (BOOL)isTrackingRepaints
+{
+    Frame* coreFrame = [self _mainCoreFrame];
+    if (FrameView* view = coreFrame->view())
+        return view->isTrackingRepaints();
+    
+    return NO;
+}
+
+- (void)resetTrackedRepaints
+{
+    Frame* coreFrame = [self _mainCoreFrame];
+    if (FrameView* view = coreFrame->view())
+        view->resetTrackedRepaints();
+}
+
+- (NSArray*)trackedRepaintRects
+{
+    Frame* coreFrame = [self _mainCoreFrame];
+    FrameView* view = coreFrame->view();
+    if (!view || !view->isTrackingRepaints())
+        return nil;
+
+    const Vector<IntRect>& repaintRects = view->trackedRepaintRects();
+    NSMutableArray* rectsArray = [[NSMutableArray alloc] initWithCapacity:repaintRects.size()];
+    
+    for (unsigned i = 0; i < repaintRects.size(); ++i)
+        [rectsArray addObject:[NSValue valueWithRect:repaintRects[i]]];
+
+    return [rectsArray autorelease];
+}
+
 - (NSPasteboard *)_insertionPasteboard
 {
     return _private ? _private->insertionPasteboard : nil;

Modified: trunk/Source/WebKit/mac/WebView/WebViewPrivate.h (95966 => 95967)


--- trunk/Source/WebKit/mac/WebView/WebViewPrivate.h	2011-09-26 18:53:48 UTC (rev 95966)
+++ trunk/Source/WebKit/mac/WebView/WebViewPrivate.h	2011-09-26 18:57:14 UTC (rev 95967)
@@ -493,6 +493,11 @@
 - (void)_setIncludesFlattenedCompositingLayersWhenDrawingToBitmap:(BOOL)flag;
 - (BOOL)_includesFlattenedCompositingLayersWhenDrawingToBitmap;
 
+- (void)setTracksRepaints:(BOOL)flag;
+- (BOOL)isTrackingRepaints;
+- (void)resetTrackedRepaints;
+- (NSArray*)trackedRepaintRects; // Returned array contains rectValue NSValues.
+
 // Which pasteboard text is coming from in editing delegate methods such as shouldInsertNode.
 - (NSPasteboard *)_insertionPasteboard;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to