Source/WebCore/ChangeLog

 12012-10-18 Ian Vollick <vollick@chromium.org>
 2
 3 Make TestRunner.display() work with composited layers
 4 https://bugs.webkit.org/show_bug.cgi?id=97801
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 With this patch, FrameView now stores FloatQuads when tracking
 9 repaint rects (they represent the absolute, transformed rects).
 10 Composited layers and the NonCompositedContentHost now report
 11 their transformed repaint rects as well (the NCCH sends them
 12 along to its WebView).
 13
 14 No new tests (OOPS!).
 15
 16 * page/FrameView.cpp:
 17 (WebCore::FrameView::reset):
 18 (WebCore::FrameView::repaintContentRectangle):
 19 (WebCore::FrameView::setTracksRepaints):
 20 (WebCore::FrameView::addTransformedRepaintRect):
 21 (WebCore):
 22 * page/FrameView.h:
 23 (WebCore::FrameView::resetTrackedRepaints):
 24 (FrameView):
 25 (WebCore::FrameView::trackedTransformedRepaintRects):
 26 * rendering/RenderLayerBacking.cpp:
 27 (WebCore::RenderLayerBacking::paintContents):
 28
1292012-10-16 Julien Chaffraix <jchaffraix@webkit.org>
230
331 Make RenderObject destruction during detach a top-down operation

Source/WebKit/chromium/ChangeLog

 12012-10-18 Ian Vollick <vollick@chromium.org>
 2
 3 Make TestRunner.display() work with composited layers
 4 https://bugs.webkit.org/show_bug.cgi?id=97801
 5
 6 With this patch, FrameView now stores FloatQuads when tracking
 7 repaint rects (they represent the absolute, transformed rects).
 8 Composited layers and the NonCompositedContentHost now report
 9 their transformed repaint rects as well (the NCCH sends them
 10 along to its WebView).
 11
 12 Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).
 13
 14 * public/WebWidget.h:
 15 (WebKit):
 16 (WebWidget):
 17 (WebKit::WebWidget::startTrackingRepaints):
 18 (WebKit::WebWidget::isTrackingRepaints):
 19 (WebKit::WebWidget::addTransformedRepaintRect):
 20 (WebKit::WebWidget::trackedTransformedRepaintRectangles):
 21 * src/NonCompositedContentHost.cpp:
 22 (WebKit::NonCompositedContentHost::paintContents):
 23 * src/WebViewImpl.cpp:
 24 (WebKit::WebViewImpl::WebViewImpl):
 25 (WebKit::WebViewImpl::startTrackingRepaints):
 26 (WebKit):
 27 (WebKit::WebViewImpl::addTransformedRepaintRect):
 28 (WebKit::WebViewImpl::trackedTransformedRepaintRectangles):
 29 * src/WebViewImpl.h:
 30 (WebViewImpl):
 31
1322012-10-16 Alec Flett <alecflett@chromium.org>
233
334 IndexedDB: Stub out chromium success handlers for integers and undefined values

Source/WebCore/page/FrameView.cpp

@@void FrameView::reset()
282282 m_deferredRepaintDelay = s_initialDeferredRepaintDelayDuringLoading;
283283 m_deferredRepaintTimer.stop();
284284 m_isTrackingRepaints = false;
285  m_trackedRepaintRects.clear();
 285 m_trackedTransformedRepaintRects.clear();
286286 m_lastPaintTime = 0;
287287 m_paintBehavior = PaintBehaviorNormal;
288288 m_isPainting = false;

@@void FrameView::repaintContentRectangle(const IntRect& r, bool immediate)
19041904 if (m_isTrackingRepaints) {
19051905 IntRect repaintRect = r;
19061906 repaintRect.move(-scrollOffset());
1907  m_trackedRepaintRects.append(repaintRect);
 1907 m_trackedTransformedRepaintRects.append(repaintRect);
19081908 }
19091909
19101910 double delay = m_deferringRepaints ? 0 : adjustedDeferredRepaintDelay();

@@void FrameView::setTracksRepaints(bool trackRepaints)
36443644 if (trackRepaints == m_isTrackingRepaints)
36453645 return;
36463646
3647  m_trackedRepaintRects.clear();
 3647 m_trackedTransformedRepaintRects.clear();
36483648 m_isTrackingRepaints = trackRepaints;
36493649}
36503650
 3651void FrameView::addTransformedRepaintRect(const FloatQuad& transformedRect)
 3652{
 3653 m_trackedTransformedRepaintRects.append(transformedRect);
 3654}
 3655
36513656void FrameView::addScrollableArea(ScrollableArea* scrollableArea)
36523657{
36533658 if (!m_scrollableAreas)

Source/WebCore/page/FrameView.h

2727
2828#include "AdjustViewSizeOrNot.h"
2929#include "Color.h"
 30#include "FloatQuad.h"
3031#include "Frame.h"
3132#include "LayoutTypes.h"
3233#include "Pagination.h"

@@public:
338339
339340 void setTracksRepaints(bool);
340341 bool isTrackingRepaints() const { return m_isTrackingRepaints; }
341  void resetTrackedRepaints() { m_trackedRepaintRects.clear(); }
342  const Vector<IntRect>& trackedRepaintRects() const { return m_trackedRepaintRects; }
 342 void resetTrackedRepaints() { m_trackedTransformedRepaintRects.clear(); }
 343 void addTransformedRepaintRect(const FloatQuad&);
 344 const Vector<FloatQuad>& trackedTransformedRepaintRects() const { return m_trackedTransformedRepaintRects; }
343345
344346 typedef HashSet<ScrollableArea*> ScrollableAreaSet;
345347 void addScrollableArea(ScrollableArea*);

@@private:
522524 unsigned m_disableRepaints;
523525
524526 bool m_isTrackingRepaints; // Used for testing.
525  Vector<IntRect> m_trackedRepaintRects;
 527 Vector<FloatQuad> m_trackedTransformedRepaintRects;
526528
527529 bool m_shouldUpdateWhileOffscreen;
528530

Source/WebCore/rendering/RenderLayerBacking.cpp

@@static void paintScrollbar(Scrollbar* scrollbar, GraphicsContext& context, const
14841484// Up-call from compositing layer drawing callback.
14851485void RenderLayerBacking::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& context, GraphicsLayerPaintingPhase paintingPhase, const IntRect& clip)
14861486{
 1487 FrameView* frameView = renderer()->frame()->view();
 1488 if (frameView->isTrackingRepaints())
 1489 frameView->addTransformedRepaintRect(renderer()->localToAbsoluteQuad(FloatRect(clip), SnapOffsetForTransforms));
 1490
14871491#ifndef NDEBUG
14881492 if (Page* page = renderer()->frame()->page())
14891493 page->setIsPainting(true);

Source/WebKit/chromium/public/WebWidget.h

3636#include "WebTextInputInfo.h"
3737#include "platform/WebCanvas.h"
3838#include "platform/WebCommon.h"
 39#include "platform/WebFloatQuad.h"
3940#include "platform/WebRect.h"
4041#include "platform/WebSize.h"
 42#include "platform/WebVector.h"
4143
4244#define WEBKIT_HAS_NEW_FULLSCREEN_API 1
4345#define WEBWIDGET_HAS_SETCOMPOSITORSURFACEREADY 1

@@class WebMouseEvent;
5052class WebString;
5153struct WebPoint;
5254struct WebRenderingStats;
53 template <typename T> class WebVector;
5455
5556class WebWidget {
5657public:

@@public:
125126 // animate or layout in this case.
126127 virtual void composite(bool finish) = 0;
127128
 129 // Start tracking repaint rectangles. Clears the list of rectangles
 130 // collected so far. Used for layout testing.
 131 virtual void startTrackingRepaints() { }
 132
 133 // Returns true if we've started tracking repaint rectangles.
 134 virtual bool isTrackingRepaints() const { return false; }
 135
 136 // Adds a transformed repaint rectangle to the list of tracked repaints.
 137 virtual void addTransformedRepaintRect(const WebFloatQuad&) { }
 138
 139 // Returns the collected repaint rectangles since startTrackingRepaints()
 140 // was last called.
 141 virtual WebVector<WebFloatQuad> trackedTransformedRepaintRectangles() const { return WebVector<WebFloatQuad>(); }
 142
128143 // Indicates that the compositing surface associated with this WebWidget is
129144 // ready to use.
130145 virtual void setCompositorSurfaceReady() = 0;

Source/WebKit/chromium/src/NonCompositedContentHost.cpp

3636#include "WebViewImpl.h"
3737#include <public/WebContentLayer.h>
3838#include <public/WebFloatPoint.h>
 39#include <public/WebFloatQuad.h>
3940
4041namespace WebKit {
4142

@@void NonCompositedContentHost::paintContents(const WebCore::GraphicsLayer*, WebC
183184 WebCore::IntRect adjustedClipRect = clipRect;
184185 adjustedClipRect.move(m_layerAdjust);
185186 m_webView->paintRootLayer(context, adjustedClipRect);
 187
 188 if (m_webView->isTrackingRepaints())
 189 m_webView->addTransformedRepaintRect(WebFloatQuad(WebCore::FloatRect(adjustedClipRect)));
186190}
187191
188192void NonCompositedContentHost::setShowDebugBorders(bool showDebugBorders)

Source/WebKit/chromium/src/WebViewImpl.cpp

@@WebViewImpl::WebViewImpl(WebViewClient* client)
445445#endif
446446 , m_flingModifier(0)
447447 , m_validationMessage(ValidationMessageClientImpl::create(*client))
 448 , m_isTrackingRepaints(false)
448449{
449450 // WebKit/win/WebView.cpp does the same thing, except they call the
450451 // KJS specific wrapper around this method. We need to have threading

@@void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect, PaintOptions opt
18211822 }
18221823}
18231824
 1825void WebViewImpl::startTrackingRepaints()
 1826{
 1827 if (!page())
 1828 return;
 1829 FrameView* view = page()->mainFrame()->view();
 1830 view->setTracksRepaints(true);
 1831 view->resetTrackedRepaints();
 1832 m_isTrackingRepaints = true;
 1833 m_trackedTransformedRepaintRects.clear();
 1834}
 1835
 1836void WebViewImpl::addTransformedRepaintRect(const WebFloatQuad& quad)
 1837{
 1838 m_trackedTransformedRepaintRects.append(quad);
 1839}
 1840
 1841WebVector<WebFloatQuad> WebViewImpl::trackedTransformedRepaintRectangles() const
 1842{
 1843 if (!page())
 1844 return WebVector<WebFloatQuad>();
 1845
 1846 Vector<WebFloatQuad> toReturn = m_trackedTransformedRepaintRects;
 1847 FrameView* view = page()->mainFrame()->view();
 1848 toReturn.appendVector(view->trackedTransformedRepaintRects());
 1849 return toReturn;
 1850}
 1851
18241852void WebViewImpl::themeChanged()
18251853{
18261854 if (!page())

Source/WebKit/chromium/src/WebViewImpl.h

@@public:
146146 virtual void animate(double);
147147 virtual void layout(); // Also implements WebLayerTreeViewClient::layout()
148148 virtual void paint(WebCanvas*, const WebRect&, PaintOptions = ReadbackFromCompositorIfAvailable);
 149 virtual void startTrackingRepaints() OVERRIDE;
 150 virtual bool isTrackingRepaints() const OVERRIDE { return m_isTrackingRepaints; }
 151 virtual void addTransformedRepaintRect(const WebFloatQuad&) OVERRIDE;
 152 virtual WebVector<WebFloatQuad> trackedTransformedRepaintRectangles() const OVERRIDE;
149153 virtual void themeChanged();
150154 virtual void composite(bool finish);
151155 virtual void setNeedsRedraw();

@@private:
872876 OwnPtr<LinkHighlight> m_linkHighlight;
873877#endif
874878 OwnPtr<ValidationMessageClientImpl> m_validationMessage;
 879
 880 bool m_isTrackingRepaints; // Used for testing.
 881 Vector<WebFloatQuad> m_trackedTransformedRepaintRects;
875882};
876883
877884} // namespace WebKit

Tools/ChangeLog

 12012-10-18 Ian Vollick <vollick@chromium.org>
 2
 3 Make TestRunner.display() work with composited layers
 4 https://bugs.webkit.org/show_bug.cgi?id=97801
 5
 6 With this patch, FrameView now stores FloatQuads when tracking
 7 repaint rects (they represent the absolute, transformed rects).
 8 Composited layers and the NonCompositedContentHost now report
 9 their transformed repaint rects as well (the NCCH sends them
 10 along to its WebView).
 11
 12 Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).
 13
 14 * DumpRenderTree/chromium/DRTTestRunner.cpp:
 15 (DRTTestRunner::display):
 16 (DRTTestRunner::displayInvalidatedRegion):
 17 * DumpRenderTree/chromium/TestShell.cpp:
 18 (TestShell::dump):
 19 * DumpRenderTree/chromium/WebViewHost.cpp:
 20 (WebViewHost::startTrackingRepaints):
 21 (WebViewHost::paintTrackedRepaintRectangleOverlay):
 22 * DumpRenderTree/chromium/WebViewHost.h:
 23 (WebViewHost):
 24
1252012-10-16 Andy Estes <aestes@apple.com>
226
327 [WebKit2] Create Objective-C API for adding and removing user scripts

Tools/DumpRenderTree/chromium/DRTTestRunner.cpp

@@void DRTTestRunner::display(const CppArgumentList& arguments, CppVariant* result
12651265 WebRect rect(0, 0, size.width, size.height);
12661266 host->updatePaintRect(rect);
12671267 host->paintInvalidatedRegion();
1268  host->displayRepaintMask();
 1268 host->startTrackingRepaints();
12691269 result->setNull();
12701270}
12711271

@@void DRTTestRunner::displayInvalidatedRegion(const CppArgumentList& arguments, C
12731273{
12741274 WebViewHost* host = m_shell->webViewHost();
12751275 host->paintInvalidatedRegion();
1276  host->displayRepaintMask();
 1276 host->startTrackingRepaints();
12771277 result->setNull();
12781278}
12791279

Tools/DumpRenderTree/chromium/TestShell.cpp

@@void TestShell::dump()
627627 m_webViewHost->paintPagesWithBoundaries();
628628 else
629629 m_webViewHost->paintInvalidatedRegion();
 630 m_webViewHost->paintTrackedRepaintRectangleOverlay();
630631
631632 // See if we need to draw the selection bounds rect. Selection bounds
632633 // rect is the rect enclosing the (possibly transformed) selection.

Tools/DumpRenderTree/chromium/WebViewHost.cpp

@@void WebViewHost::discardBackingStore()
19461946 m_canvas.clear();
19471947}
19481948
1949 // Paints the entire canvas a semi-transparent black (grayish). This is used
1950 // by the layout tests in fast/repaint. The alpha value matches upstream.
1951 void WebViewHost::displayRepaintMask()
 1949void WebViewHost::startTrackingRepaints()
19521950{
1953  canvas()->drawARGB(167, 0, 0, 0);
 1951 webWidget()->startTrackingRepaints();
 1952}
 1953
 1954void WebViewHost::paintTrackedRepaintRectangleOverlay()
 1955{
 1956 SkPath path;
 1957 WebVector<WebFloatQuad> quads = webWidget()->trackedTransformedRepaintRectangles();
 1958 for (size_t i = 0; i < quads.size(); ++i) {
 1959 SkPoint points[] = {
 1960 SkPoint::Make(quads[i].p[0].x, quads[i].p[0].y),
 1961 SkPoint::Make(quads[i].p[1].x, quads[i].p[1].y),
 1962 SkPoint::Make(quads[i].p[2].x, quads[i].p[2].y),
 1963 SkPoint::Make(quads[i].p[3].x, quads[i].p[3].y)
 1964 };
 1965 path.addPoly(points, 4, true);
 1966 }
 1967
 1968 WebSize widgetSize = webWidget()->size();
 1969 SkPaint paint;
 1970 paint.setColor(0xA7000000);
 1971 paint.setStyle(SkPaint::kFill_Style);
 1972 paint.setFlags(SkPaint::kAntiAlias_Flag);
 1973 canvas()->clipPath(path, SkRegion::kDifference_Op);
 1974 canvas()->drawRectCoords(0, 0, widgetSize.width, widgetSize.height, paint);
19541975}
19551976
19561977// Simulate a print by going into print mode and then exit straight away.

Tools/DumpRenderTree/chromium/WebViewHost.h

@@class WebViewHost : public WebKit::WebViewClient, public WebKit::WebFrameClient,
107107 void paintInvalidatedRegion();
108108 void paintPagesWithBoundaries();
109109 SkCanvas* canvas();
110  void displayRepaintMask();
 110 void startTrackingRepaints();
 111 void paintTrackedRepaintRectangleOverlay();
111112
112113 void loadURLForFrame(const WebKit::WebURL&, const WebKit::WebString& frameName);
113114 TestNavigationController* navigationController() { return m_navigationController.get(); }