From beba8d925721c12fe8a8c924f0594adb0ced387e Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Thu, 31 Oct 2019 08:28:21 +0000 Subject: 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 --- .../renderers/opengl/jobs/renderviewjobutils.cpp | 27 ++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/render') 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; } } -- cgit v1.2.3