QDebug: rewrite timeUnit() into putTimeUnit()

This avoids us committing to the QByteArray return value, which is
overkill for short strings. Instead, pull the streaming of the unit
behind the ABI boundary, so we're free to change the implementation to
either stream directly or use SSO'ed std::string.

Pick-to: 6.6
Change-Id: I10927acb9d64077d9018b667958ca16be218012a
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Marc Mutz 2023-07-07 13:10:43 +02:00 committed by Ahmad Samir
parent d4e3d008fe
commit 568ab62185
2 changed files with 14 additions and 8 deletions

View File

@ -347,12 +347,7 @@ void QDebug::putByteArray(const char *begin, size_t length, Latin1Content conten
}
}
/*!
\since 6.6
\internal
Helper to the std::chrono::duration debug streaming output.
*/
QByteArray QDebug::timeUnit(qint64 num, qint64 den)
static QByteArray timeUnit(qint64 num, qint64 den)
{
using namespace std::chrono;
using namespace q20::chrono;
@ -431,6 +426,16 @@ QByteArray QDebug::timeUnit(qint64 num, qint64 den)
return QByteArray(buf, len + strlen(unit));
}
/*!
\since 6.6
\internal
Helper to the std::chrono::duration debug streaming output.
*/
void QDebug::putTimeUnit(qint64 num, qint64 den)
{
stream->ts << timeUnit(num, den); // ### optimize
}
/*!
\fn QDebug::swap(QDebug &other)
\since 5.0

View File

@ -68,7 +68,7 @@ class QT6_ONLY(Q_CORE_EXPORT) QDebug : public QIODeviceBase
QT7_ONLY(Q_CORE_EXPORT) void putUcs4(uint ucs4);
QT7_ONLY(Q_CORE_EXPORT) void putString(const QChar *begin, size_t length);
QT7_ONLY(Q_CORE_EXPORT) void putByteArray(const char *begin, size_t length, Latin1Content content);
QT7_ONLY(Q_CORE_EXPORT) static QByteArray timeUnit(qint64 num, qint64 den);
QT7_ONLY(Q_CORE_EXPORT) void putTimeUnit(qint64 num, qint64 den);
public:
explicit QDebug(QIODevice *device) : stream(new Stream(device)) {}
explicit QDebug(QString *string) : stream(new Stream(string)) {}
@ -197,7 +197,8 @@ public:
template <typename Rep, typename Period>
QDebug &operator<<(std::chrono::duration<Rep, Period> duration)
{
stream->ts << duration.count() << timeUnit(Period::num, Period::den);
stream->ts << duration.count();
putTimeUnit(Period::num, Period::den);
return maybeSpace();
}