LibUnicode: Cache the system time zone

It's expensive to determine the system time zone from disk each time it
is requested. This makes LibUnicode cache the result, and provides an
API to clear that cache. This will let us set up a monitor to watch for
system time zone changes in platform-dependent ways.
This commit is contained in:
Timothy Flynn 2024-08-24 12:07:24 -04:00 committed by Andreas Kling
commit b31c11bca5
Notes: github-actions[bot] 2024-08-25 07:48:47 +00:00
5 changed files with 27 additions and 3 deletions

View file

@ -15,8 +15,13 @@
namespace Unicode {
String current_time_zone()
static Optional<String> cached_system_time_zone;
String current_time_zone(UseTimeZoneCache)
{
if (cached_system_time_zone.has_value())
return *cached_system_time_zone;
UErrorCode status = U_ZERO_ERROR;
auto time_zone = adopt_own_if_nonnull(icu::TimeZone::detectHostTimeZone());
@ -32,7 +37,13 @@ String current_time_zone()
if (icu_failure(status))
return "UTC"_string;
return icu_string_to_string(time_zone_name);
cached_system_time_zone = icu_string_to_string(time_zone_name);
return *cached_system_time_zone;
}
void clear_system_time_zone_cache()
{
cached_system_time_zone.clear();
}
// https://github.com/unicode-org/icu/blob/main/icu4c/source/tools/tzcode/icuzones