chromium/device/vr/openxr/openxr_debug_util.cc

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "device/vr/openxr/openxr_debug_util.h"

#include "base/check.h"
#include "base/logging.h"
#include "build/build_config.h"
#include "device/vr/openxr/openxr_extension_helper.h"
#include "third_party/openxr/src/include/openxr/openxr.h"

#if BUILDFLAG(IS_WIN)
#include <windows.h>
#endif

namespace device {

namespace debug {
XrResult GetCurrentXrTime(const XrInstance& instance_,
                          const OpenXrExtensionHelper& extension_helper,
                          XrTime* current_time) {
  DCHECK(current_time);
#if BUILDFLAG(IS_WIN)
  LARGE_INTEGER system_now;
  QueryPerformanceCounter(&system_now);
  if (extension_helper.ExtensionMethods()
          .xrConvertWin32PerformanceCounterToTimeKHR == nullptr) {
    return XR_ERROR_FUNCTION_UNSUPPORTED;
  }

  XrResult result = extension_helper.ExtensionMethods()
                        .xrConvertWin32PerformanceCounterToTimeKHR(
                            instance_, &system_now, current_time);
  if (XR_FAILED(result)) {
    DLOG(ERROR) << __func__ << " Failed with: " << result;
    // We don't clear the current_time state as we assume that the OpenXr method
    // leaves it in an okay state.
  }

  return result;
#else
  return XR_ERROR_FUNCTION_UNSUPPORTED;
#endif
}
}  // namespace debug

}  // namespace device