Use a QVector<QDateTime> instead of an array in QFileInfoPrivate
Since QDateTime is pimpled, default allocation is expensive and regularly shows up in profiles of code using QFileInfo. For Qt 6, QDateTime's data members should be put into the class proper, and this change here reverted. Change-Id: I94a50e467b12772e1076181eb2ac6031984d8802 Reviewed-by: Thorbjørn Lindeijer <bjorn@lindeijer.nl> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
This commit is contained in:
parent
38bf6da7dd
commit
32629676b9
@ -187,6 +187,8 @@ uint QFileInfoPrivate::getFileFlags(QAbstractFileEngine::FileFlags request) cons
|
||||
QDateTime &QFileInfoPrivate::getFileTime(QAbstractFileEngine::FileTime request) const
|
||||
{
|
||||
Q_ASSERT(fileEngine); // should never be called when using the native FS
|
||||
if (fileTimes.size() != 3)
|
||||
fileTimes.resize(3);
|
||||
if (!cache_enabled)
|
||||
clearFlags();
|
||||
uint cf;
|
||||
|
@ -58,6 +58,7 @@
|
||||
#include "qatomic.h"
|
||||
#include "qshareddata.h"
|
||||
#include "qfilesystemengine_p.h"
|
||||
#include "qvector.h"
|
||||
|
||||
#include <QtCore/private/qabstractfileengine_p.h>
|
||||
#include <QtCore/private/qfilesystementry_p.h>
|
||||
@ -152,7 +153,12 @@ public:
|
||||
bool cache_enabled : 1;
|
||||
mutable uint fileFlags;
|
||||
mutable qint64 fileSize;
|
||||
mutable QDateTime fileTimes[3];
|
||||
// ### Qt6: FIXME: This vector is essentially a plain array
|
||||
// mutable QDateTime fileTimes[3], but the array is slower
|
||||
// to initialize than the QVector as QDateTime has a pimpl.
|
||||
// In Qt 6, QDateTime should inline its data members,
|
||||
// and this here can be an array again.
|
||||
mutable QVector<QDateTime> fileTimes;
|
||||
inline bool getCachedFlag(uint c) const
|
||||
{ return cache_enabled ? (cachedFlags & c) : 0; }
|
||||
inline void setCachedFlag(uint c) const
|
||||
|
@ -262,6 +262,10 @@ public:
|
||||
private:
|
||||
friend class QDateTimePrivate;
|
||||
void detach();
|
||||
|
||||
// ### Qt6: Using a private here has high impact on runtime
|
||||
// on users such as QFileInfo. In Qt 6, the data members
|
||||
// should be inlined.
|
||||
QExplicitlySharedDataPointer<QDateTimePrivate> d;
|
||||
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
|
Loading…
Reference in New Issue
Block a user