summaryrefslogtreecommitdiffstats
path: root/src/corelib/time
diff options
context:
space:
mode:
authorVolker Krause <vkrause@kde.org>2024-01-05 17:10:41 +0100
committerVolker Krause <vkrause@kde.org>2024-02-06 16:23:42 +0100
commitf4e83fccb4ecbf01ba9b72b02a1041e93e7c92b3 (patch)
tree545e332e3866e00ae1794b5e13dd70ff0ae18d24 /src/corelib/time
parent21196d26d84f0f9984308660714921aa17790bc4 (diff)
Optimize QTimeZone construction on Android
isTimeZoneIdAvailable() is significantly slower than just trying to initialize the timezone and see if that worked. Even in the x86 emulator the difference for this is from 2+ms to no longer measurable here, on less powerful ARM devices it's even more extreme. This matters in particular for code creating many QTimeZone instances, e.g. for calendaring. Pick-to: 6.7 6.6 6.5 Change-Id: I5f175137b8b71816347a8debb492214427a51104 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/corelib/time')
-rw-r--r--src/corelib/time/qtimezone.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/corelib/time/qtimezone.cpp b/src/corelib/time/qtimezone.cpp
index e4d17596d8..5f5d104baf 100644
--- a/src/corelib/time/qtimezone.cpp
+++ b/src/corelib/time/qtimezone.cpp
@@ -456,8 +456,15 @@ QTimeZone::QTimeZone(const QByteArray &ianaId)
if (!d->isValid()) {
if (ianaId.isEmpty())
d = newBackendTimeZone();
+#ifdef Q_OS_ANDROID
+ // on Android the isTimeZoneIdAvailable() implementation is vastly more
+ // expensive than just trying to create a timezone
+ else
+ d = newBackendTimeZone(ianaId);
+#else
else if (global_tz->backend->isTimeZoneIdAvailable(ianaId))
d = newBackendTimeZone(ianaId);
+#endif
// else: No such ID, avoid creating a TZ cache entry for it.
}
// Can also handle UTC with arbitrary (valid) offset, but only do so as