Add QML_RENDER_TIMING output for the single-threaded case
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>
Fri, 7 Sep 2012 10:31:43 +0000 (12:31 +0200)
committerQt by Nokia <qt-info@nokia.com>
Mon, 10 Sep 2012 12:24:05 +0000 (14:24 +0200)
Change-Id: Ia3958c7c26bf2fd9dd72a07fc6f5ff3a28b0a349
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
src/quick/items/qquickwindowmanager.cpp

index 7ddedad..930e2a9 100644 (file)
@@ -58,6 +58,8 @@
 
 QT_BEGIN_NAMESPACE
 
+DEFINE_BOOL_CONFIG_OPTION(qquick_render_timing, QML_RENDER_TIMING)
+
 extern Q_GUI_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha);
 
 /*!
@@ -232,9 +234,22 @@ void QQuickTrivialWindowManager::renderWindow(QQuickWindow *window)
 
     QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window);
     cd->polishItems();
+
+    int renderTime, syncTime;
+    QTime renderTimer;
+    if (qquick_render_timing())
+        renderTimer.start();
+
     cd->syncSceneGraph();
+
+    if (qquick_render_timing())
+        syncTime = renderTimer.elapsed();
+
     cd->renderSceneGraph(window->size());
 
+    if (qquick_render_timing())
+        renderTime = renderTimer.elapsed() - syncTime;
+
     if (data.grabOnly) {
         grabContent = qt_gl_read_framebuffer(window->size(), false, false);
         data.grabOnly = false;
@@ -245,6 +260,13 @@ void QQuickTrivialWindowManager::renderWindow(QQuickWindow *window)
         cd->fireFrameSwapped();
     }
 
+    if (qquick_render_timing()) {
+        const int swapTime = renderTimer.elapsed() - renderTime;
+        qDebug() << "- Breakdown of frame time; sync:" << syncTime
+                 << "ms render:" << renderTime << "ms swap:" << swapTime
+                 << "ms total:" << swapTime + renderTime << "ms";
+    }
+
     // Might have been set during syncSceneGraph()
     if (data.updatePending)
         maybeUpdate(window);