| // Copyright 2020 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/net/time_sync_tracker_fuchsia.h" |
| |
| #include <lib/zx/clock.h> |
| #include <zircon/utc.h> |
| |
| #include "base/fuchsia/fuchsia_logging.h" |
| #include "base/functional/bind.h" |
| #include "base/logging.h" |
| #include "base/task/current_thread.h" |
| #include "base/time/time.h" |
| |
| namespace chromecast { |
| namespace { |
| |
| zx_handle_t GetUtcClockHandle() { |
| zx_handle_t clock_handle = zx_utc_reference_get(); |
| DCHECK(clock_handle != ZX_HANDLE_INVALID); |
| return clock_handle; |
| } |
| |
| } // namespace |
| |
| TimeSyncTrackerFuchsia::TimeSyncTrackerFuchsia() |
| : utc_clock_(GetUtcClockHandle()), time_watch_(FROM_HERE) { |
| base::CurrentIOThread::Get()->WatchZxHandle( |
| utc_clock_->get(), false /* persistent */, ZX_USER_SIGNAL_0, &time_watch_, |
| this); |
| } |
| |
| TimeSyncTrackerFuchsia::~TimeSyncTrackerFuchsia() = default; |
| |
| void TimeSyncTrackerFuchsia::OnZxHandleSignalled(zx_handle_t handle, |
| zx_signals_t signals) { |
| VLOG(1) << " Time is externally synced."; |
| is_time_synced_ = true; |
| Notify(); |
| } |
| |
| bool TimeSyncTrackerFuchsia::IsTimeSynced() const { |
| return is_time_synced_; |
| } |
| |
| } // namespace chromecast |