// Copyright (c) 2013 The Chromium OS 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 "p2p/common/clock.h"

#include <time.h>
#include <unistd.h>

namespace p2p {

namespace common {

void Clock::Sleep(const base::TimeDelta& duration) {
  int64_t duration_usec = duration.InMicroseconds();
  int64_t duration_sec = duration_usec / base::Time::kMicrosecondsPerSecond;
  int64_t fractional_usec =
      duration_usec - duration_sec * base::Time::kMicrosecondsPerSecond;
  struct timespec req;
  req.tv_sec = duration_sec;
  req.tv_nsec = fractional_usec * base::Time::kNanosecondsPerMicrosecond;
  nanosleep(&req, NULL);
}

base::Time Clock::GetMonotonicTime() {
  struct timespec now_ts;
  if (clock_gettime(CLOCK_MONOTONIC_RAW, &now_ts) != 0) {
    // Avoid logging this as an error as call-sites may call this very
    // often and we don't want to fill up the disk...
    return base::Time();
  }
  struct timeval now_tv;
  now_tv.tv_sec = now_ts.tv_sec;
  now_tv.tv_usec = now_ts.tv_nsec / base::Time::kNanosecondsPerMicrosecond;
  return base::Time::FromTimeVal(now_tv);
}

}  // namespace common

}  // namespace p2p
