aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@digia.com>2013-09-30 13:19:30 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-03 16:18:44 +0200
commit4c09e1e0560e7a12ed80ec0603401d3441fd54e1 (patch)
tree4b378fa8a881bc5bcddafd208d1268d116fff9dc /src/quick
parent72a970760bd72adb6de321b4006f1d8419dcbb9f (diff)
Enable profiling of materials and atlas textures
Task-number: QTBUG-33459 Change-Id: Ie9ea176fbb7ee46a128b4bf66a8f4475a5d4c90b Reviewed-by: Aurindam Jana <aurindam.jana@digia.com>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp38
-rw-r--r--src/quick/scenegraph/util/qsgatlastexture.cpp30
2 files changed, 60 insertions, 8 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index ed76102c2d..18f09feebd 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -46,6 +46,8 @@
#include <QtGui/QGuiApplication>
#include <QtGui/QOpenGLFramebufferObject>
+#include <private/qqmlprofilerservice_p.h>
+
#include <algorithm>
#ifndef GL_DOUBLE
@@ -69,6 +71,10 @@ const bool debug_noalpha = qgetenv("QSG_RENDERER_DEBUG").contains("noalpha");
const bool debug_noopaque = qgetenv("QSG_RENDERER_DEBUG").contains("noopaque");
const bool debug_noclip = qgetenv("QSG_RENDERER_DEBUG").contains("noclip");
+#ifndef QSG_NO_RENDER_TIMING
+static bool qsg_render_timing = !qgetenv("QSG_RENDER_TIMING").isEmpty();
+static QElapsedTimer qsg_renderer_timer;
+#endif
#define QSGNODE_TRAVERSE(NODE) for (QSGNode *child = NODE->firstChild(); child; child = child->nextSibling())
#define SHADOWNODE_TRAVERSE(NODE) for (QList<Node *>::const_iterator child = NODE->children.constBegin(); child != NODE->children.constEnd(); ++child)
@@ -118,6 +124,11 @@ ShaderManager::Shader *ShaderManager::prepareMaterial(QSGMaterial *material)
if (shader)
return shader;
+#ifndef QSG_NO_RENDER_TIMING
+ if (qsg_render_timing || QQmlProfilerService::enabled)
+ qsg_renderer_timer.start();
+#endif
+
QSGMaterialShader *s = material->createShader();
QOpenGLShaderProgram *p = s->program();
@@ -151,6 +162,17 @@ ShaderManager::Shader *ShaderManager::prepareMaterial(QSGMaterial *material)
Q_ASSERT(shader->pos_order >= 0);
Q_ASSERT(shader->id_zRange >= 0);
+#ifndef QSG_NO_RENDER_TIMING
+ if (qsg_render_timing)
+ printf(" - compiling material: %dms\n", (int) qsg_renderer_timer.elapsed());
+
+ if (QQmlProfilerService::enabled) {
+ QQmlProfilerService::sceneGraphFrame(
+ QQmlProfilerService::SceneGraphContextFrame,
+ qsg_renderer_timer.nsecsElapsed());
+ }
+#endif
+
rewrittenShaders[type] = shader;
return shader;
}
@@ -162,6 +184,11 @@ ShaderManager::Shader *ShaderManager::prepareMaterialNoRewrite(QSGMaterial *mate
if (shader)
return shader;
+#ifndef QSG_NO_RENDER_TIMING
+ if (qsg_render_timing || QQmlProfilerService::enabled)
+ qsg_renderer_timer.start();
+#endif
+
QSGMaterialShader *s = static_cast<QSGMaterialShader *>(material->createShader());
s->compile();
s->initialize();
@@ -174,6 +201,17 @@ ShaderManager::Shader *ShaderManager::prepareMaterialNoRewrite(QSGMaterial *mate
stockShaders[type] = shader;
+#ifndef QSG_NO_RENDER_TIMING
+ if (qsg_render_timing)
+ printf(" - compiling material: %dms\n", (int) qsg_renderer_timer.elapsed());
+
+ if (QQmlProfilerService::enabled) {
+ QQmlProfilerService::sceneGraphFrame(
+ QQmlProfilerService::SceneGraphContextFrame,
+ qsg_renderer_timer.nsecsElapsed());
+ }
+#endif
+
return shader;
}
diff --git a/src/quick/scenegraph/util/qsgatlastexture.cpp b/src/quick/scenegraph/util/qsgatlastexture.cpp
index ad90911b9c..3710f05b9a 100644
--- a/src/quick/scenegraph/util/qsgatlastexture.cpp
+++ b/src/quick/scenegraph/util/qsgatlastexture.cpp
@@ -50,13 +50,16 @@
#include <private/qsgtexture_p.h>
+#include <private/qqmlprofilerservice_p.h>
+
#ifndef GL_BGRA
#define GL_BGRA 0x80E1
#endif
-#ifndef QSG_NO_RENDERER_TIMING
-static bool qsg_render_timing = !qgetenv("QSG_RENDERER_TIMING").isEmpty();
+#ifndef QSG_NO_RENDER_TIMING
+static bool qsg_render_timing = !qgetenv("QSG_RENDER_TIMING").isEmpty();
+static QElapsedTimer qsg_renderer_timer;
#endif
namespace QSGAtlasTexture
@@ -331,10 +334,10 @@ bool Atlas::bind(QSGTexture::Filtering filtering)
// Upload all pending images..
for (int i=0; i<m_pending_uploads.size(); ++i) {
-#ifndef QSG_NO_RENDERER_TIMING
- QElapsedTimer timer;
- if (qsg_render_timing)
- timer.start();
+#ifndef QSG_NO_RENDER_TIMING
+ bool profileFrames = qsg_render_timing || QQmlProfilerService::enabled;
+ if (profileFrames)
+ qsg_renderer_timer.start();
#endif
if (m_externalFormat == GL_BGRA &&
@@ -343,12 +346,23 @@ bool Atlas::bind(QSGTexture::Filtering filtering)
} else {
upload(m_pending_uploads.at(i));
}
-#ifndef QSG_NO_RENDERER_TIMING
+
+#ifndef QSG_NO_RENDER_TIMING
if (qsg_render_timing) {
printf(" - AtlasTexture(%dx%d), uploaded in %d ms\n",
m_pending_uploads.at(i)->image().width(),
m_pending_uploads.at(i)->image().height(),
- (int) timer.elapsed());
+ (int) (qsg_renderer_timer.elapsed()));
+ }
+
+ if (QQmlProfilerService::enabled) {
+ QQmlProfilerService::sceneGraphFrame(
+ QQmlProfilerService::SceneGraphTexturePrepare,
+ 0, // bind (not relevant)
+ 0, // convert (not relevant)
+ 0, // swizzle (not relevant)
+ qsg_renderer_timer.nsecsElapsed(), // (upload all of the above)
+ 0); // mipmap (not used ever...)
}
#endif
}