aboutsummaryrefslogtreecommitdiff
path: root/tools/Vulkan-Tools/cube/gettime.h
diff options
context:
space:
mode:
authorLizzy Fleckenstein <lizzy@vlhl.dev>2026-03-31 01:30:36 +0200
committerLizzy Fleckenstein <lizzy@vlhl.dev>2026-03-31 01:30:36 +0200
commit8e2ff15dbd3fe70fe2b52397b1eaba3fe2d7a5e8 (patch)
tree925fa596210d1a1f01e00e0743a643f4552e7a7a /tools/Vulkan-Tools/cube/gettime.h
parent1f17b4df127bd280e50d93a46ae93df704adc2b0 (diff)
parent90bf5bc4fd8bea0d300f6564af256a51a34124b8 (diff)
downloadusermoji-8e2ff15dbd3fe70fe2b52397b1eaba3fe2d7a5e8.tar.xz
add tools/Vulkan-Tools
Diffstat (limited to 'tools/Vulkan-Tools/cube/gettime.h')
-rw-r--r--tools/Vulkan-Tools/cube/gettime.h68
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
+}