| // Copyright 2019 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 "third_party/openscreen/src/platform/api/time.h" | 
 |  | 
 | #include "base/compiler_specific.h" | 
 | #include "base/logging.h" | 
 | #include "base/time/time.h" | 
 |  | 
 | using std::chrono::microseconds; | 
 | using std::chrono::seconds; | 
 |  | 
 | namespace openscreen { | 
 |  | 
 | Clock::time_point Clock::now() noexcept { | 
 |   // Open Screen requires at least 10,000 ticks per second, according to the | 
 |   // docs. If IsHighResolution is false, the supplied resolution is much worse | 
 |   // than that (potentially up to ~15.6ms). | 
 |   if (UNLIKELY(!base::TimeTicks::IsHighResolution())) { | 
 |     static bool need_to_log_once = true; | 
 |     LOG_IF(ERROR, need_to_log_once) | 
 |         << "Open Screen requires a high resolution clock to work properly."; | 
 |     need_to_log_once = false; | 
 |   } | 
 |  | 
 |   return Clock::time_point( | 
 |       microseconds(base::TimeTicks::Now().since_origin().InMicroseconds())); | 
 | } | 
 |  | 
 | std::chrono::seconds GetWallTimeSinceUnixEpoch() noexcept { | 
 |   const auto delta = base::Time::Now() - base::Time::UnixEpoch(); | 
 |   return seconds(delta.InSeconds()); | 
 | } | 
 |  | 
 | }  // namespace openscreen |