multiwindow: Use QCommandLineParser instead of parsing manually

Change-Id: I9d9e3ede6c8cce3aa1b42d0e98a0a5b19fefc73c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
bb10
Tor Arne Vestbø 2016-08-24 12:59:40 +02:00
parent d856d0e146
commit 10fe509123
1 changed files with 35 additions and 24 deletions

View File

@ -37,26 +37,21 @@
#include <QOpenGLFunctions>
#include <QPainter>
#include <QElapsedTimer>
#include <QCommandLineParser>
const char applicationDescription[] = "\n\
This application opens multiple windows and continuously schedules updates for\n\
them. Each of them is a separate QOpenGLWindow so there will be a separate\n\
context and swapBuffers call for each.\n\
\n\
By default the swap interval is 1 so the effect of multiple blocking swapBuffers\n\
on the main thread can be examined. (the result is likely to be different\n\
between platforms, for example OS X is buffer queuing meaning that it can\n\
block outside swap, resulting in perfect vsync for all three windows, while\n\
other systems that block on swap will kill the frame rate due to blocking the\n\
thread three times)\
";
// This application opens three windows and continuously schedules updates for
// them. Each of them is a separate QOpenGLWindow so there will be a separate
// context and swapBuffers call for each.
//
// By default the swap interval is 1 so the effect of three blocking swapBuffers
// on the main thread can be examined. (the result is likely to be different
// between platforms, for example OS X is buffer queuing meaning that it can
// block outside swap, resulting in perfect vsync for all three windows, while
// other systems that block on swap will kill the frame rate due to blocking the
// thread three times)
//
// Pass --novsync to set a swap interval of 0. This should give an unthrottled
// refresh on all platforms for all three windows.
//
// Passing --vsyncone sets swap interval to 1 for the first window and 0 to the
// others.
//
// Pass --extrawindows N to open N windows in addition to the default 3.
//
// For reference, below is a table of some test results.
//
// swap interval 1 for all swap interval 1 for only one and 0 for others
@ -135,8 +130,26 @@ private:
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
QCommandLineParser parser;
parser.setApplicationDescription(applicationDescription);
parser.addHelpOption();
QCommandLineOption noVsyncOption("novsync", "Disable Vsync by setting swap interval to 0. "
"This should give an unthrottled refresh on all platforms for all windows.");
parser.addOption(noVsyncOption);
QCommandLineOption vsyncOneOption("vsyncone", "Enable Vsync only for first window, "
"by setting swap interval to 1 for the first window and 0 for the others.");
parser.addOption(vsyncOneOption);
QCommandLineOption extraWindowsOption("extrawindows", "Open <N> windows in addition to the default 3.", "N", "0");
parser.addOption(extraWindowsOption);
parser.process(app);
QSurfaceFormat fmt;
if (QGuiApplication::arguments().contains(QLatin1String("--novsync"))) {
if (parser.isSet(noVsyncOption)) {
qDebug("swap interval 0 (no throttling)");
fmt.setSwapInterval(0);
} else {
@ -145,7 +158,7 @@ int main(int argc, char **argv)
QSurfaceFormat::setDefaultFormat(fmt);
Window w1(0);
if (QGuiApplication::arguments().contains(QLatin1String("--vsyncone"))) {
if (parser.isSet(vsyncOneOption)) {
qDebug("swap interval 1 for first window only");
QSurfaceFormat w1fmt = fmt;
w1fmt.setSwapInterval(1);
@ -163,9 +176,7 @@ int main(int argc, char **argv)
w3.show();
QList<QWindow *> extraWindows;
int countIdx;
if ((countIdx = QGuiApplication::arguments().indexOf(QLatin1String("--extrawindows"))) >= 0) {
int extraWindowCount = QGuiApplication::arguments().at(countIdx + 1).toInt();
if (int extraWindowCount = parser.value(extraWindowsOption).toInt()) {
for (int i = 0; i < extraWindowCount; ++i) {
Window *w = new Window(3 + i);
extraWindows << w;