diff options
Diffstat (limited to 'src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp')
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp index 2f94bad75d..9675d6e48a 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp @@ -128,8 +128,9 @@ ShaderManager::Shader *ShaderManager::prepareMaterial(QSGMaterial *material) if (shader) return shader; - if (QSG_LOG_TIME_COMPILATION().isDebugEnabled() || QQuickProfiler::profilingSceneGraph()) + if (QSG_LOG_TIME_COMPILATION().isDebugEnabled()) qsg_renderer_timer.start(); + Q_QUICK_SG_PROFILE_START(QQuickProfiler::SceneGraphContextFrame); QSGMaterialShader *s = material->createShader(); QOpenGLContext *ctx = QOpenGLContext::currentContext(); @@ -159,8 +160,7 @@ ShaderManager::Shader *ShaderManager::prepareMaterial(QSGMaterial *material) qCDebug(QSG_LOG_TIME_COMPILATION, "shader compiled in %dms", (int) qsg_renderer_timer.elapsed()); - Q_QUICK_SG_PROFILE(QQuickProfiler::SceneGraphContextFrame, ( - qsg_renderer_timer.nsecsElapsed())); + Q_QUICK_SG_PROFILE_END(QQuickProfiler::SceneGraphContextFrame); rewrittenShaders[type] = shader; return shader; @@ -173,8 +173,9 @@ ShaderManager::Shader *ShaderManager::prepareMaterialNoRewrite(QSGMaterial *mate if (shader) return shader; - if (QSG_LOG_TIME_COMPILATION().isDebugEnabled() || QQuickProfiler::profilingSceneGraph()) + if (QSG_LOG_TIME_COMPILATION().isDebugEnabled()) qsg_renderer_timer.start(); + Q_QUICK_SG_PROFILE_START(QQuickProfiler::SceneGraphContextFrame); QSGMaterialShader *s = static_cast<QSGMaterialShader *>(material->createShader()); context->compile(s, material); @@ -190,8 +191,7 @@ ShaderManager::Shader *ShaderManager::prepareMaterialNoRewrite(QSGMaterial *mate qCDebug(QSG_LOG_TIME_COMPILATION, "shader compiled in %dms (no rewrite)", (int) qsg_renderer_timer.elapsed()); - Q_QUICK_SG_PROFILE(QQuickProfiler::SceneGraphContextFrame, ( - qsg_renderer_timer.nsecsElapsed())); + Q_QUICK_SG_PROFILE_END(QQuickProfiler::SceneGraphContextFrame); return shader; } @@ -838,8 +838,8 @@ Renderer::~Renderer() for (int i=0; i<m_batchPool.size(); ++i) qsg_wipeBatch(m_batchPool.at(i), this); } - // The shadowtree - qDeleteAll(m_nodes.values()); + foreach (Node *n, m_nodes.values()) + m_nodeAllocator.release(n); // Remaining elements... for (int i=0; i<m_elementsToDelete.size(); ++i) { @@ -847,7 +847,7 @@ Renderer::~Renderer() if (e->isRenderNode) delete static_cast<RenderNodeElement *>(e); else - delete e; + m_elementAllocator.release(e); } } @@ -986,7 +986,8 @@ void Renderer::nodeWasAdded(QSGNode *node, Node *shadowParent) if (node->isSubtreeBlocked()) return; - Node *snode = new Node(node); + Node *snode = m_nodeAllocator.allocate(); + snode->sgNode = node; m_nodes.insert(node, snode); if (shadowParent) { snode->parent = shadowParent; @@ -994,7 +995,8 @@ void Renderer::nodeWasAdded(QSGNode *node, Node *shadowParent) } if (node->type() == QSGNode::GeometryNodeType) { - snode->data = new Element(static_cast<QSGGeometryNode *>(node)); + snode->data = m_elementAllocator.allocate(); + snode->element()->setNode(static_cast<QSGGeometryNode *>(node)); } else if (node->type() == QSGNode::ClipNodeType) { snode->data = new ClipBatchRootInfo; @@ -1057,7 +1059,7 @@ void Renderer::nodeWasRemoved(Node *node) } Q_ASSERT(m_nodes.contains(node->sgNode)); - delete m_nodes.take(node->sgNode); + m_nodeAllocator.release(m_nodes.take(node->sgNode)); } void Renderer::turnNodeIntoBatchRoot(Node *node) @@ -1240,8 +1242,8 @@ void Renderer::buildRenderLists(QSGNode *node) if (node->isSubtreeBlocked()) return; - Q_ASSERT(m_nodes.contains(node)); Node *shadowNode = m_nodes.value(node); + Q_ASSERT(shadowNode); if (node->type() == QSGNode::GeometryNodeType) { QSGGeometryNode *gn = static_cast<QSGGeometryNode *>(node); @@ -1262,7 +1264,7 @@ void Renderer::buildRenderLists(QSGNode *node) } else if (node->type() == QSGNode::ClipNodeType || shadowNode->isBatchRoot) { Q_ASSERT(m_nodes.contains(node)); - BatchRootInfo *info = batchRootInfo(m_nodes.value(node)); + BatchRootInfo *info = batchRootInfo(shadowNode); if (node == m_partialRebuildRoot) { m_nextRenderOrder = info->firstOrder; QSGNODE_TRAVERSE(node) @@ -2466,7 +2468,7 @@ void Renderer::deleteRemovedElements() if (e->isRenderNode) delete static_cast<RenderNodeElement *>(e); else - delete e; + m_elementAllocator.release(e); } m_elementsToDelete.reset(); } |