Home | History | Annotate | Download | only in webgl
      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 
     29 class GraphicsView;
     30 
     31 class tst_WebGlPerformance : public QObject {
     32     Q_OBJECT
     33 
     34 private slots:
     35     void init();
     36     void cleanup();
     37 
     38     void benchSoftwareFallbackRgb16();
     39     void benchSoftwareFallbackRgb32();
     40     void benchSoftwareFallbackArgb32();
     41     void benchSoftwareFallbackArgb32Premultiplied();
     42 
     43 private:
     44     void benchmarkFrameRenderingOnImage(QImage::Format);
     45 
     46     QScopedPointer<GraphicsView> m_view;
     47 };
     48 
     49 class GraphicsView : public QGraphicsView {
     50 public:
     51     GraphicsView();
     52     QGraphicsWebView* m_webView;
     53 
     54 protected:
     55     void resizeEvent(QResizeEvent*);
     56 };
     57 
     58 GraphicsView::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 
     73 void 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 
     81 void tst_WebGlPerformance::init()
     82 {
     83     m_view.reset(new GraphicsView);
     84     m_view->showMaximized();
     85     QTest::qWaitForWindowShown(m_view.data());
     86 }
     87 
     88 void tst_WebGlPerformance::cleanup()
     89 {
     90     m_view.reset();
     91 }
     92 
     93 void tst_WebGlPerformance::benchSoftwareFallbackRgb16()
     94 {
     95     benchmarkFrameRenderingOnImage(QImage::Format_RGB16);
     96 }
     97 
     98 void tst_WebGlPerformance::benchSoftwareFallbackRgb32()
     99 {
    100     benchmarkFrameRenderingOnImage(QImage::Format_RGB32);
    101 }
    102 
    103 void tst_WebGlPerformance::benchSoftwareFallbackArgb32()
    104 {
    105     benchmarkFrameRenderingOnImage(QImage::Format_ARGB32);
    106 }
    107 
    108 void tst_WebGlPerformance::benchSoftwareFallbackArgb32Premultiplied()
    109 {
    110     benchmarkFrameRenderingOnImage(QImage::Format_ARGB32_Premultiplied);
    111 }
    112 
    113 void 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 
    128 QTEST_MAIN(tst_WebGlPerformance)
    129 
    130 #include "tst_webgl.moc"
    131