| (qt_cmp_si_sort_flags & QDir::Type);
switch (sortBy) {
- case QDir::Time:
- r = f1->item.lastModified().secsTo(f2->item.lastModified());
+ case QDir::Time: {
+ QDateTime firstModified = f1->item.lastModified();
+ QDateTime secondModified = f2->item.lastModified();
+
+ // QDateTime by default will do all sorts of conversions on these to
+ // find timezones, which is incredibly expensive. As we aren't
+ // presenting these to the user, we don't care (at all) about the
+ // local timezone, so force them to UTC to avoid that conversion.
+ firstModified.setTimeSpec(Qt::UTC);
+ secondModified.setTimeSpec(Qt::UTC);
+
+ r = firstModified.secsTo(secondModified);
break;
+ }
case QDir::Size:
r = int(qBound<qint64>(-1, f2->item.size() - f1->item.size(), 1));
break;
}
}
+ void sorted_byTime() {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ testdir.setSorting(QDir::Time);
+ testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
+ QBENCHMARK {
+ QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Time);
+ foreach (const QString &filename, fileList) {
+
+ }
+ }
+ }
+
void sizeSpeedWithoutFilterLowLevel() {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
#ifdef Q_OS_WIN