No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Time.cpp 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "il2cpp-config.h"
  2. #if IL2CPP_TARGET_WINDOWS
  3. #include "os/Time.h"
  4. #include "os/Win32/WindowsHeaders.h"
  5. #define MTICKS_PER_SEC 10000000LL
  6. namespace il2cpp
  7. {
  8. namespace os
  9. {
  10. static LARGE_INTEGER s_PerformanceCounterFrequency;
  11. static double s_MTicksPerQfcFreq;
  12. static inline void InitializePerformanceCounterFrequency()
  13. {
  14. if (!s_PerformanceCounterFrequency.QuadPart)
  15. {
  16. // From MSDN: On systems that run Windows XP or later, the function will always succeed and will thus never return zero.
  17. // so I'll just assume we never run on older than XP
  18. BOOL qpfResult = QueryPerformanceFrequency(&s_PerformanceCounterFrequency);
  19. IL2CPP_ASSERT(qpfResult != FALSE);
  20. s_MTicksPerQfcFreq = (double)MTICKS_PER_SEC / s_PerformanceCounterFrequency.QuadPart;
  21. }
  22. }
  23. uint32_t Time::GetTicksMillisecondsMonotonic()
  24. {
  25. InitializePerformanceCounterFrequency();
  26. LARGE_INTEGER value;
  27. QueryPerformanceCounter(&value);
  28. return static_cast<uint32_t>(value.QuadPart * 1000 / s_PerformanceCounterFrequency.QuadPart);
  29. }
  30. int64_t Time::GetTicks100NanosecondsMonotonic()
  31. {
  32. InitializePerformanceCounterFrequency();
  33. LARGE_INTEGER value;
  34. QueryPerformanceCounter(&value);
  35. return (int64_t)(value.QuadPart * s_MTicksPerQfcFreq);
  36. }
  37. /*
  38. * Magic number to convert FILETIME base Jan 1, 1601 to DateTime - base Jan, 1, 0001
  39. */
  40. const uint64_t FILETIME_ADJUST = ((uint64_t)504911232000000000LL);
  41. int64_t Time::GetTicks100NanosecondsDateTime()
  42. {
  43. ULARGE_INTEGER ft;
  44. IL2CPP_ASSERT(sizeof(ft) == sizeof(FILETIME));
  45. ::GetSystemTimeAsFileTime((FILETIME*)&ft);
  46. return FILETIME_ADJUST + ft.QuadPart;
  47. }
  48. int64_t Time::GetSystemTimeAsFileTime()
  49. {
  50. int64_t fileTime;
  51. ::GetSystemTimeAsFileTime(reinterpret_cast<FILETIME*>(&fileTime));
  52. return fileTime;
  53. }
  54. }
  55. }
  56. #endif