diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-05-28 15:24:18 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-05-28 15:35:03 +0200 |
commit | ba0899542cf03a685335bf4e02edfb377bade224 (patch) | |
tree | 554213486fd3420745da3821c3e4502e4c15830f /src/quick/scenegraph/coreapi | |
parent | 6f411ef9d460d6a4f73a455b6eec9afc2f52d305 (diff) | |
parent | 43484528552cb2ba3dc1dabfcce22ed40bf4f8db (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
src/quick/doc/src/appdevguide/porting.qdoc
sync.profile
Change-Id: Iec5516c596c3eca60a3e6ceb1d45f2a7a1595c12
Diffstat (limited to 'src/quick/scenegraph/coreapi')
-rw-r--r-- | src/quick/scenegraph/coreapi/qsggeometry.cpp | 18 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgmaterial.cpp | 1 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgmaterial.h | 1 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgnode.cpp | 6 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgrenderer.cpp | 52 |
5 files changed, 48 insertions, 30 deletions
diff --git a/src/quick/scenegraph/coreapi/qsggeometry.cpp b/src/quick/scenegraph/coreapi/qsggeometry.cpp index 818b9b26aa..7f09af4da3 100644 --- a/src/quick/scenegraph/coreapi/qsggeometry.cpp +++ b/src/quick/scenegraph/coreapi/qsggeometry.cpp @@ -332,42 +332,42 @@ const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_ColoredPoint2D() /*! \fn const QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D() const - Convenience function to access the vertex data as an immuatble + Convenience function to access the vertex data as an immutable array of QSGGeometry::ColoredPoint2D. */ /*! \fn QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D() - Convenience function to access the vertex data as a muatble + Convenience function to access the vertex data as a mutable array of QSGGeometry::ColoredPoint2D. */ /*! \fn const QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D() const - Convenience function to access the vertex data as an immuatble + Convenience function to access the vertex data as an immutable array of QSGGeometry::TexturedPoint2D. */ /*! \fn QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D() - Convenience function to access the vertex data as a muatble + Convenience function to access the vertex data as a mutable array of QSGGeometry::TexturedPoint2D. */ /*! \fn const QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D() const - Convenience function to access the vertex data as an immuatble + Convenience function to access the vertex data as an immutable array of QSGGeometry::Point2D. */ /*! \fn QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D() - Convenience function to access the vertex data as a muatble + Convenience function to access the vertex data as a mutable array of QSGGeometry::Point2D. */ @@ -705,7 +705,8 @@ void QSGGeometry::updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, The default is AlwaysUploadPattern. When set to anything other than the default, the user must call markIndexDataDirty() after changing - the index data. + the index data, in addition to calling QSGNode::markDirty() with + QSGNode::DirtyGeometry. */ void QSGGeometry::setIndexDataPattern(DataPattern p) @@ -728,7 +729,8 @@ void QSGGeometry::setIndexDataPattern(DataPattern p) The default is AlwaysUploadPattern. When set to anything other than the default, the user must call markVertexDataDirty() after changing - the vertex data. + the vertex data, in addition to calling QSGNode::markDirty() with + QSGNode::DirtyGeometry. */ void QSGGeometry::setVertexDataPattern(DataPattern p) diff --git a/src/quick/scenegraph/coreapi/qsgmaterial.cpp b/src/quick/scenegraph/coreapi/qsgmaterial.cpp index c0794d0d69..9346236db9 100644 --- a/src/quick/scenegraph/coreapi/qsgmaterial.cpp +++ b/src/quick/scenegraph/coreapi/qsgmaterial.cpp @@ -556,6 +556,7 @@ static void qt_print_material_count() QSGMaterial::QSGMaterial() : m_flags(0) + , m_reserved(0) { #ifndef QT_NO_DEBUG if (qsg_leak_check) { diff --git a/src/quick/scenegraph/coreapi/qsgmaterial.h b/src/quick/scenegraph/coreapi/qsgmaterial.h index ee8889deac..20ab21ad28 100644 --- a/src/quick/scenegraph/coreapi/qsgmaterial.h +++ b/src/quick/scenegraph/coreapi/qsgmaterial.h @@ -133,6 +133,7 @@ public: void setFlag(Flags flags, bool on = true); private: + friend class QSGContext; Flags m_flags; void *m_reserved; Q_DISABLE_COPY(QSGMaterial) diff --git a/src/quick/scenegraph/coreapi/qsgnode.cpp b/src/quick/scenegraph/coreapi/qsgnode.cpp index 8bf9ae8e76..25f8f342c9 100644 --- a/src/quick/scenegraph/coreapi/qsgnode.cpp +++ b/src/quick/scenegraph/coreapi/qsgnode.cpp @@ -129,12 +129,12 @@ static void qt_print_node_count() before rendering starts. \value OwnsGeometry Only valid for QSGGeometryNode and QSGClipNode. The node has ownership over the QSGGeometry instance and will - delete it when the node is destroyed. + delete it when the node is destroyed or a geometry is assigned. \value OwnsMaterial Only valid for QSGGeometryNode. The node has ownership - over the material and will delete it when the node is destroyed. + over the material and will delete it when the node is destroyed or a material is assigned. \value OwnsOpaqueMaterial Only valid for QSGGeometryNode. The node has ownership over the opaque material and will delete it when the node is - destroyed. + destroyed or a material is assigned. */ /*! diff --git a/src/quick/scenegraph/coreapi/qsgrenderer.cpp b/src/quick/scenegraph/coreapi/qsgrenderer.cpp index b46d45be57..805cfaad0d 100644 --- a/src/quick/scenegraph/coreapi/qsgrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgrenderer.cpp @@ -53,6 +53,8 @@ #include <qdatetime.h> +#include <private/qqmlprofilerservice_p.h> + QT_BEGIN_NAMESPACE //#define RENDERER_DEBUG @@ -62,9 +64,9 @@ QT_BEGIN_NAMESPACE #ifndef QSG_NO_RENDER_TIMING static bool qsg_render_timing = !qgetenv("QSG_RENDER_TIMING").isEmpty(); -static QTime frameTimer; -static int preprocessTime; -static int updatePassTime; +static QElapsedTimer frameTimer; +static qint64 preprocessTime; +static qint64 updatePassTime; #endif void QSGBindable::clear(QSGRenderer::ClearMode mode) const @@ -238,10 +240,11 @@ void QSGRenderer::renderScene(const QSGBindable &bindable) #ifndef QSG_NO_RENDER_TIMING - if (qsg_render_timing) + bool profileFrames = qsg_render_timing || QQmlProfilerService::enabled; + if (profileFrames) frameTimer.start(); - int bindTime = 0; - int renderTime = 0; + qint64 bindTime = 0; + qint64 renderTime = 0; #endif m_bindable = &bindable; @@ -249,8 +252,8 @@ void QSGRenderer::renderScene(const QSGBindable &bindable) bindable.bind(); #ifndef QSG_NO_RENDER_TIMING - if (qsg_render_timing) - bindTime = frameTimer.elapsed(); + if (profileFrames) + bindTime = frameTimer.nsecsElapsed(); #endif #ifndef QT_NO_DEBUG @@ -270,8 +273,8 @@ void QSGRenderer::renderScene(const QSGBindable &bindable) render(); #ifndef QSG_NO_RENDER_TIMING - if (qsg_render_timing) - renderTime = frameTimer.elapsed(); + if (profileFrames) + renderTime = frameTimer.nsecsElapsed(); #endif glDisable(GL_SCISSOR_TEST); @@ -292,12 +295,22 @@ void QSGRenderer::renderScene(const QSGBindable &bindable) #ifndef QSG_NO_RENDER_TIMING if (qsg_render_timing) { printf(" - Breakdown of render time: preprocess=%d, updates=%d, binding=%d, render=%d, total=%d\n", - preprocessTime, - updatePassTime - preprocessTime, - bindTime - updatePassTime, - renderTime - bindTime, - renderTime); + int(preprocessTime / 1000000), + int((updatePassTime - preprocessTime) / 1000000), + int((bindTime - updatePassTime) / 1000000), + int((renderTime - bindTime) / 1000000), + int(renderTime / 1000000)); + } + + if (QQmlProfilerService::enabled) { + QQmlProfilerService::sceneGraphFrame( + QQmlProfilerService::SceneGraphRendererFrame, + preprocessTime, + updatePassTime - preprocessTime, + bindTime - updatePassTime, + renderTime - bindTime); } + #endif } @@ -380,16 +393,17 @@ void QSGRenderer::preprocess() } #ifndef QSG_NO_RENDER_TIMING - if (qsg_render_timing) - preprocessTime = frameTimer.elapsed(); + bool profileFrames = qsg_render_timing || QQmlProfilerService::enabled; + if (profileFrames) + preprocessTime = frameTimer.nsecsElapsed(); #endif nodeUpdater()->setToplevelOpacity(context()->renderAlpha()); nodeUpdater()->updateStates(m_root_node); #ifndef QSG_NO_RENDER_TIMING - if (qsg_render_timing) - updatePassTime = frameTimer.elapsed(); + if (profileFrames) + updatePassTime = frameTimer.nsecsElapsed(); #endif } |