https://bugs.webkit.org/show_bug.cgi?id=76708
Reviewed by Kenneth Rohde Christiansen.
Source/WebCore:
* platform/graphics/qt/TextureMapperQt.cpp: Allow setting the context to null.
(WebCore::TextureMapperQt::setGraphicsContext):
* platform/graphics/qt/TextureMapperQt.h:
(WebCore::TextureMapperQt::initialize):
Source/WebKit2:
Animation layout tests require the graphics layers tree to be updated
to pass. WebkitTestRunner doesn't show its wrapping QQuickView, which
prevents the rendering pipeline to run and then in turn blocks the web
process from processing further graphics layer updates.
This allows the tests to use a TextureMapperQt to empty the LayerTreeHost's
message queue and render the layers in software on an offscreen buffer.
* UIProcess/API/qt/qquickwebpage.cpp:
(QQuickWebPagePrivate::paint):
* UIProcess/API/qt/qquickwebview.cpp:
(QQuickWebViewPrivate::QQuickWebViewPrivate):
(QQuickWebViewPrivate::setNeedsDisplay):
(QQuickWebViewExperimental::setRenderToOffscreenBuffer):
(QQuickWebViewExperimental::renderToOffscreenBuffer):
* UIProcess/API/qt/qquickwebview_p.h:
* UIProcess/API/qt/qquickwebview_p_p.h:
(QQuickWebViewPrivate::setRenderToOffscreenBuffer):
(QQuickWebViewPrivate::renderToOffscreenBuffer):
* UIProcess/qt/LayerTreeHostProxyQt.cpp:
(WebKit::LayerTreeHostProxy::paintToGraphicsContext):
Tools:
* WebKitTestRunner/qt/PlatformWebViewQt.cpp:
(WTR::WrapperWindow::WrapperWindow):
(WTR::PlatformWebView::PlatformWebView): Use software rendering of layers since the wrapping QQuickView isn't shown.
LayoutTests:
* platform/qt-wk2/Skipped:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@106109
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2012-01-26 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ [Qt] WKTR: Use a software rendering pipiline when running tests.
+ https://bugs.webkit.org/show_bug.cgi?id=76708
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ * platform/qt-wk2/Skipped:
+
2012-01-27 Branimir Lambov <blambov@google.com>
SVG filters incorrectly move elements
tables/mozilla_expected_failures/marvin/backgr_layers-show.html
tables/mozilla_expected_failures/marvin/backgr_position-table-column.html
-# [Qt][WK2] REGRESSION(r105517): It made 49 tests timeout
-# https://bugs.webkit.org/show_bug.cgi?id=76708
-animations/3d/change-transform-in-end-event.html
-animations/3d/replace-filling-transform.html
-animations/3d/state-at-end-event-transform.html
-animations/3d/transform-perspective.html
-animations/additive-transform-animations.html
-animations/animation-direction-normal.html
-animations/animation-end-event-destroy-renderer.html
-animations/animation-hit-test-transform.html
-animations/animation-iteration-event-destroy-renderer.html
-animations/animation-matrix-negative-scale-unmatrix.html
-animations/animation-start-event-destroy-renderer.html
-animations/big-rotation.html
-animations/combo-transform-rotate+scale.html
-animations/combo-transform-translate+scale.html
-animations/dynamic-stylesheet-loading.html
-animations/fill-mode-transform.html
-animations/keyframe-timing-functions-transform.html
-animations/matrix-anim.html
-animations/missing-from-to-transforms.html
-animations/missing-keyframe-properties-repeating.html
-animations/missing-keyframe-properties-timing-function.html
-animations/missing-keyframe-properties.html
-animations/missing-values-first-keyframe.html
-animations/missing-values-last-keyframe.html
-animations/negative-delay.html
-animations/opacity-transform-animation.html
-animations/pause-crash.html
-animations/play-state-paused.html
-animations/play-state-suspend.html
-animations/simultaneous-start-transform.html
-animations/stop-animation-on-suspend.html
-animations/suspend-resume-animation.html
-animations/suspend-transform-animation.html
-animations/transition-and-animation-1.html
-animations/transition-and-animation-2.html
-fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html
-tables/mozilla/marvin/backgr_simple-table-cell.html
-transitions/3d/interrupted-transition.html
-transitions/cancel-transition.html
-transitions/extra-transition.html
-transitions/interrupt-transform-transition.html
-transitions/interrupted-accelerated-transition.html
-transitions/move-after-transition.html
-transitions/start-transform-transition.html
-transitions/transition-end-event-destroy-iframe.html
-transitions/transition-end-event-destroy-renderer.html
-transitions/transition-end-event-multiple-04.html
-transitions/transition-end-event-rendering.html
-transitions/transition-end-event-transform.html
-
# [Qt][WK2] http/tests/history/replacestate-post-to-get-2.html fails with timeout
# https://bugs.webkit.org/show_bug.cgi?id=76784
http/tests/history/replacestate-post-to-get-2.html
+2012-01-26 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ [Qt] WKTR: Use a software rendering pipiline when running tests.
+ https://bugs.webkit.org/show_bug.cgi?id=76708
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ * platform/graphics/qt/TextureMapperQt.cpp: Allow setting the context to null.
+ (WebCore::TextureMapperQt::setGraphicsContext):
+ * platform/graphics/qt/TextureMapperQt.h:
+ (WebCore::TextureMapperQt::initialize):
+
2012-01-27 Branimir Lambov <blambov@google.com>
SVG filters incorrectly move elements
void TextureMapperQt::setGraphicsContext(GraphicsContext* context)
{
m_context = context;
- m_painter = context->platformContext();
+ m_painter = context ? context->platformContext() : 0;
initialize(m_painter);
}
static void initialize(QPainter* painter)
{
- painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, false);
+ if (painter)
+ painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, false);
}
static PassOwnPtr<TextureMapper> create() { return adoptPtr(new TextureMapperQt); }
+2012-01-26 No'am Rosenthal <noam.rosenthal@nokia.com> and Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ [Qt] WKTR: Use a software rendering pipiline when running tests.
+ https://bugs.webkit.org/show_bug.cgi?id=76708
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Animation layout tests require the graphics layers tree to be updated
+ to pass. WebkitTestRunner doesn't show its wrapping QQuickView, which
+ prevents the rendering pipeline to run and then in turn blocks the web
+ process from processing further graphics layer updates.
+
+ This allows the tests to use a TextureMapperQt to empty the LayerTreeHost's
+ message queue and render the layers in software on an offscreen buffer.
+
+ * UIProcess/API/qt/qquickwebpage.cpp:
+ (QQuickWebPagePrivate::paint):
+ * UIProcess/API/qt/qquickwebview.cpp:
+ (QQuickWebViewPrivate::QQuickWebViewPrivate):
+ (QQuickWebViewPrivate::setNeedsDisplay):
+ (QQuickWebViewExperimental::setRenderToOffscreenBuffer):
+ (QQuickWebViewExperimental::renderToOffscreenBuffer):
+ * UIProcess/API/qt/qquickwebview_p.h:
+ * UIProcess/API/qt/qquickwebview_p_p.h:
+ (QQuickWebViewPrivate::setRenderToOffscreenBuffer):
+ (QQuickWebViewPrivate::renderToOffscreenBuffer):
+ * UIProcess/qt/LayerTreeHostProxyQt.cpp:
+ (WebKit::LayerTreeHostProxy::paintToGraphicsContext):
+
2012-01-27 Simon Hausmann <simon.hausmann@nokia.com>
[Qt] Re-creating QQuickWebView starts new web process every time
drawingArea->setSize(WebCore::IntSize(size), WebCore::IntSize());
}
+void QQuickWebPagePrivate::paint(QPainter* painter)
+{
+ if (webPageProxy->drawingArea())
+ webPageProxy->drawingArea()->paintLayerTree(painter);
+}
+
void QQuickWebPagePrivate::paintToCurrentGLContext()
{
if (!q->isVisible())
void updateSize();
void paintToCurrentGLContext();
+ void paint(QPainter*);
void resetPaintNode();
QScopedPointer<QtWebPageEventHandler> eventHandler;
, isTransitioningToNewPage(false)
, pageIsSuspended(false)
, m_navigatorQtObjectEnabled(false)
+ , m_renderToOffscreenBuffer(false)
{
viewport->setFlags(QQuickItem::ItemClipsChildrenToShape);
QObject::connect(viewport, SIGNAL(visibleChanged()), viewport, SLOT(_q_onVisibleChanged()));
updateTouchViewportSize();
}
+void QQuickWebViewPrivate::setNeedsDisplay()
+{
+ Q_Q(QQuickWebView);
+ if (renderToOffscreenBuffer()) {
+ // TODO: we can maintain a real image here and use it for pixel tests. Right now this is used only for running the rendering code-path while running tests.
+ QImage dummyImage(1, 1, QImage::Format_ARGB32);
+ QPainter painter(&dummyImage);
+ q->page()->d->paint(&painter);
+ return;
+ }
+
+ q->page()->update();
+}
+
void QQuickWebViewPrivate::loadDidCommit()
{
// Due to entering provisional load before committing, we
d->setUseTraditionalDesktopBehaviour(enable);
}
+void QQuickWebViewExperimental::setRenderToOffscreenBuffer(bool enable)
+{
+ Q_D(QQuickWebView);
+ d->setRenderToOffscreenBuffer(enable);
+}
+
+bool QQuickWebViewExperimental::renderToOffscreenBuffer() const
+{
+ Q_D(const QQuickWebView);
+ return d->renderToOffscreenBuffer();
+}
+
void QQuickWebViewExperimental::postMessage(const QString& message)
{
Q_D(QQuickWebView);
void setCertificateVerificationDialog(QDeclarativeComponent*);
QDeclarativeComponent* itemSelector() const;
void setItemSelector(QDeclarativeComponent*);
-
+ bool useTraditionalDesktopBehaviour() const;
+ void setUseTraditionalDesktopBehaviour(bool enable);
+
QWebViewportInfo* viewportInfo();
QWebPreferences* preferences() const;
- bool useTraditionalDesktopBehaviour() const;
QWebNavigationHistory* navigationHistory() const;
QQuickWebPage* page();
void invokeApplicationSchemeHandler(WTF::PassRefPtr<WebKit::QtRefCountedNetworkRequestData>);
void sendApplicationSchemeReply(QQuickNetworkReply*);
+ // C++ only
+ bool renderToOffscreenBuffer() const;
+ void setRenderToOffscreenBuffer(bool enable);
+
public Q_SLOTS:
- void setUseTraditionalDesktopBehaviour(bool enable);
void goBackTo(int index);
void goForwardTo(int index);
void postMessage(const QString&);
void didChangeViewportProperties(const WebCore::ViewportArguments& args);
void didChangeBackForwardList();
+ void setNeedsDisplay();
+
void updateDesktopViewportSize();
void updateTouchViewportSize();
QtViewportInteractionEngine::Constraints computeViewportConstraints();
bool handleCertificateVerificationRequest(const QString& hostname);
void setUseTraditionalDesktopBehaviour(bool enable);
+ void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; }
void setViewInAttachedProperties(QObject*);
void setIcon(const QUrl&);
bool navigatorQtObjectEnabled() const;
+ bool renderToOffscreenBuffer() const { return m_renderToOffscreenBuffer; }
void setNavigatorQtObjectEnabled(bool);
// PageClient.
bool isTransitioningToNewPage;
bool pageIsSuspended;
bool m_navigatorQtObjectEnabled;
+ bool m_renderToOffscreenBuffer;
QUrl m_iconURL;
};
#ifndef DrawingAreaProxy_h
#define DrawingAreaProxy_h
+#include "BackingStore.h"
#include "DrawingAreaInfo.h"
#include <WebCore/IntRect.h>
#include <WebCore/IntSize.h>
virtual WebCore::IntRect contentsRect() const;
virtual bool isBackingStoreReady() const { return true; }
virtual void paintToCurrentGLContext(const WebCore::TransformationMatrix&, float opacity) { }
+ virtual void paintLayerTree(BackingStore::PlatformGraphicsContext) { }
LayerTreeHostProxy* layerTreeHostProxy() const { return m_layerTreeHostProxy.get(); }
#if USE(TILED_BACKING_STORE)
m_layerTreeHostProxy->setVisibleContentRectTrajectoryVector(trajectoryVector);
}
+void DrawingAreaProxyImpl::paintLayerTree(BackingStore::PlatformGraphicsContext context)
+{
+ if (m_layerTreeHostProxy)
+ m_layerTreeHostProxy->paintToGraphicsContext(context);
+}
+
void DrawingAreaProxyImpl::paintToCurrentGLContext(const TransformationMatrix& matrix, float opacity)
{
if (m_layerTreeHostProxy)
virtual void setVisibleContentsRectAndScale(const WebCore::IntRect& visibleContentsRect, float scale);
virtual void setVisibleContentRectTrajectoryVector(const WebCore::FloatPoint&);
virtual void paintToCurrentGLContext(const WebCore::TransformationMatrix&, float opacity);
+ virtual void paintLayerTree(BackingStore::PlatformGraphicsContext);
void didReceiveLayerTreeHostProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
#endif
#else
void setRootCompositingLayer(WebLayerID);
void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
void paintToCurrentGLContext(const WebCore::TransformationMatrix&, float);
+ void paintToGraphicsContext(BackingStore::PlatformGraphicsContext);
void purgeGLResources();
void setVisibleContentsRectAndScale(const WebCore::IntRect&, float);
void setVisibleContentRectTrajectoryVector(const WebCore::FloatPoint&);
#include "MessageID.h"
#include "ShareableBitmap.h"
#include "TextureMapperGL.h"
+#include "TextureMapperQt.h"
#include "UpdateInfo.h"
#include "WebCoreArgumentCoders.h"
#include "WebLayerTreeInfo.h"
{
if (!m_textureMapper)
m_textureMapper = TextureMapperGL::create();
+ ASSERT(dynamic_cast<TextureMapperGL*>(m_textureMapper.get()));
syncRemoteContent();
GraphicsLayer* currentRootLayer = rootLayer();
}
}
+void LayerTreeHostProxy::paintToGraphicsContext(QPainter* painter)
+{
+ if (!m_textureMapper)
+ m_textureMapper = TextureMapperQt::create();
+ ASSERT(dynamic_cast<TextureMapperQt*>(m_textureMapper.get()));
+
+ syncRemoteContent();
+ TextureMapperNode* node = toTextureMapperNode(rootLayer());
+
+ if (!node)
+ return;
+
+ GraphicsContext graphicsContext(painter);
+ m_textureMapper->setGraphicsContext(&graphicsContext);
+ m_textureMapper->beginPainting();
+ m_textureMapper->bindSurface(0);
+ node->paint();
+ m_textureMapper->endPainting();
+ m_textureMapper->setGraphicsContext(0);
+}
+
+
void LayerTreeHostProxy::didFireViewportUpdateTimer(Timer<LayerTreeHostProxy>*)
{
updateViewport();
void QtPageClient::setViewNeedsDisplay(const WebCore::IntRect& rect)
{
- m_webView->page()->update();
+ QQuickWebViewPrivate::get(m_webView)->setNeedsDisplay();
}
void QtPageClient::pageDidRequestScroll(const IntPoint& pos)
+2012-01-26 No'am Rosenthal <noam.rosenthal@nokia.com> and Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ [Qt] WKTR: Use a software rendering pipiline when running tests.
+ https://bugs.webkit.org/show_bug.cgi?id=76708
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
+ (WTR::WrapperWindow::WrapperWindow):
+ (WTR::PlatformWebView::PlatformWebView): Use software rendering of layers since the wrapping QQuickView isn't shown.
+
2012-01-26 Kevin Ollivier <kevino@theolliviers.com>
[wx] Unreviewed. Build fix, add WebCore/testing/js
: QQuickView(QUrl("data:text/plain,import QtQuick 2.0\nItem { objectName: 'root' }"))
, m_view(view)
{
- QQuickWebViewExperimental(view).setUseTraditionalDesktopBehaviour(true);
connect(this, SIGNAL(statusChanged(QQuickView::Status)), SLOT(handleStatusChanged(QQuickView::Status)));
}
, m_windowIsKey(true)
, m_modalEventLoop(0)
{
+ QQuickWebViewExperimental experimental(m_view);
+ experimental.setUseTraditionalDesktopBehaviour(true);
+ experimental.setRenderToOffscreenBuffer(true);
}
PlatformWebView::~PlatformWebView()