diff options
author | Gunnar Sletta <gunnar.sletta@digia.com> | 2013-09-30 13:19:30 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-03 16:18:44 +0200 |
commit | 4c09e1e0560e7a12ed80ec0603401d3441fd54e1 (patch) | |
tree | 4b378fa8a881bc5bcddafd208d1268d116fff9dc /src/quick | |
parent | 72a970760bd72adb6de321b4006f1d8419dcbb9f (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.cpp | 38 | ||||
-rw-r--r-- | src/quick/scenegraph/util/qsgatlastexture.cpp | 30 |
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 } |