blob: 510ef45ab73036f0a5d9566c85834d443ca5dc18 [file] [log] [blame]
// 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