Utils: Avoid extra output copy for SynchronousProcess

The data was present in the ChannelBuffer

Change-Id: Ica645ba58bb2e86d0ef4cf5387f0a228f132e07d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2021-05-17 10:07:16 +02:00
parent 49864a8155
commit 31dc479fa5

View File

@@ -81,9 +81,6 @@ public:
QtcProcess::Result result = QtcProcess::StartFailed; QtcProcess::Result result = QtcProcess::StartFailed;
int exitCode = -1; int exitCode = -1;
QByteArray rawStdOut;
QByteArray rawStdErr;
}; };
// Data for one channel buffer (stderr/stdout) // Data for one channel buffer (stderr/stdout)
@@ -607,8 +604,6 @@ void SynchronousProcessResponse::clear()
{ {
result = QtcProcess::StartFailed; result = QtcProcess::StartFailed;
exitCode = -1; exitCode = -1;
rawStdOut.clear();
rawStdErr.clear();
} }
QString QtcProcess::exitMessage() QString QtcProcess::exitMessage()
@@ -633,14 +628,14 @@ QString QtcProcess::exitMessage()
QByteArray QtcProcess::allRawOutput() const QByteArray QtcProcess::allRawOutput() const
{ {
if (!d->m_result.rawStdOut.isEmpty() && !d->m_result.rawStdErr.isEmpty()) { if (!d->m_stdOut.rawData.isEmpty() && !d->m_stdErr.rawData.isEmpty()) {
QByteArray result = d->m_result.rawStdOut; QByteArray result = d->m_stdOut.rawData;
if (!result.endsWith('\n')) if (!result.endsWith('\n'))
result += '\n'; result += '\n';
result += d->m_result.rawStdErr; result += d->m_stdErr.rawData;
return result; return result;
} }
return !d->m_result.rawStdOut.isEmpty() ? d->m_result.rawStdOut : d->m_result.rawStdErr; return !d->m_stdOut.rawData.isEmpty() ? d->m_stdOut.rawData : d->m_stdErr.rawData;
} }
QString QtcProcess::allOutput() const QString QtcProcess::allOutput() const
@@ -660,22 +655,22 @@ QString QtcProcess::allOutput() const
QString QtcProcess::stdOut() const QString QtcProcess::stdOut() const
{ {
return normalizeNewlines(d->m_codec->toUnicode(d->m_result.rawStdOut)); return normalizeNewlines(d->m_codec->toUnicode(d->m_stdOut.rawData));
} }
QString QtcProcess::stdErr() const QString QtcProcess::stdErr() const
{ {
return normalizeNewlines(d->m_codec->toUnicode(d->m_result.rawStdErr)); return normalizeNewlines(d->m_codec->toUnicode(d->m_stdErr.rawData));
} }
QByteArray QtcProcess::rawStdOut() const QByteArray QtcProcess::rawStdOut() const
{ {
return d->m_result.rawStdOut; return d->m_stdOut.rawData;
} }
QByteArray QtcProcess::rawStdErr() const QByteArray QtcProcess::rawStdErr() const
{ {
return d->m_result.rawStdErr; return d->m_stdErr.rawData;
} }
QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug str, const QtcProcess &r) QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug str, const QtcProcess &r)
@@ -683,7 +678,7 @@ QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug str, const QtcProcess &r)
QDebug nsp = str.nospace(); QDebug nsp = str.nospace();
nsp << "QtcProcess: result=" nsp << "QtcProcess: result="
<< r.d->m_result.result << " ex=" << r.exitCode() << '\n' << r.d->m_result.result << " ex=" << r.exitCode() << '\n'
<< r.d->m_result.rawStdOut.size() << " bytes stdout, stderr=" << r.d->m_result.rawStdErr << '\n'; << r.d->m_stdOut.rawData.size() << " bytes stdout, stderr=" << r.d->m_stdErr.rawData << '\n';
return str; return str;
} }
@@ -808,8 +803,8 @@ void QtcProcess::run(const CommandLine &cmd)
d->m_result.result = QtcProcess::Finished; d->m_result.result = QtcProcess::Finished;
d->m_result.exitCode = exitCode(); d->m_result.exitCode = exitCode();
d->m_result.rawStdOut = readAllStandardOutput(); d->m_stdOut.rawData += readAllStandardOutput();
d->m_result.rawStdErr = readAllStandardError(); d->m_stdErr.rawData += readAllStandardError();
return; return;
}; };
@@ -845,9 +840,6 @@ void QtcProcess::run(const CommandLine &cmd)
d->m_stdOut.append(readAllStandardOutput(), false); d->m_stdOut.append(readAllStandardOutput(), false);
d->m_stdErr.append(readAllStandardError(), false); d->m_stdErr.append(readAllStandardError(), false);
d->m_result.rawStdOut = d->m_stdOut.rawData;
d->m_result.rawStdErr = d->m_stdErr.rawData;
d->m_timer.stop(); d->m_timer.stop();
#ifdef QT_GUI_LIB #ifdef QT_GUI_LIB
if (isGuiThread()) if (isGuiThread())
@@ -869,8 +861,8 @@ void QtcProcess::runBlocking(const CommandLine &cmd)
d->m_result.result = QtcProcess::Finished; d->m_result.result = QtcProcess::Finished;
d->m_result.exitCode = exitCode(); d->m_result.exitCode = exitCode();
d->m_result.rawStdOut = readAllStandardOutput(); d->m_stdOut.rawData += readAllStandardOutput();
d->m_result.rawStdErr = readAllStandardError(); d->m_stdErr.rawData += readAllStandardError();
return; return;
}; };
@@ -909,9 +901,6 @@ void QtcProcess::runBlocking(const CommandLine &cmd)
} }
d->m_stdOut.append(readAllStandardOutput(), false); d->m_stdOut.append(readAllStandardOutput(), false);
d->m_stdErr.append(readAllStandardError(), false); d->m_stdErr.append(readAllStandardError(), false);
d->m_result.rawStdOut = d->m_stdOut.rawData;
d->m_result.rawStdErr = d->m_stdErr.rawData;
} }
void QtcProcess::setStdOutCallback(const std::function<void (const QString &)> &callback) void QtcProcess::setStdOutCallback(const std::function<void (const QString &)> &callback)