diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-10-31 08:28:21 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-11-08 15:46:56 +0000 |
commit | beba8d925721c12fe8a8c924f0594adb0ced387e (patch) | |
tree | f3bd4fb1f73e168499a784dd7011dfef79d9271f /src/render | |
parent | fb140a24a2d8ffb217999249f7f95c859e827d46 (diff) |
Reduce allocations when building strings
We produce A LOT of these at every frame, reduces allocations by ~ 20%
(also less CPU load at creating and concatenating temp strings).
Change-Id: I342c16ed3b4b8d9e1c66ddf37cb9f60496eb9de5
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/renderers/opengl/jobs/renderviewjobutils.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/render/renderers/opengl/jobs/renderviewjobutils.cpp b/src/render/renderers/opengl/jobs/renderviewjobutils.cpp index cc211ba68..0ceb188fd 100644 --- a/src/render/renderers/opengl/jobs/renderviewjobutils.cpp +++ b/src/render/renderers/opengl/jobs/renderviewjobutils.cpp @@ -487,7 +487,12 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapHelper(ShaderData * } } } else { // Array of scalar/vec qmlPropertyName[0] - QString varName = blockName + QLatin1String(".") + qmlPropertyName + QLatin1String("[0]"); + QString varName; + varName.reserve(blockName.length() + 1 + qmlPropertyName.length() + 3); + varName.append(blockName); + varName.append(QLatin1String(".")); + varName.append(qmlPropertyName); + varName.append(QLatin1String("[0]")); if (uniforms.contains(varName)) { qCDebug(Shaders) << "UBO array member " << varName << " set for update"; activeUniformNamesToValue.insert(StringToInt::lookupId(varName), value); @@ -505,7 +510,11 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapHelper(ShaderData * activeUniformNamesToValue.insert(varId, value); } } else { // Scalar / Vec - QString varName = blockName + QLatin1Char('.') + qmlPropertyName; + QString varName; + varName.reserve(blockName.length() + 1 + qmlPropertyName.length()); + varName.append(blockName); + varName.append(QLatin1String(".")); + varName.append(qmlPropertyName); if (uniforms.contains(varName)) { qCDebug(Shaders) << "UBO scalar member " << varName << " set for update"; @@ -525,11 +534,15 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapStructHelper(Shader const auto end = properties.end(); while (it != end) { - const auto prefix = qmlPropertyName.isEmpty() ? QLatin1String("") : QLatin1String("."); - buildActiveUniformNameValueMapHelper(rShaderData, - blockName + prefix + qmlPropertyName, - it.key(), - it.value().value); + QString fullBlockName; + fullBlockName.reserve(blockName.length() + 1 + qmlPropertyName.length()); + fullBlockName.append(blockName); + if (!qmlPropertyName.isEmpty()) { + fullBlockName.append(QLatin1String(".")); + fullBlockName.append(qmlPropertyName); + } + buildActiveUniformNameValueMapHelper(rShaderData, fullBlockName, + it.key(), it.value().value); ++it; } } |