diff --git a/base/Android.bp b/base/Android.bp
index df09784..a7600f3 100644
--- a/base/Android.bp
+++ b/base/Android.bp
@@ -45,32 +45,21 @@
             srcs: [
                 "errors_unix.cpp",
                 "properties.cpp",
-                "chrono_utils.cpp",
             ],
             cppflags: ["-Wexit-time-destructors"],
         },
         darwin: {
-            srcs: [
-                "chrono_utils.cpp",
-                "errors_unix.cpp",
-            ],
+            srcs: ["errors_unix.cpp"],
             cppflags: ["-Wexit-time-destructors"],
         },
         linux_bionic: {
-            srcs: [
-                "chrono_utils.cpp",
-                "errors_unix.cpp",
-            ],
+            srcs: ["errors_unix.cpp"],
             cppflags: ["-Wexit-time-destructors"],
             enabled: true,
         },
         linux: {
-            srcs: [
-                "chrono_utils.cpp",
-                "errors_unix.cpp",
-            ],
+            srcs: ["errors_unix.cpp"],
             cppflags: ["-Wexit-time-destructors"],
-            host_ldlibs: ["-lrt"],
         },
         windows: {
             srcs: [
@@ -105,14 +94,7 @@
     },
     target: {
         android: {
-            srcs: [
-                "chrono_utils_test.cpp",
-                "properties_test.cpp"
-            ],
-        },
-        linux: {
-            srcs: ["chrono_utils_test.cpp"],
-            host_ldlibs: ["-lrt"],
+            srcs: ["properties_test.cpp"],
         },
         windows: {
             srcs: ["utf8_test.cpp"],
diff --git a/base/chrono_utils.cpp b/base/chrono_utils.cpp
deleted file mode 100644
index 644fd28..0000000
--- a/base/chrono_utils.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-#include "android-base/chrono_utils.h"
-
-#include <time.h>
-
-namespace android {
-namespace base {
-
-boot_clock::time_point boot_clock::now() {
-  timespec ts;
-  clockid_t clk_id;
-
-#ifdef __ANDROID__
-  clk_id = CLOCK_BOOTTIME;
-#else
-  // Darwin does not support CLOCK_BOOTTIME.  CLOCK_MONOTONIC is a sufficient
-  // fallback; the only loss of precision is the time duration when the system
-  // is suspended.
-  clk_id = CLOCK_MONOTONIC;
-#endif  // __ANDROID__
-
-  clock_gettime(clk_id, &ts);
-  return boot_clock::time_point(std::chrono::seconds(ts.tv_sec) +
-                                std::chrono::nanoseconds(ts.tv_nsec));
-}
-
-}  // namespace base
-}  // namespace android
diff --git a/base/chrono_utils_test.cpp b/base/chrono_utils_test.cpp
deleted file mode 100644
index bc6df4b..0000000
--- a/base/chrono_utils_test.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-#include "android-base/chrono_utils.h"
-
-#include <time.h>
-
-#include <chrono>
-
-#include <gtest/gtest.h>
-
-namespace android {
-namespace base {
-
-std::chrono::seconds GetBootTimeSeconds() {
-  struct timespec now;
-  clock_gettime(CLOCK_BOOTTIME, &now);
-
-  auto now_tp = boot_clock::time_point(
-      std::chrono::seconds(now.tv_sec) + std::chrono::nanoseconds(now.tv_nsec));
-  return std::chrono::duration_cast<std::chrono::seconds>(
-      now_tp.time_since_epoch());
-}
-
-// Tests (at least) the seconds accuracy of the boot_clock::now() method.
-TEST(ChronoUtilsTest, BootClockNowSeconds) {
-  auto now = GetBootTimeSeconds();
-  auto boot_seconds = std::chrono::duration_cast<std::chrono::seconds>(
-      boot_clock::now().time_since_epoch());
-  EXPECT_EQ(now, boot_seconds);
-}
-
-}  // namespace base
-}  // namespace android
\ No newline at end of file
diff --git a/base/include/android-base/chrono_utils.h b/base/include/android-base/chrono_utils.h
deleted file mode 100644
index 0086425..0000000
--- a/base/include/android-base/chrono_utils.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-#ifndef ANDROID_BASE_CHRONO_UTILS_H
-#define ANDROID_BASE_CHRONO_UTILS_H
-
-#include <chrono>
-
-namespace android {
-namespace base {
-
-// A std::chrono clock based on CLOCK_BOOTTIME.
-class boot_clock {
- public:
-  typedef std::chrono::nanoseconds duration;
-  typedef std::chrono::time_point<boot_clock, duration> time_point;
-
-  static time_point now();
-};
-
-}  // namespace base
-}  // namespace android
-
-#endif  // ANDROID_BASE_CHRONO_UTILS_H
diff --git a/bootstat/Android.bp b/bootstat/Android.bp
index 95c9af5..f744ad1 100644
--- a/bootstat/Android.bp
+++ b/bootstat/Android.bp
@@ -16,6 +16,7 @@
 
 bootstat_lib_src_files = [
     "boot_event_record_store.cpp",
+    "uptime_parser.cpp",
 ]
 
 cc_defaults {
diff --git a/bootstat/boot_event_record_store.cpp b/bootstat/boot_event_record_store.cpp
index 3243676..2648594 100644
--- a/bootstat/boot_event_record_store.cpp
+++ b/bootstat/boot_event_record_store.cpp
@@ -20,16 +20,13 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <utime.h>
-
-#include <chrono>
 #include <cstdlib>
 #include <string>
 #include <utility>
-
-#include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/parseint.h>
+#include "uptime_parser.h"
 
 namespace {
 
@@ -58,9 +55,7 @@
 }
 
 void BootEventRecordStore::AddBootEvent(const std::string& event) {
-  auto uptime = std::chrono::duration_cast<std::chrono::seconds>(
-      android::base::boot_clock::now().time_since_epoch());
-  AddBootEventWithValue(event, uptime.count());
+  AddBootEventWithValue(event, bootstat::ParseUptime());
 }
 
 // The implementation of AddBootEventValue makes use of the mtime file
diff --git a/bootstat/boot_event_record_store_test.cpp b/bootstat/boot_event_record_store_test.cpp
index 0df6706..90f6513 100644
--- a/bootstat/boot_event_record_store_test.cpp
+++ b/bootstat/boot_event_record_store_test.cpp
@@ -21,18 +21,15 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <unistd.h>
-
-#include <chrono>
 #include <cstdint>
 #include <cstdlib>
-
-#include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/test_utils.h>
 #include <android-base/unique_fd.h>
 #include <gtest/gtest.h>
 #include <gmock/gmock.h>
+#include "uptime_parser.h"
 
 using testing::UnorderedElementsAreArray;
 
@@ -92,12 +89,6 @@
   rmdir(path.c_str());
 }
 
-// Returns the time in seconds since boot.
-time_t GetUptimeSeconds() {
-  return std::chrono::duration_cast<std::chrono::seconds>(
-      android::base::boot_clock::now().time_since_epoch()).count();
-}
-
 class BootEventRecordStoreTest : public ::testing::Test {
  public:
   BootEventRecordStoreTest() {
@@ -135,7 +126,7 @@
   BootEventRecordStore store;
   store.SetStorePath(GetStorePathForTesting());
 
-  time_t uptime = GetUptimeSeconds();
+  time_t uptime = bootstat::ParseUptime();
   ASSERT_NE(-1, uptime);
 
   store.AddBootEvent("cenozoic");
@@ -150,7 +141,7 @@
   BootEventRecordStore store;
   store.SetStorePath(GetStorePathForTesting());
 
-  time_t uptime = GetUptimeSeconds();
+  time_t uptime = bootstat::ParseUptime();
   ASSERT_NE(-1, uptime);
 
   store.AddBootEvent("cretaceous");
diff --git a/bootstat/bootstat.cpp b/bootstat/bootstat.cpp
index d594cdb..a7354a7 100644
--- a/bootstat/bootstat.cpp
+++ b/bootstat/bootstat.cpp
@@ -21,7 +21,6 @@
 #include <getopt.h>
 #include <unistd.h>
 
-#include <chrono>
 #include <cmath>
 #include <cstddef>
 #include <cstdio>
@@ -32,7 +31,6 @@
 #include <vector>
 
 #include <android/log.h>
-#include <android-base/chrono_utils.h>
 #include <android-base/logging.h>
 #include <android-base/parseint.h>
 #include <android-base/strings.h>
@@ -40,6 +38,7 @@
 #include <metricslogger/metrics_logger.h>
 
 #include "boot_event_record_store.h"
+#include "uptime_parser.h"
 
 namespace {
 
@@ -248,8 +247,7 @@
   BootEventRecordStore boot_event_store;
   BootEventRecordStore::BootEventRecord record;
 
-  auto uptime = std::chrono::duration_cast<std::chrono::seconds>(
-      android::base::boot_clock::now().time_since_epoch());
+  time_t uptime = bootstat::ParseUptime();
   time_t current_time_utc = time(nullptr);
 
   if (boot_event_store.GetBootEvent("last_boot_time_utc", &record)) {
@@ -276,22 +274,22 @@
     // Log the amount of time elapsed until the device is decrypted, which
     // includes the variable amount of time the user takes to enter the
     // decryption password.
-    boot_event_store.AddBootEventWithValue("boot_decryption_complete", uptime.count());
+    boot_event_store.AddBootEventWithValue("boot_decryption_complete", uptime);
 
     // Subtract the decryption time to normalize the boot cycle timing.
-    std::chrono::seconds boot_complete = std::chrono::seconds(uptime.count() - record.second);
+    time_t boot_complete = uptime - record.second;
     boot_event_store.AddBootEventWithValue(boot_complete_prefix + "_post_decrypt",
-                                           boot_complete.count());
+                                           boot_complete);
 
 
   } else {
     boot_event_store.AddBootEventWithValue(boot_complete_prefix + "_no_encryption",
-                                           uptime.count());
+                                           uptime);
   }
 
   // Record the total time from device startup to boot complete, regardless of
   // encryption state.
-  boot_event_store.AddBootEventWithValue(boot_complete_prefix, uptime.count());
+  boot_event_store.AddBootEventWithValue(boot_complete_prefix, uptime);
 
   RecordInitBootTimeProp(&boot_event_store, "ro.boottime.init");
   RecordInitBootTimeProp(&boot_event_store, "ro.boottime.init.selinux");
diff --git a/bootstat/uptime_parser.cpp b/bootstat/uptime_parser.cpp
new file mode 100644
index 0000000..7c2034c
--- /dev/null
+++ b/bootstat/uptime_parser.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2016 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 "uptime_parser.h"
+
+#include <time.h>
+#include <cstdlib>
+#include <string>
+#include <android-base/file.h>
+#include <android-base/logging.h>
+
+namespace bootstat {
+
+time_t ParseUptime() {
+  std::string uptime_str;
+  if (!android::base::ReadFileToString("/proc/uptime", &uptime_str)) {
+    PLOG(ERROR) << "Failed to read /proc/uptime";
+    return -1;
+  }
+
+  // Cast intentionally rounds down.
+  return static_cast<time_t>(strtod(uptime_str.c_str(), NULL));
+}
+
+}  // namespace bootstat
\ No newline at end of file
diff --git a/bootstat/uptime_parser.h b/bootstat/uptime_parser.h
new file mode 100644
index 0000000..756ae9b
--- /dev/null
+++ b/bootstat/uptime_parser.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#ifndef UPTIME_PARSER_H_
+#define UPTIME_PARSER_H_
+
+#include <time.h>
+
+namespace bootstat {
+
+// Returns the number of seconds the system has been on since reboot.
+time_t ParseUptime();
+
+}  // namespace bootstat
+
+#endif  // UPTIME_PARSER_H_
\ No newline at end of file
diff --git a/init/Android.mk b/init/Android.mk
index f9c6f94..a10a714 100644
--- a/init/Android.mk
+++ b/init/Android.mk
@@ -36,7 +36,7 @@
 LOCAL_SRC_FILES := \
     parser/tokenizer_test.cpp \
 
-LOCAL_STATIC_LIBRARIES := libbase libinit_parser
+LOCAL_STATIC_LIBRARIES := libinit_parser
 LOCAL_CLANG := true
 include $(BUILD_HOST_NATIVE_TEST)
 endif
diff --git a/init/init.cpp b/init/init.cpp
index 4af0656..43f601f 100644
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -40,7 +40,6 @@
 #include <selinux/label.h>
 #include <selinux/android.h>
 
-#include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
@@ -69,7 +68,6 @@
 #include "util.h"
 #include "watchdogd.h"
 
-using android::base::boot_clock;
 using android::base::StringPrintf;
 
 struct selabel_handle *sehandle;
@@ -752,7 +750,7 @@
         return watchdogd_main(argc, argv);
     }
 
-    boot_clock::time_point start_time = android::base::boot_clock::now();
+    boot_clock::time_point start_time = boot_clock::now();
 
     // Clear the umask.
     umask(0);
diff --git a/init/service.cpp b/init/service.cpp
index cbdc4a8..e186f27 100644
--- a/init/service.cpp
+++ b/init/service.cpp
@@ -32,7 +32,6 @@
 
 #include <selinux/selinux.h>
 
-#include <android-base/chrono_utils.h>
 #include <android-base/file.h>
 #include <android-base/parseint.h>
 #include <android-base/stringprintf.h>
@@ -48,7 +47,6 @@
 #include "property_service.h"
 #include "util.h"
 
-using android::base::boot_clock;
 using android::base::ParseInt;
 using android::base::StringPrintf;
 using android::base::WriteStringToFile;
diff --git a/init/service.h b/init/service.h
index 3dc0e53..013e65f 100644
--- a/init/service.h
+++ b/init/service.h
@@ -25,8 +25,6 @@
 #include <string>
 #include <vector>
 
-#include <android-base/chrono_utils.h>
-
 #include "action.h"
 #include "capabilities.h"
 #include "descriptors.h"
@@ -137,8 +135,8 @@
 
     unsigned flags_;
     pid_t pid_;
-    android::base::boot_clock::time_point time_started_; // time of last start
-    android::base::boot_clock::time_point time_crashed_; // first crash within inspection window
+    boot_clock::time_point time_started_; // time of last start
+    boot_clock::time_point time_crashed_; // first crash within inspection window
     int crash_count_;                     // number of times crashed within window
 
     uid_t uid_;
diff --git a/init/util.cpp b/init/util.cpp
index f59ba82..888a366 100644
--- a/init/util.cpp
+++ b/init/util.cpp
@@ -51,8 +51,6 @@
 #include "property_service.h"
 #include "util.h"
 
-using android::base::boot_clock;
-
 static unsigned int do_decode_uid(const char *s)
 {
     unsigned int v;
@@ -201,16 +199,11 @@
     return success;
 }
 
-Timer::Timer() : start_(boot_clock::now()) {
-}
-
-double Timer::duration_s() const {
-  typedef std::chrono::duration<double> double_duration;
-  return std::chrono::duration_cast<double_duration>(boot_clock::now() - start_).count();
-}
-
-int64_t Timer::duration_ms() const {
-  return std::chrono::duration_cast<std::chrono::milliseconds>(boot_clock::now() - start_).count();
+boot_clock::time_point boot_clock::now() {
+  timespec ts;
+  clock_gettime(CLOCK_BOOTTIME, &ts);
+  return boot_clock::time_point(std::chrono::seconds(ts.tv_sec) +
+                                std::chrono::nanoseconds(ts.tv_nsec));
 }
 
 int mkdir_recursive(const char *pathname, mode_t mode)
diff --git a/init/util.h b/init/util.h
index 4444427..5c38dc3 100644
--- a/init/util.h
+++ b/init/util.h
@@ -25,8 +25,6 @@
 #include <ostream>
 #include <string>
 
-#include <android-base/chrono_utils.h>
-
 #define COLDBOOT_DONE "/dev/.coldboot_done"
 
 using namespace std::chrono_literals;
@@ -37,16 +35,32 @@
 bool read_file(const char* path, std::string* content);
 bool write_file(const char* path, const char* content);
 
+// A std::chrono clock based on CLOCK_BOOTTIME.
+class boot_clock {
+ public:
+  typedef std::chrono::nanoseconds duration;
+  typedef std::chrono::time_point<boot_clock, duration> time_point;
+  static constexpr bool is_steady = true;
+
+  static time_point now();
+};
+
 class Timer {
  public:
-  Timer();
+  Timer() : start_(boot_clock::now()) {
+  }
 
-  double duration_s() const;
+  double duration_s() const {
+    typedef std::chrono::duration<double> double_duration;
+    return std::chrono::duration_cast<double_duration>(boot_clock::now() - start_).count();
+  }
 
-  int64_t duration_ms() const;
+  int64_t duration_ms() const {
+    return std::chrono::duration_cast<std::chrono::milliseconds>(boot_clock::now() - start_).count();
+  }
 
  private:
-  android::base::boot_clock::time_point start_;
+  boot_clock::time_point start_;
 };
 
 std::ostream& operator<<(std::ostream& os, const Timer& t);
