From 57e94c1b1bf68fde430cecc138f395decf35e917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Fri, 12 Feb 2010 15:19:27 +0100 Subject: Add support for running the GraphicsViewBenchmark application manually. Also add support for the command line options that were supported in the old benchmark (see 2f389a95f5b9e4c7130aa333586d803b639bf259). --- .../functional/GraphicsViewBenchmark/main.cpp | 92 ++++++++++++-- .../GraphicsViewBenchmark/widgets/commandline.cpp | 134 ++++++++++----------- .../GraphicsViewBenchmark/widgets/mainview.cpp | 14 +-- .../GraphicsViewBenchmark/widgets/settings.h | 7 +- 4 files changed, 151 insertions(+), 96 deletions(-) diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp index 4b589e3..e84b879 100644 --- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp +++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp @@ -50,6 +50,7 @@ #include "itemrecyclinglist.h" #include "simplelist.h" #include "theme.h" +#include "commandline.h" class tst_GraphicsViewBenchmark : public QObject { @@ -67,8 +68,8 @@ public: Fast = 64 }; - tst_GraphicsViewBenchmark() - : mMainView(0), currentListSize(-1), currentListType(None) {} + tst_GraphicsViewBenchmark(Settings *settings) + : mSettings(settings), mMainView(0), currentListSize(-1), currentListType(None) {} ~tst_GraphicsViewBenchmark() {} public slots: @@ -94,6 +95,7 @@ private slots: void scroll(); private: + Settings *mSettings; MainView *mMainView; DummyDataGenerator mDataGenerator; int currentListSize; @@ -312,19 +314,20 @@ void tst_GraphicsViewBenchmark::insertListData() void tst_GraphicsViewBenchmark::initTestCase() { - // ### Add support for: - // 1) OpenGL - // 2) FPS - // 3) Running the test manually - // Everything we need is already in widgets/[settings.cpp, commandline.cpp] - mMainView = new MainView(/*enableOpenGL=*/false, /*outputFPS=*/false); + mMainView = new MainView(mSettings->options() & Settings::UseOpenGL, + mSettings->options() & Settings::OutputFps); + if (mSettings->size().width() > 0 && mSettings->size().height() > 0) { + mMainView->resize(mSettings->size().width(), mSettings->size().height()); + mMainView->show(); + } else { #if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) - mMainView->showFullScreen(); + mMainView->showFullScreen(); #else - mMainView->resize(360, 640); - mMainView->show(); + mMainView->resize(360, 640); + mMainView->show(); #endif + } mDataGenerator.Reset(); SimpleList *list = new SimpleList; @@ -724,5 +727,70 @@ void tst_GraphicsViewBenchmark::scroll() } } -QTEST_MAIN(tst_GraphicsViewBenchmark) +int main(int argc, char *argv[]) +{ + Settings settings; + if (!readSettingsFromCommandLine(argc, argv, settings)) + return 1; + + // Eat command line arguments. + int aargc = 0; + for (int i = 0; i < argc; ++i) { + if (argv[i]) + ++aargc; + } + char **aargv = new char*[aargc]; + aargc = 0; + for (int i = 0; i < argc; ++i) { + if (argv[i]) + aargv[aargc++] = argv[i]; + } + + QApplication app(argc, argv); + + int returnValue = 0; + if (settings.options() & Settings::ManualTest) { + MainView view(settings.options() & Settings::UseOpenGL, settings.options() & Settings::OutputFps); + + DummyDataGenerator dataGenerator; + dataGenerator.Reset(); + + SimpleList *list = new SimpleList; + if (settings.options() & Settings::UseListItemCache) + list->setListItemCaching(true); + else + list->setListItemCaching(false); + + if (settings.listItemCount()) + fillList(dataGenerator, settings.listItemCount(), list); + else + fillList(dataGenerator, 500, list); + + view.setTestWidget(list); + + if ((settings.angle() % 360) != 0) + view.rotateContent(settings.angle()); + + if (settings.size().width() > 0 && settings.size().height() > 0) { + view.resize(settings.size().width(), settings.size().height()); + view.show(); + } else { +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) + view.showFullScreen(); +#else + view.resize(360, 640); + view.show(); +#endif + } + returnValue = app.exec(); + } else { + QTEST_DISABLE_KEYPAD_NAVIGATION + tst_GraphicsViewBenchmark tc(&settings); + returnValue = QTest::qExec(&tc, aargc, aargv); + } + + delete [] aargv; + return returnValue; +} + #include "main.moc" diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp index c913fe9..cdfa941 100644 --- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp +++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp @@ -45,76 +45,62 @@ static void usage(const char *appname) { - printf("%s [options]\n", appname); - printf("Options:\n"); - printf("\t -h,-help : This help\n"); -#ifdef AUTO_TESTS - printf("\t -o file : Write output to file\n"); - printf("\t -xml : Outputs results as XML document\n"); - printf("\t -lightxml : Outputs results as stream of XML tags\n"); - printf("\t -script-name file : Use this script instead of internal script file\n"); -#endif - printf("\t -resolution : UI resolution in format WxH where width and height are positive values\n"); - printf("\t -rotation : UI rotation in degrees\n"); - printf("\t -subtree-cache : Enables usage of subtree caching method\n"); - printf("\t -noresusage : Disables CPU and Memory usage measurement\n"); -#ifndef AUTO_TESTS - printf("\t -fps : Output FPS count to stdout during application execution\n"); - printf("\t -items : Count of items created to the list\n"); -#endif -#if ENABLE_OPENGL -#ifndef QT_NO_OPENGL - printf("\t -opengl : Enables OpenGL usage. Building PRECONDITIONS: ENABLE_OPENGL is on. QT_NO_OPENGL is off.\n"); -#endif -#endif + Q_UNUSED(appname); + printf(" GraphicsViewBenchmark related options:\n"); + printf(" -h,-help,--help: This help\n"); + printf(" -resolution : UI resolution in format WxH where width and height are positive values\n"); + printf(" -opengl : Enables OpenGL usage. Building PRECONDITIONS: QT_NO_OPENGL is off.\n"); + printf(" -manual : Run test manually \n"); + printf("\n The following options are available in manual mode:\n"); + printf(" -rotation : UI rotation in degrees\n"); + printf(" -subtree-cache : Enables usage of subtree caching method\n"); + printf(" -fps : Output FPS count to stdout during application execution\n"); + printf(" -items : Count of items created to the list\n"); printf("\n"); } +static inline bool argumentOnlyAvailableInManualMode(const char *arg) +{ + return (strcmp(arg, "-rotation") == 0) + || (strcmp(arg, "-subtree-cache") == 0) + || (strcmp(arg, "-fps") == 0) + || (strcmp(arg, "-items") == 0); +} + bool readSettingsFromCommandLine(int argc, char *argv[], Settings& config) { bool builtWithOpenGL = false; Settings::Options options; -#if ENABLE_OPENGL #ifndef QT_NO_OPENGL builtWithOpenGL = true; #endif -#endif - for (int i=0; i= argc) { - printf("-o needs an extra parameter specifying the filename\n"); - usage(argv[0]); - return false; + if (strcmp(argv[i], "-opengl") == 0) { + if (builtWithOpenGL) { + options |= Settings::UseOpenGL; + argv[i] = 0; } else { - config.setOutputFileName(QString(argv[i+1])); - i++; - } - } - if (strcmp(argv[i], "-xml") == 0) { - config.setResultFormat(1); // See FileLogger::ResultFormat - } - if (strcmp(argv[i], "-lightxml") == 0) { - config.setResultFormat(2); // See FileLogger::ResultFormat - } - if (strcmp(argv[i], "-script-name") == 0) { - if (i + 1 >= argc) { - printf("-script-name needs an extra parameter specifying the filename\n"); + printf("-opengl parameter can be used only with building PRECONDITIONS: QT_NO_OPENGL is off.\n"); usage(argv[0]); return false; - } else { - config.setScriptName(QString(argv[i+1])); - i++; } - } -#endif - if (strcmp(argv[i], "-resolution") == 0) { + } else if (strcmp(argv[i], "-resolution") == 0) { if (i + 1 >= argc) { printf("-resolution needs an extra parameter specifying the application UI resolution\n"); usage(argv[0]); @@ -137,9 +123,24 @@ bool readSettingsFromCommandLine(int argc, char *argv[], usage(argv[0]); return false; } + argv[i] = 0; i++; + argv[i] = 0; } } + + if (!argv[i]) + continue; + + if (!(options & Settings::ManualTest)) { + if (argumentOnlyAvailableInManualMode(argv[i])) { + printf("\nWrong option: '%s' is only available in manual mode\n\n", argv[i]); + usage(argv[0]); + return false; + } + continue; + } + if (strcmp(argv[i], "-rotation") == 0) { if (i + 1 >= argc) { printf("-rotation needs an extra parameter specifying the application UI rotation in degrees\n"); @@ -155,29 +156,17 @@ bool readSettingsFromCommandLine(int argc, char *argv[], return false; } config.setAngle(angle); + argv[i] = 0; i++; + argv[i] = 0; } - } - if (strcmp(argv[i], "-subtree-cache") == 0) { + } else if (strcmp(argv[i], "-subtree-cache") == 0) { options |= Settings::UseListItemCache; - } - if (strcmp(argv[i], "-opengl") == 0) { - if (builtWithOpenGL) - options |= Settings::UseOpenGL; - else { - printf("-opengl parameter can be used only with building PRECONDITIONS: ENABLE_OPENGL is on. QT_NO_OPENGL is off.\n"); - usage(argv[0]); - return false; - } - } - if (strcmp(argv[i], "-noresusage") == 0) { - options |= Settings::NoResourceUsage; - } -#ifndef AUTO_TESTS - if (strcmp(argv[i], "-fps") == 0) { + argv[i] = 0; + } else if (strcmp(argv[i], "-fps") == 0) { options |= Settings::OutputFps; - } - if (strcmp(argv[i], "-items") == 0) { + argv[i] = 0; + } else if (strcmp(argv[i], "-items") == 0) { if (i + 1 >= argc) { printf("-items needs an extra parameter specifying amount of list items\n"); usage(argv[0]); @@ -192,10 +181,11 @@ bool readSettingsFromCommandLine(int argc, char *argv[], return false; } config.setListItemCount(amount); + argv[i] = 0; i++; + argv[i] = 0; } } -#endif } config.setOptions(options); diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp index a9cf3ac..07a154b 100644 --- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp +++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp @@ -41,11 +41,9 @@ #include #include #include -#if ENABLE_OPENGL #ifndef QT_NO_OPENGL #include #endif -#endif #include #include "button.h" @@ -210,7 +208,9 @@ void MainView::paintEvent (QPaintEvent *event) else { QGraphicsView::paintEvent(event); } - emit repainted(); + + if (!m_OutputFps) + emit repainted(); m_frameCount++; m_fpsLatestTs.start(); @@ -261,7 +261,6 @@ void MainView::construct() { m_scene = new QGraphicsScene; -#ifdef ENABLE_OPENGL #ifndef QT_NO_OPENGL if (m_enableOpenGL) { qDebug() << "OpenGL enabled"; @@ -271,14 +270,11 @@ void MainView::construct() // Qt doc says: This is the preferred update mode for // viewports that do not support partial updates, such as QGLWidget... setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - } -#endif + } else #endif + setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); setScene(m_scene); - - if (!m_enableOpenGL) - setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); m_scene->setItemIndexMethod(QGraphicsScene::NoIndex); //setCacheMode(QGraphicsView::CacheBackground); diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h index 8473bf5..57ad970 100644 --- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h +++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h @@ -51,11 +51,12 @@ class Settings : public QObject { public: enum Option { - NoOptions = 0x0, + NoOptions = 0x1, UseListItemCache = 0x2, UseOpenGL = 0x4, - OutputFps = 0x5, - NoResourceUsage = 0x6, + OutputFps = 0x8, + NoResourceUsage = 0x10, + ManualTest = 0x20 }; Q_DECLARE_FLAGS(Options, Option) -- cgit v0.12