From ae29339ca138648eeaee68f801feb02d85ee2abf Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Fri, 28 Apr 2017 12:39:48 -0700 Subject: [PATCH] base: make boot_clock work on host linux, hide it on non-linux. boot_clock was previously returning zero on any platform that doesn't define __ANDROID__, including host bionic. Instead of returning a bogus value, just hide it on non-Linux platforms. Bug: http://b/37758947 Test: libbase_test32/64 on linux Change-Id: I96e1d8b92dc44c6308408900cf0d27e1e7db5569 --- base/Android.bp | 5 +---- base/chrono_utils.cpp | 7 ++----- base/chrono_utils_test.cpp | 9 +++++++-- base/include/android-base/chrono_utils.h | 2 ++ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/base/Android.bp b/base/Android.bp index 81b96db43..14bfe36ee 100644 --- a/base/Android.bp +++ b/base/Android.bp @@ -42,6 +42,7 @@ cc_library { clang: true, host_supported: true, srcs: [ + "chrono_utils.cpp", "file.cpp", "logging.cpp", "parsenetaddress.cpp", @@ -64,7 +65,6 @@ cc_library { srcs: [ "errors_unix.cpp", "properties.cpp", - "chrono_utils.cpp", ], cppflags: ["-Wexit-time-destructors"], sanitize: { @@ -74,14 +74,12 @@ cc_library { }, darwin: { srcs: [ - "chrono_utils.cpp", "errors_unix.cpp", ], cppflags: ["-Wexit-time-destructors"], }, linux_bionic: { srcs: [ - "chrono_utils.cpp", "errors_unix.cpp", ], cppflags: ["-Wexit-time-destructors"], @@ -89,7 +87,6 @@ cc_library { }, linux: { srcs: [ - "chrono_utils.cpp", "errors_unix.cpp", ], cppflags: ["-Wexit-time-destructors"], diff --git a/base/chrono_utils.cpp b/base/chrono_utils.cpp index 5eedf3bce..d73b551b5 100644 --- a/base/chrono_utils.cpp +++ b/base/chrono_utils.cpp @@ -21,17 +21,14 @@ namespace android { namespace base { +#if defined(__linux__) boot_clock::time_point boot_clock::now() { -#ifdef __ANDROID__ timespec ts; clock_gettime(CLOCK_BOOTTIME, &ts); return boot_clock::time_point(std::chrono::seconds(ts.tv_sec) + std::chrono::nanoseconds(ts.tv_nsec)); -#else - // Darwin does not support clock_gettime. - return boot_clock::time_point(); -#endif // __ANDROID__ } +#endif } // namespace base } // namespace android diff --git a/base/chrono_utils_test.cpp b/base/chrono_utils_test.cpp index 057132d9f..1f1ce15b1 100644 --- a/base/chrono_utils_test.cpp +++ b/base/chrono_utils_test.cpp @@ -16,6 +16,7 @@ #include "android-base/chrono_utils.h" +#include #include #include @@ -25,9 +26,12 @@ namespace android { namespace base { +#if defined(__linux__) std::chrono::seconds GetBootTimeSeconds() { struct timespec now; - clock_gettime(CLOCK_BOOTTIME, &now); + if (clock_gettime(CLOCK_BOOTTIME, &now) != 0) { + err(1, "clock_gettime failed"); + } auto now_tp = boot_clock::time_point(std::chrono::seconds(now.tv_sec) + std::chrono::nanoseconds(now.tv_nsec)); @@ -41,6 +45,7 @@ TEST(ChronoUtilsTest, BootClockNowSeconds) { std::chrono::duration_cast(boot_clock::now().time_since_epoch()); EXPECT_EQ(now, boot_seconds); } +#endif // defined(__linux__) } // namespace base -} // namespace android \ No newline at end of file +} // namespace android diff --git a/base/include/android-base/chrono_utils.h b/base/include/android-base/chrono_utils.h index 0086425e5..795225b9c 100644 --- a/base/include/android-base/chrono_utils.h +++ b/base/include/android-base/chrono_utils.h @@ -22,6 +22,7 @@ namespace android { namespace base { +#if defined(__linux__) // A std::chrono clock based on CLOCK_BOOTTIME. class boot_clock { public: @@ -30,6 +31,7 @@ class boot_clock { static time_point now(); }; +#endif // defined(__linux__) } // namespace base } // namespace android