#include <QtGui/QGuiApplication>
#include <QtGui/QOpenGLFramebufferObject>
+#include <private/qqmlprofilerservice_p.h>
+
#include <algorithm>
#ifndef GL_DOUBLE
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)
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();
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;
}
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();
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;
}
#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
// 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 &&
} 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
}