Loading libutils/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,7 @@ cc_test { "String8_test.cpp", "String16_test.cpp", "StrongPointer_test.cpp", "Timers_test.cpp", "Unicode_test.cpp", "Vector_test.cpp", ], Loading libutils/Timers.cpp +23 −17 Original line number Diff line number Diff line Loading @@ -20,31 +20,37 @@ #include <utils/Timers.h> #include <limits.h> #include <stdlib.h> #include <time.h> // host linux support requires Linux 2.6.39+ #include <android-base/macros.h> static constexpr size_t clock_id_max = 5; static void checkClockId(int clock) { if (clock < 0 || clock >= clock_id_max) abort(); } #if defined(__linux__) nsecs_t systemTime(int clock) { static const clockid_t clocks[] = { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID, CLOCK_BOOTTIME }; struct timespec t; t.tv_sec = t.tv_nsec = 0; nsecs_t systemTime(int clock) { checkClockId(clock); static constexpr clockid_t clocks[] = {CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID, CLOCK_BOOTTIME}; static_assert(clock_id_max == arraysize(clocks)); timespec t = {}; clock_gettime(clocks[clock], &t); return nsecs_t(t.tv_sec)*1000000000LL + t.tv_nsec; } #else nsecs_t systemTime(int /*clock*/) { nsecs_t systemTime(int clock) { // TODO: is this ever called with anything but REALTIME on mac/windows? checkClockId(clock); // Clock support varies widely across hosts. Mac OS doesn't support // CLOCK_BOOTTIME, and Windows is windows. struct timeval t; t.tv_sec = t.tv_usec = 0; // CLOCK_BOOTTIME (and doesn't even have clock_gettime until 10.12). // Windows is windows. timeval t = {}; gettimeofday(&t, nullptr); return nsecs_t(t.tv_sec)*1000000000LL + nsecs_t(t.tv_usec)*1000LL; } Loading libutils/Timers_test.cpp 0 → 100644 +29 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 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. */ #include <utils/Timers.h> #include <gtest/gtest.h> TEST(Timers, systemTime_invalid) { EXPECT_EXIT(systemTime(-1), testing::KilledBySignal(SIGABRT), ""); systemTime(SYSTEM_TIME_REALTIME); systemTime(SYSTEM_TIME_MONOTONIC); systemTime(SYSTEM_TIME_PROCESS); systemTime(SYSTEM_TIME_THREAD); systemTime(SYSTEM_TIME_BOOTTIME); EXPECT_EXIT(systemTime(SYSTEM_TIME_BOOTTIME + 1), testing::KilledBySignal(SIGABRT), ""); } libutils/include/utils/Timers.h +6 −12 Original line number Diff line number Diff line Loading @@ -14,11 +14,7 @@ * limitations under the License. */ // // Timer functions. // #ifndef _LIBS_UTILS_TIMERS_H #define _LIBS_UTILS_TIMERS_H #pragma once #include <stdint.h> #include <sys/types.h> Loading Loading @@ -81,7 +77,7 @@ enum { SYSTEM_TIME_MONOTONIC = 1, // monotonic time since unspecified starting point SYSTEM_TIME_PROCESS = 2, // high-resolution per-process clock SYSTEM_TIME_THREAD = 3, // high-resolution per-thread clock SYSTEM_TIME_BOOTTIME = 4 // same as SYSTEM_TIME_MONOTONIC, but including CPU suspend time SYSTEM_TIME_BOOTTIME = 4, // same as SYSTEM_TIME_MONOTONIC, but including CPU suspend time }; // return the system-time according to the specified clock Loading @@ -104,5 +100,3 @@ int toMillisecondTimeoutDelay(nsecs_t referenceTime, nsecs_t timeoutTime); #ifdef __cplusplus } // extern "C" #endif #endif // _LIBS_UTILS_TIMERS_H Loading
libutils/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,7 @@ cc_test { "String8_test.cpp", "String16_test.cpp", "StrongPointer_test.cpp", "Timers_test.cpp", "Unicode_test.cpp", "Vector_test.cpp", ], Loading
libutils/Timers.cpp +23 −17 Original line number Diff line number Diff line Loading @@ -20,31 +20,37 @@ #include <utils/Timers.h> #include <limits.h> #include <stdlib.h> #include <time.h> // host linux support requires Linux 2.6.39+ #include <android-base/macros.h> static constexpr size_t clock_id_max = 5; static void checkClockId(int clock) { if (clock < 0 || clock >= clock_id_max) abort(); } #if defined(__linux__) nsecs_t systemTime(int clock) { static const clockid_t clocks[] = { CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID, CLOCK_BOOTTIME }; struct timespec t; t.tv_sec = t.tv_nsec = 0; nsecs_t systemTime(int clock) { checkClockId(clock); static constexpr clockid_t clocks[] = {CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID, CLOCK_BOOTTIME}; static_assert(clock_id_max == arraysize(clocks)); timespec t = {}; clock_gettime(clocks[clock], &t); return nsecs_t(t.tv_sec)*1000000000LL + t.tv_nsec; } #else nsecs_t systemTime(int /*clock*/) { nsecs_t systemTime(int clock) { // TODO: is this ever called with anything but REALTIME on mac/windows? checkClockId(clock); // Clock support varies widely across hosts. Mac OS doesn't support // CLOCK_BOOTTIME, and Windows is windows. struct timeval t; t.tv_sec = t.tv_usec = 0; // CLOCK_BOOTTIME (and doesn't even have clock_gettime until 10.12). // Windows is windows. timeval t = {}; gettimeofday(&t, nullptr); return nsecs_t(t.tv_sec)*1000000000LL + nsecs_t(t.tv_usec)*1000LL; } Loading
libutils/Timers_test.cpp 0 → 100644 +29 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 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. */ #include <utils/Timers.h> #include <gtest/gtest.h> TEST(Timers, systemTime_invalid) { EXPECT_EXIT(systemTime(-1), testing::KilledBySignal(SIGABRT), ""); systemTime(SYSTEM_TIME_REALTIME); systemTime(SYSTEM_TIME_MONOTONIC); systemTime(SYSTEM_TIME_PROCESS); systemTime(SYSTEM_TIME_THREAD); systemTime(SYSTEM_TIME_BOOTTIME); EXPECT_EXIT(systemTime(SYSTEM_TIME_BOOTTIME + 1), testing::KilledBySignal(SIGABRT), ""); }
libutils/include/utils/Timers.h +6 −12 Original line number Diff line number Diff line Loading @@ -14,11 +14,7 @@ * limitations under the License. */ // // Timer functions. // #ifndef _LIBS_UTILS_TIMERS_H #define _LIBS_UTILS_TIMERS_H #pragma once #include <stdint.h> #include <sys/types.h> Loading Loading @@ -81,7 +77,7 @@ enum { SYSTEM_TIME_MONOTONIC = 1, // monotonic time since unspecified starting point SYSTEM_TIME_PROCESS = 2, // high-resolution per-process clock SYSTEM_TIME_THREAD = 3, // high-resolution per-thread clock SYSTEM_TIME_BOOTTIME = 4 // same as SYSTEM_TIME_MONOTONIC, but including CPU suspend time SYSTEM_TIME_BOOTTIME = 4, // same as SYSTEM_TIME_MONOTONIC, but including CPU suspend time }; // return the system-time according to the specified clock Loading @@ -104,5 +100,3 @@ int toMillisecondTimeoutDelay(nsecs_t referenceTime, nsecs_t timeoutTime); #ifdef __cplusplus } // extern "C" #endif #endif // _LIBS_UTILS_TIMERS_H