// Copyright 2017 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#if SB_API_VERSION < 16

#include "starboard/time.h"

#include <windows.h>

#include "starboard/common/log.h"

SbTimeMonotonic SbTimeGetMonotonicNow() {
  LARGE_INTEGER counts;
  bool success;

  success = QueryPerformanceCounter(&counts);

  // "On systems that run Windows XP or later,
  // the function will always succeed and will thus never return zero."
  // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644904(v=vs.85).aspx
  SB_DCHECK(success);

  LARGE_INTEGER countsPerSecond;
  success = QueryPerformanceFrequency(&countsPerSecond);
  // "On systems that run Windows XP or later,
  // the function will always succeed and will thus never return zero."
  // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644905(v=vs.85).aspx
  SB_DCHECK(success);

  // An observed value of countsPerSecond on a desktop x86 machine is
  // ~2.5e6. With this frequency, it will take ~37500 days to exceed
  // 2^53, which is the mantissa precision of a double.
  // Hence, we can safely convert to a double here without losing precision.
  double result = static_cast<double>(counts.QuadPart);
  result *= (1000.0 * 1000.0) / countsPerSecond.QuadPart;

  return static_cast<SbTimeMonotonic>(result);
}

#endif  // SB_API_VERSION < 16
