diff options
| author | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2026-03-31 01:30:36 +0200 |
|---|---|---|
| committer | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2026-03-31 01:30:36 +0200 |
| commit | 8e2ff15dbd3fe70fe2b52397b1eaba3fe2d7a5e8 (patch) | |
| tree | 925fa596210d1a1f01e00e0743a643f4552e7a7a /tools/Vulkan-Tools/cube/gettime.h | |
| parent | 1f17b4df127bd280e50d93a46ae93df704adc2b0 (diff) | |
| parent | 90bf5bc4fd8bea0d300f6564af256a51a34124b8 (diff) | |
| download | usermoji-8e2ff15dbd3fe70fe2b52397b1eaba3fe2d7a5e8.tar.xz | |
add tools/Vulkan-Tools
Diffstat (limited to 'tools/Vulkan-Tools/cube/gettime.h')
| -rw-r--r-- | tools/Vulkan-Tools/cube/gettime.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tools/Vulkan-Tools/cube/gettime.h b/tools/Vulkan-Tools/cube/gettime.h new file mode 100644 index 00000000..0a697b42 --- /dev/null +++ b/tools/Vulkan-Tools/cube/gettime.h @@ -0,0 +1,68 @@ +/************************************************************************** + * + * Copyright 2014, 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Ported from drawElements Utility Library (Google, Inc.) + * Port done by: Ian Elliott <ianelliott@google.com> + **************************************************************************/ + +#include <time.h> +#include <assert.h> +#include <vulkan/vk_platform.h> + +#if defined(_WIN32) + +#include <windows.h> + +#elif defined(__unix__) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__ANDROID__) || defined(__EPOC32__) || defined(__QNX__) || defined(__APPLE__) + +#include <time.h> + +#endif + +uint64_t getTimeInNanoseconds(void) { + const long long ns_in_us = 1000; + const long long ns_in_ms = 1000 * ns_in_us; + const long long ns_in_s = 1000 * ns_in_ms; +#if defined(_WIN32) + LARGE_INTEGER freq; + LARGE_INTEGER count; + QueryPerformanceCounter(&count); + QueryPerformanceFrequency(&freq); + assert(freq.LowPart != 0 || freq.HighPart != 0); + + if (count.QuadPart < MAXLONGLONG / ns_in_s) { + assert(freq.QuadPart != 0); + return count.QuadPart * ns_in_s / freq.QuadPart; + } else { + assert(freq.QuadPart >= ns_in_s); + return count.QuadPart / (freq.QuadPart / ns_in_s); + } + +#elif defined(__unix__) || defined(__linux) || defined(__linux__) || defined(__ANDROID__) || defined(__QNX__) || defined(__APPLE__) + struct timespec currTime; + clock_gettime(CLOCK_MONOTONIC, &currTime); + return (uint64_t)currTime.tv_sec * ns_in_s + (uint64_t)currTime.tv_nsec; + +#elif defined(__EPOC32__) + struct timespec currTime; + /* Symbian supports only realtime clock for clock_gettime. */ + clock_gettime(CLOCK_REALTIME, &currTime); + return (uint64_t)currTime.tv_sec * ns_in_s + (uint64_t)currTime.tv_nsec; + +#else +#error getTimeInNanoseconds Not implemented for target OS +#endif +} |
