1/* 2 Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies) 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Library General Public 6 License as published by the Free Software Foundation; either 7 version 2 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Library General Public License for more details. 13 14 You should have received a copy of the GNU Library General Public License 15 along with this library; see the file COPYING.LIB. If not, write to 16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 Boston, MA 02110-1301, USA. 18*/ 19 20 21#include "../../util.h" 22#include <QGLWidget> 23#include <QGraphicsView> 24#include <QGraphicsWebView> 25#include <QScopedPointer> 26#include <QWebFrame> 27#include <QtTest/QtTest> 28 29class GraphicsView; 30 31class tst_WebGlPerformance : public QObject { 32 Q_OBJECT 33 34private slots: 35 void init(); 36 void cleanup(); 37 38 void benchSoftwareFallbackRgb16(); 39 void benchSoftwareFallbackRgb32(); 40 void benchSoftwareFallbackArgb32(); 41 void benchSoftwareFallbackArgb32Premultiplied(); 42 43private: 44 void benchmarkFrameRenderingOnImage(QImage::Format); 45 46 QScopedPointer<GraphicsView> m_view; 47}; 48 49class GraphicsView : public QGraphicsView { 50public: 51 GraphicsView(); 52 QGraphicsWebView* m_webView; 53 54protected: 55 void resizeEvent(QResizeEvent*); 56}; 57 58GraphicsView::GraphicsView() 59{ 60 QGraphicsScene* const scene = new QGraphicsScene(this); 61 setScene(scene); 62 63 m_webView = new QGraphicsWebView; 64 scene->addItem(m_webView); 65 66 m_webView->page()->settings()->setAttribute(QWebSettings::WebGLEnabled, true); 67 68 resize(800, 600); 69 setFrameShape(QFrame::NoFrame); 70 setViewport(new QGLWidget); 71} 72 73void GraphicsView::resizeEvent(QResizeEvent* event) 74{ 75 QGraphicsView::resizeEvent(event); 76 QRectF rect(QPoint(0, 0), event->size()); 77 m_webView->setGeometry(rect); 78 scene()->setSceneRect(rect); 79} 80 81void tst_WebGlPerformance::init() 82{ 83 m_view.reset(new GraphicsView); 84 m_view->showMaximized(); 85 QTest::qWaitForWindowShown(m_view.data()); 86} 87 88void tst_WebGlPerformance::cleanup() 89{ 90 m_view.reset(); 91} 92 93void tst_WebGlPerformance::benchSoftwareFallbackRgb16() 94{ 95 benchmarkFrameRenderingOnImage(QImage::Format_RGB16); 96} 97 98void tst_WebGlPerformance::benchSoftwareFallbackRgb32() 99{ 100 benchmarkFrameRenderingOnImage(QImage::Format_RGB32); 101} 102 103void tst_WebGlPerformance::benchSoftwareFallbackArgb32() 104{ 105 benchmarkFrameRenderingOnImage(QImage::Format_ARGB32); 106} 107 108void tst_WebGlPerformance::benchSoftwareFallbackArgb32Premultiplied() 109{ 110 benchmarkFrameRenderingOnImage(QImage::Format_ARGB32_Premultiplied); 111} 112 113void tst_WebGlPerformance::benchmarkFrameRenderingOnImage(QImage::Format format) 114{ 115 m_view->m_webView->load(QUrl(QLatin1String("qrc:///testcases/10000_triangles.html"))); 116 const bool pageLoaded = waitForSignal(m_view->m_webView, SIGNAL(loadFinished(bool))); 117 Q_ASSERT(pageLoaded); 118 Q_UNUSED(pageLoaded); 119 120 QImage target(m_view->size(), format); 121 QBENCHMARK { 122 QPainter painter(&target); 123 m_view->render(&painter); 124 painter.end(); 125 } 126} 127 128QTEST_MAIN(tst_WebGlPerformance) 129 130#include "tst_webgl.moc" 131