From: Gunnar Sletta Date: Mon, 30 Sep 2013 11:19:30 +0000 (+0200) Subject: Enable profiling of materials and atlas textures X-Git-Tag: upstream/5.2.1~295 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4c09e1e0560e7a12ed80ec0603401d3441fd54e1;p=platform%2Fupstream%2Fqtdeclarative.git Enable profiling of materials and atlas textures Task-number: QTBUG-33459 Change-Id: Ie9ea176fbb7ee46a128b4bf66a8f4475a5d4c90b Reviewed-by: Aurindam Jana --- diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp index ed76102..18f09fe 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp @@ -46,6 +46,8 @@ #include #include +#include + #include #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::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(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 ad90911..3710f05 100644 --- a/src/quick/scenegraph/util/qsgatlastexture.cpp +++ b/src/quick/scenegraph/util/qsgatlastexture.cpp @@ -50,13 +50,16 @@ #include +#include + #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; iimage().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 }