| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromecast/media/base/default_monotonic_clock.h" |
| |
| #include <time.h> |
| |
| #include <memory> |
| |
| #include "base/time/time.h" |
| #include "build/build_config.h" |
| |
| #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) |
| #include "chromecast/media/base/buildflags.h" |
| #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || |
| // BUILDFLAG(IS_CHROMEOS) |
| |
| #if BUILDFLAG(IS_FUCHSIA) |
| #include <zircon/syscalls.h> |
| #endif // BUILDFLAG(IS_FUCHSIA) |
| |
| namespace chromecast { |
| namespace media { |
| |
| // static |
| std::unique_ptr<MonotonicClock> MonotonicClock::Create() { |
| return std::make_unique<DefaultMonotonicClock>(); |
| } |
| |
| #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) |
| int64_t MonotonicClockNow() { |
| timespec now = {0, 0}; |
| #if BUILDFLAG(MEDIA_CLOCK_MONOTONIC_RAW) |
| clock_gettime(CLOCK_MONOTONIC_RAW, &now); |
| #else |
| clock_gettime(CLOCK_MONOTONIC, &now); |
| #endif // MEDIA_CLOCK_MONOTONIC_RAW |
| return base::TimeDelta::FromTimeSpec(now).InMicroseconds(); |
| } |
| |
| #elif BUILDFLAG(IS_FUCHSIA) |
| int64_t MonotonicClockNow() { |
| return zx_clock_get_monotonic() / 1000; |
| } |
| |
| #endif |
| |
| DefaultMonotonicClock::DefaultMonotonicClock() = default; |
| |
| DefaultMonotonicClock::~DefaultMonotonicClock() = default; |
| |
| int64_t DefaultMonotonicClock::Now() const { |
| return MonotonicClockNow(); |
| } |
| |
| } // namespace media |
| } // namespace chromecast |