| Index: base/time/time_fuchsia.cc
|
| diff --git a/base/time/time_fuchsia.cc b/base/time/time_fuchsia.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..20e40a9f6da999a8ba40bf46bfbdb5aa3dce7c56
|
| --- /dev/null
|
| +++ b/base/time/time_fuchsia.cc
|
| @@ -0,0 +1,77 @@
|
| +// 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 <magenta/syscalls.h>
|
| +
|
| +#include "base/compiler_specific.h"
|
| +
|
| +namespace base {
|
| +
|
| +namespace {
|
| +
|
| +// Helper function to map an unsigned integer with nanosecond timebase to a
|
| +// signed integer with microsecond timebase.
|
| +ALWAYS_INLINE int64_t MxTimeToMicroseconds(mx_time_t nanos) {
|
| + const mx_time_t micros =
|
| + nanos / static_cast<mx_time_t>(base::Time::kNanosecondsPerMicrosecond);
|
| + return static_cast<int64_t>(micros);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// Time -----------------------------------------------------------------------
|
| +
|
| +// static
|
| +Time Time::Now() {
|
| + const mx_time_t nanos_since_unix_epoch = mx_time_get(MX_CLOCK_UTC);
|
| + CHECK(nanos_since_unix_epoch != 0);
|
| + // The following expression will overflow in the year 289938 A.D.:
|
| + return Time(MxTimeToMicroseconds(nanos_since_unix_epoch) +
|
| + kTimeTToMicrosecondsOffset);
|
| +}
|
| +
|
| +// static
|
| +Time Time::NowFromSystemTime() {
|
| + return Now();
|
| +}
|
| +
|
| +// TimeTicks ------------------------------------------------------------------
|
| +
|
| +// static
|
| +TimeTicks TimeTicks::Now() {
|
| + const mx_time_t nanos_since_boot = mx_time_get(MX_CLOCK_MONOTONIC);
|
| + CHECK(nanos_since_boot != 0);
|
| + return TimeTicks(MxTimeToMicroseconds(nanos_since_boot));
|
| +}
|
| +
|
| +// static
|
| +TimeTicks::Clock TimeTicks::GetClock() {
|
| + return Clock::FUCHSIA_MX_CLOCK_MONOTONIC;
|
| +}
|
| +
|
| +// static
|
| +bool TimeTicks::IsHighResolution() {
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +bool TimeTicks::IsConsistentAcrossProcesses() {
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +TimeTicks TimeTicks::FromMXTime(mx_time_t nanos_since_boot) {
|
| + return TimeTicks(MxTimeToMicroseconds(nanos_since_boot));
|
| +}
|
| +
|
| +// static
|
| +ThreadTicks ThreadTicks::Now() {
|
| + const mx_time_t nanos_since_thread_started = mx_time_get(MX_CLOCK_THREAD);
|
| + CHECK(nanos_since_thread_started != 0);
|
| + return ThreadTicks(MxTimeToMicroseconds(nanos_since_thread_started));
|
| +}
|
| +
|
| +} // namespace base
|
|
|