1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "base/time/time.h"
- #include <threads.h>
- #include <zircon/syscalls.h>
- #include <zircon/threads.h>
- #include "base/check_op.h"
- #include "base/fuchsia/fuchsia_logging.h"
- #include "base/time/time_override.h"
- namespace base {
- // Time -----------------------------------------------------------------------
- namespace subtle {
- Time TimeNowIgnoringOverride() {
- timespec ts;
- int status = timespec_get(&ts, TIME_UTC);
- CHECK(status != 0);
- return Time::FromTimeSpec(ts);
- }
- Time TimeNowFromSystemTimeIgnoringOverride() {
- // Just use TimeNowIgnoringOverride() because it returns the system time.
- return TimeNowIgnoringOverride();
- }
- } // namespace subtle
- // TimeTicks ------------------------------------------------------------------
- namespace subtle {
- TimeTicks TimeTicksNowIgnoringOverride() {
- const zx_time_t nanos_since_boot = zx_clock_get_monotonic();
- CHECK_NE(0, nanos_since_boot);
- return TimeTicks::FromZxTime(nanos_since_boot);
- }
- } // namespace subtle
- // static
- TimeDelta TimeDelta::FromZxDuration(zx_duration_t nanos) {
- return Nanoseconds(nanos);
- }
- zx_duration_t TimeDelta::ToZxDuration() const {
- return InNanoseconds();
- }
- // static
- Time Time::FromZxTime(zx_time_t nanos_since_unix_epoch) {
- return UnixEpoch() + Nanoseconds(nanos_since_unix_epoch);
- }
- zx_time_t Time::ToZxTime() const {
- return (*this - UnixEpoch()).InNanoseconds();
- }
- // static
- TimeTicks::Clock TimeTicks::GetClock() {
- return Clock::FUCHSIA_ZX_CLOCK_MONOTONIC;
- }
- // static
- bool TimeTicks::IsHighResolution() {
- return true;
- }
- // static
- bool TimeTicks::IsConsistentAcrossProcesses() {
- return true;
- }
- // static
- TimeTicks TimeTicks::FromZxTime(zx_time_t nanos_since_boot) {
- return TimeTicks() + Nanoseconds(nanos_since_boot);
- }
- zx_time_t TimeTicks::ToZxTime() const {
- return (*this - TimeTicks()).InNanoseconds();
- }
- // ThreadTicks ----------------------------------------------------------------
- namespace subtle {
- ThreadTicks ThreadTicksNowIgnoringOverride() {
- zx_info_thread_stats_t info;
- zx_status_t status = zx_object_get_info(thrd_get_zx_handle(thrd_current()),
- ZX_INFO_THREAD_STATS, &info,
- sizeof(info), nullptr, nullptr);
- ZX_CHECK(status == ZX_OK, status);
- return ThreadTicks() + Nanoseconds(info.total_runtime);
- }
- } // namespace subtle
- } // namespace base
|