From 6df9074a1a81c923bad70acbcd4a4b0d0e269322 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Wed, 10 Jan 2024 11:27:06 +0100 Subject: [PATCH] QWinTimeZonePrivate::availableTimeZoneIds(): cache result MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This follows up on commit d59e539b3a1252aa22783c4fdf1e22b35e5a4292, doing the same for one of its callers. The mapping from windows IDs to IANA ones is hard-coded (using CLDR-generated data), so the (now unchanging) availableWindowsIds() list shall always map to the same list of IANA IDs. Pick-to: 6.6 6.5 Task-number: QTBUG-120682 Change-Id: I4d610c24110064236b375cab04cde90bbe07735f Reviewed-by: Thiago Macieira Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Qt CI Bot (cherry picked from commit 83871413636407f196c2ef7ca4e5b0a846c646ec) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/time/qtimezoneprivate_win.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/corelib/time/qtimezoneprivate_win.cpp b/src/corelib/time/qtimezoneprivate_win.cpp index 82666407d2c..2502516810a 100644 --- a/src/corelib/time/qtimezoneprivate_win.cpp +++ b/src/corelib/time/qtimezoneprivate_win.cpp @@ -849,13 +849,16 @@ QByteArray QWinTimeZonePrivate::systemTimeZoneId() const QList QWinTimeZonePrivate::availableTimeZoneIds() const { - QList result; - const auto winIds = availableWindowsIds(); - for (const QByteArray &winId : winIds) - result += windowsIdToIanaIds(winId); - std::sort(result.begin(), result.end()); - result.erase(std::unique(result.begin(), result.end()), result.end()); - return result; + static const QList cache = [] { + QList result; + const auto winIds = availableWindowsIds(); + for (const QByteArray &winId : winIds) + result += windowsIdToIanaIds(winId); + std::sort(result.begin(), result.end()); + result.erase(std::unique(result.begin(), result.end()), result.end()); + return result; + }(); + return cache; } QTimeZonePrivate::Data QWinTimeZonePrivate::ruleToData(const QWinTransitionRule &rule,