[libcxx-commits] [PATCH] D104987: Use GetSystemTimePreciseAsFileTime() if available

Sizhe Zhao via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jul 14 06:58:09 PDT 2021


Prince213 updated this revision to Diff 358591.
Prince213 marked an inline comment as done.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D104987/new/

https://reviews.llvm.org/D104987

Files:
  libcxx/src/chrono.cpp


Index: libcxx/src/chrono.cpp
===================================================================
--- libcxx/src/chrono.cpp
+++ libcxx/src/chrono.cpp
@@ -63,6 +63,20 @@
 
 #if defined(_LIBCPP_WIN32API)
 
+#if _WIN32_WINNT < _WIN32_WINNT_WIN8
+
+typedef void(WINAPI* GetSystemTimeAsFileTimePtr)(LPFILETIME);
+
+static GetSystemTimeAsFileTimePtr init_system_clock() {
+  GetSystemTimeAsFileTimePtr fp =
+      (GetSystemTimeAsFileTimePtr)GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "GetSystemTimePreciseAsFileTime");
+  if (nullptr == fp)
+    return GetSystemTimeAsFileTime;
+  return fp;
+}
+
+#endif
+
 static system_clock::time_point __libcpp_system_clock_now() {
   // FILETIME is in 100ns units
   using filetime_duration =
@@ -74,10 +88,14 @@
   static _LIBCPP_CONSTEXPR const seconds nt_to_unix_epoch{11644473600};
 
   FILETIME ft;
-#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8 && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) ||                        \
+    (_WIN32_WINNT >= _WIN32_WINNT_WIN10)
   GetSystemTimePreciseAsFileTime(&ft);
-#else
+#elif !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
   GetSystemTimeAsFileTime(&ft);
+#else
+  static GetSystemTimeAsFileTimePtr fp = init_system_clock();
+  fp(&ft);
 #endif
 
   filetime_duration d{(static_cast<__int64>(ft.dwHighDateTime) << 32) |


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104987.358591.patch
Type: text/x-patch
Size: 1403 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210714/7d21c691/attachment.bin>


More information about the libcxx-commits mailing list