diff -r 4f2f89ce4247 -r 303757a437d3 WebKit/qt/tests/benchmarks/painting/tst_painting.cpp --- a/WebKit/qt/tests/benchmarks/painting/tst_painting.cpp Fri Sep 17 09:02:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2009 Holger Hans Peter Freyther - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include - -#include -#include -#include -#include - -/** - * Starts an event loop that runs until the given signal is received. - Optionally the event loop - * can return earlier on a timeout. - * - * \return \p true if the requested signal was received - * \p false on timeout - */ -static bool waitForSignal(QObject* obj, const char* signal, int timeout = 0) -{ - QEventLoop loop; - QObject::connect(obj, signal, &loop, SLOT(quit())); - QTimer timer; - QSignalSpy timeoutSpy(&timer, SIGNAL(timeout())); - if (timeout > 0) { - QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); - timer.setSingleShot(true); - timer.start(timeout); - } - loop.exec(); - return timeoutSpy.isEmpty(); -} - -class tst_Painting : public QObject -{ - Q_OBJECT - -public: - -public Q_SLOTS: - void init(); - void cleanup(); - -private Q_SLOTS: - void paint_data(); - void paint(); - void textAreas(); - -private: - QWebView* m_view; - QWebPage* m_page; -}; - -void tst_Painting::init() -{ - m_view = new QWebView; - m_page = m_view->page(); - - QSize viewportSize(1024, 768); - m_view->setFixedSize(viewportSize); - m_page->setViewportSize(viewportSize); -} - -void tst_Painting::cleanup() -{ - delete m_view; -} - -void tst_Painting::paint_data() -{ - QTest::addColumn("url"); - QTest::newRow("amazon") << QUrl("http://www.amazon.com"); -} - -void tst_Painting::paint() -{ - QFETCH(QUrl, url); - - m_view->load(url); - ::waitForSignal(m_view, SIGNAL(loadFinished(bool))); - - /* force a layout */ - QWebFrame* mainFrame = m_page->mainFrame(); - mainFrame->toPlainText(); - - QPixmap pixmap(m_page->viewportSize()); - QBENCHMARK { - QPainter painter(&pixmap); - mainFrame->render(&painter, QRect(QPoint(0, 0), m_page->viewportSize())); - painter.end(); - } -} - -void tst_Painting::textAreas() -{ - m_view->load(QUrl("data:text/html;")); - ::waitForSignal(m_view, SIGNAL(loadFinished(bool))); - - QWebElement bodyElement = m_page->mainFrame()->findFirstElement("body"); - - int count = 100; - while (count--) { - QString markup(""); - bodyElement.appendInside(markup); - } - - /* force a layout */ - QWebFrame* mainFrame = m_page->mainFrame(); - mainFrame->toPlainText(); - - QPixmap pixmap(mainFrame->contentsSize()); - QBENCHMARK { - QPainter painter(&pixmap); - mainFrame->render(&painter, QRect(QPoint(0, 0), mainFrame->contentsSize())); - painter.end(); - } -} - -QTEST_MAIN(tst_Painting) -#include "tst_painting.moc"