From 0445f31a6fae37aa4f6b92978ff58b0f2848d36b Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Wed, 24 Aug 2016 14:10:17 +0300 Subject: Use QStringBuilder more Reduce allocations. Change-Id: I8b8a0d0360e618c65894f1f7c12476b41a1dbc5d Reviewed-by: Shawn Rutledge --- src/quick/accessible/qaccessiblequickitem.cpp | 4 ++-- src/quick/items/qquickopenglshadereffect.cpp | 16 +++++++--------- src/quick/items/qquickopenglshadereffectnode.cpp | 6 ++---- src/quick/items/qquickshadereffectmesh.cpp | 15 ++++++--------- src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp | 6 +++--- .../scenegraph/qsgdefaultdistancefieldglyphcache_p.h | 10 ++++------ src/quick/scenegraph/util/qsgshadersourcebuilder.cpp | 11 ++++------- src/quick/util/qquickstyledtext.cpp | 3 +-- 8 files changed, 29 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp index acea958e20..58eab508ad 100644 --- a/src/quick/accessible/qaccessiblequickitem.cpp +++ b/src/quick/accessible/qaccessiblequickitem.cpp @@ -273,8 +273,8 @@ void QAccessibleQuickItem::doAction(const QString &actionName) return; // Look for and call the accessible[actionName]Action() function on the item. // This allows for overriding the default action handling. - const QByteArray functionName = QByteArrayLiteral("accessible") + actionName.toLatin1() + QByteArrayLiteral("Action"); - if (object()->metaObject()->indexOfMethod(QByteArray(functionName + QByteArrayLiteral("()"))) != -1) { + const QByteArray functionName = "accessible" + actionName.toLatin1() + "Action"; + if (object()->metaObject()->indexOfMethod(QByteArray(functionName + "()")) != -1) { QMetaObject::invokeMethod(object(), functionName); return; } diff --git a/src/quick/items/qquickopenglshadereffect.cpp b/src/quick/items/qquickopenglshadereffect.cpp index b974641cca..42fcee3c0d 100644 --- a/src/quick/items/qquickopenglshadereffect.cpp +++ b/src/quick/items/qquickopenglshadereffect.cpp @@ -284,14 +284,14 @@ void QQuickOpenGLShaderEffectCommon::updateParseLog(bool ignoreAttributes) parseLog.clear(); if (!ignoreAttributes) { if (!attributes.contains(qtPositionAttributeName())) { - parseLog += QLatin1String("Warning: Missing reference to \'"); - parseLog += QLatin1String(qtPositionAttributeName()); - parseLog += QLatin1String("\'.\n"); + parseLog += QLatin1String("Warning: Missing reference to \'") + + QLatin1String(qtPositionAttributeName()) + + QLatin1String("\'.\n"); } if (!attributes.contains(qtTexCoordAttributeName())) { - parseLog += QLatin1String("Warning: Missing reference to \'"); - parseLog += QLatin1String(qtTexCoordAttributeName()); - parseLog += QLatin1String("\'.\n"); + parseLog += QLatin1String("Warning: Missing reference to \'") + + QLatin1String(qtTexCoordAttributeName()) + + QLatin1String("\'.\n"); } } bool respectsMatrix = false; @@ -918,9 +918,7 @@ QSGNode *QQuickOpenGLShaderEffect::handleUpdatePaintNode(QSGNode *oldNode, QQuic if (!mesh->validateAttributes(m_common.attributes, &posIndex)) { QString log = mesh->log(); if (!log.isNull()) { - m_log = parseLog(); - m_log += QLatin1String("*** Mesh ***\n"); - m_log += log; + m_log = parseLog() + QLatin1String("*** Mesh ***\n") + log; m_status = QQuickShaderEffect::Error; emit m_item->logChanged(); emit m_item->statusChanged(); diff --git a/src/quick/items/qquickopenglshadereffectnode.cpp b/src/quick/items/qquickopenglshadereffectnode.cpp index 02b76b2dbc..e01ecc59e3 100644 --- a/src/quick/items/qquickopenglshadereffectnode.cpp +++ b/src/quick/items/qquickopenglshadereffectnode.cpp @@ -261,13 +261,11 @@ void QQuickCustomMaterialShader::compile() m_log.clear(); m_compiled = true; if (!program()->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShader())) { - m_log += QLatin1String("*** Vertex shader ***\n"); - m_log += program()->log(); + m_log += QLatin1String("*** Vertex shader ***\n") + program()->log(); m_compiled = false; } if (!program()->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShader())) { - m_log += QLatin1String("*** Fragment shader ***\n"); - m_log += program()->log(); + m_log += QLatin1String("*** Fragment shader ***\n") + program()->log(); m_compiled = false; } diff --git a/src/quick/items/qquickshadereffectmesh.cpp b/src/quick/items/qquickshadereffectmesh.cpp index 8616bf8022..c1499579e6 100644 --- a/src/quick/items/qquickshadereffectmesh.cpp +++ b/src/quick/items/qquickshadereffectmesh.cpp @@ -95,9 +95,8 @@ bool QQuickGridMesh::validateAttributes(const QVector &attributes, i return false; case 1: if (positionIndex != 0) { - m_log = QLatin1String("Error: Missing \'"); - m_log += QLatin1String(qtPositionAttributeName()); - m_log += QLatin1String("\' attribute.\n"); + m_log = QLatin1String("Error: Missing \'") + QLatin1String(qtPositionAttributeName()) + + QLatin1String("\' attribute.\n"); return false; } break; @@ -105,14 +104,12 @@ bool QQuickGridMesh::validateAttributes(const QVector &attributes, i if (positionIndex == -1 || texCoordIndex == -1) { m_log.clear(); if (positionIndex == -1) { - m_log = QLatin1String("Error: Missing \'"); - m_log += QLatin1String(qtPositionAttributeName()); - m_log += QLatin1String("\' attribute.\n"); + m_log = QLatin1String("Error: Missing \'") + QLatin1String(qtPositionAttributeName()) + + QLatin1String("\' attribute.\n"); } if (texCoordIndex == -1) { - m_log += QLatin1String("Error: Missing \'"); - m_log += QLatin1String(qtTexCoordAttributeName()); - m_log += QLatin1String("\' attribute.\n"); + m_log += QLatin1String("Error: Missing \'") + QLatin1String(qtTexCoordAttributeName()) + + QLatin1String("\' attribute.\n"); } return false; } diff --git a/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp b/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp index 3a35632d5c..96b489cd24 100644 --- a/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp +++ b/src/quick/scenegraph/coreapi/qsgshaderrewriter.cpp @@ -214,9 +214,9 @@ QByteArray qsgShaderRewriter_insertZAttributes(const char *input, QSurfaceFormat case Tokenizer::Token_CloseBrace: braceDepth--; if (braceDepth == 0) { - result += QByteArray::fromRawData(voidPos, tok.pos - 1 - voidPos); - result += QByteArrayLiteral(" gl_Position.z = (gl_Position.z * _qt_zRange + _qt_order) * gl_Position.w;\n"); - result += QByteArray(tok.pos - 1); + result += QByteArray::fromRawData(voidPos, tok.pos - 1 - voidPos) + + " gl_Position.z = (gl_Position.z * _qt_zRange + _qt_order) * gl_Position.w;\n" + + QByteArray(tok.pos - 1); return result; } break; diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h index eeea104e91..9ad99e5c54 100644 --- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h +++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h @@ -116,9 +116,8 @@ private: { m_blitProgram = new QOpenGLShaderProgram; { - QString source; - source.append(QLatin1String(qopenglslMainWithTexCoordsVertexShader)); - source.append(QLatin1String(qopenglslUntransformedPositionVertexShader)); + const QString source = QLatin1String(qopenglslMainWithTexCoordsVertexShader) + + QLatin1String(qopenglslUntransformedPositionVertexShader); QOpenGLShader *vertexShader = new QOpenGLShader(QOpenGLShader::Vertex, m_blitProgram); vertexShader->compileSourceCode(source); @@ -126,9 +125,8 @@ private: m_blitProgram->addShader(vertexShader); } { - QString source; - source.append(QLatin1String(qopenglslMainFragmentShader)); - source.append(QLatin1String(qopenglslImageSrcFragmentShader)); + const QString source = QLatin1String(qopenglslMainFragmentShader) + + QLatin1String(qopenglslImageSrcFragmentShader); QOpenGLShader *fragmentShader = new QOpenGLShader(QOpenGLShader::Fragment, m_blitProgram); fragmentShader->compileSourceCode(source); diff --git a/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp b/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp index caa296451e..25af1997a8 100644 --- a/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp +++ b/src/quick/scenegraph/util/qsgshadersourcebuilder.cpp @@ -310,13 +310,10 @@ void QSGShaderSourceBuilder::addDefinition(const QByteArray &definition) const char *insertionPos = extensionPos ? extensionPos : (versionPos ? versionPos : input); // Construct a new shader string, inserting the definition - QByteArray newSource; - newSource.reserve(m_source.size() + definition.size() + 9); - newSource += QByteArray::fromRawData(input, insertionPos - input); - newSource += QByteArrayLiteral("#define ") + definition + QByteArrayLiteral("\n"); - newSource += QByteArray::fromRawData(insertionPos, m_source.size() - (insertionPos - input)); - - m_source = newSource; + QByteArray newSource = QByteArray::fromRawData(input, insertionPos - input) + + "#define " + definition + '\n' + + QByteArray::fromRawData(insertionPos, m_source.size() - (insertionPos - input)); + m_source = std::move(newSource); } void QSGShaderSourceBuilder::removeVersion() diff --git a/src/quick/util/qquickstyledtext.cpp b/src/quick/util/qquickstyledtext.cpp index 4139c87eda..ae8719341d 100644 --- a/src/quick/util/qquickstyledtext.cpp +++ b/src/quick/util/qquickstyledtext.cpp @@ -721,8 +721,7 @@ void QQuickStyledTextPrivate::parseImageAttributes(const QChar *&ch, const QStri QString padding(qFloor(imgWidth / spaceWidth), QChar::Nbsp); if (!trailingSpace) textOut += QLatin1Char(' '); - textOut += padding; - textOut += QLatin1Char(' '); + textOut += padding + QLatin1Char(' '); } QPair QQuickStyledTextPrivate::parseAttribute(const QChar *&ch, const QString &textIn) -- cgit v1.2.3