summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-01-12 16:43:48 +0100
committerSimon Hausmann <simon.hausmann@qt.io>2018-04-13 12:17:33 +0000
commit07f1c9665827bf9bc7dc70154fdee168c8118aaa (patch)
tree770d8c894e44cf268f435fd36d4fdb1f137e80db
parenta8906e35103c9c30597bf3b0034371498669f9da (diff)
Improve performance of QResource::load()
Avoid creating a QDateTime in the resource that will almost never get used. Constructing the date time is expensive as we convert the time stamp to local time. Task-number: QTBUG-65713 Change-Id: I3638e108a8fbd237cd93e98aa2adc0ca2127822c Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Tuukka Turunen <tuukka.turunen@qt.io>
-rw-r--r--src/corelib/io/qresource.cpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index 35a0de4fb7..7502fb57a3 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -116,7 +116,7 @@ public:
inline bool isContainer(int node) const { return flags(node) & Directory; }
inline bool isCompressed(int node) const { return flags(node) & Compressed; }
const uchar *data(int node, qint64 *size) const;
- QDateTime lastModified(int node) const;
+ quint64 lastModified(int node) const;
QStringList children(int node) const;
virtual QString mappingRoot() const { return QString(); }
bool mappingRootSubdir(const QString &path, QString *match=0) const;
@@ -245,7 +245,7 @@ public:
mutable qint64 size;
mutable const uchar *data;
mutable QStringList children;
- mutable QDateTime lastModified;
+ mutable quint64 lastModified;
QResource *q_ptr;
Q_DECLARE_PUBLIC(QResource)
@@ -259,7 +259,7 @@ QResourcePrivate::clear()
data = 0;
size = 0;
children.clear();
- lastModified = QDateTime();
+ lastModified = 0;
container = 0;
for(int i = 0; i < related.size(); ++i) {
QResourceRoot *root = related.at(i);
@@ -301,7 +301,7 @@ QResourcePrivate::load(const QString &file)
data = 0;
size = 0;
compressed = 0;
- lastModified = QDateTime();
+ lastModified = 0;
res->ref.ref();
related.append(res);
}
@@ -539,7 +539,7 @@ QDateTime QResource::lastModified() const
{
Q_D(const QResource);
d->ensureInitialized();
- return d->lastModified;
+ return d->lastModified ? QDateTime::fromMSecsSinceEpoch(d->lastModified) : QDateTime();
}
/*!
@@ -797,18 +797,14 @@ const uchar *QResourceRoot::data(int node, qint64 *size) const
return 0;
}
-QDateTime QResourceRoot::lastModified(int node) const
+quint64 QResourceRoot::lastModified(int node) const
{
if (node == -1 || version < 0x02)
- return QDateTime();
+ return 0;
const int offset = findOffset(node) + 14;
- const quint64 timeStamp = qFromBigEndian<quint64>(tree + offset);
- if (timeStamp == 0)
- return QDateTime();
-
- return QDateTime::fromMSecsSinceEpoch(timeStamp);
+ return qFromBigEndian<quint64>(tree + offset);
}
QStringList QResourceRoot::children(int node) const