// Copyright 2018 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.

#ifndef CHROME_BROWSER_VR_SCHEDULER_DELEGATE_H_
#define CHROME_BROWSER_VR_SCHEDULER_DELEGATE_H_

#include "base/callback.h"
#include "base/time/time.h"
#include "chrome/browser/vr/frame_type.h"
#include "chrome/browser/vr/vr_export.h"
#include "device/vr/public/mojom/isolated_xr_service.mojom.h"
#include "device/vr/public/mojom/vr_service.mojom.h"

namespace gfx {
class Transform;
}

namespace vr {

class SchedulerBrowserRendererInterface;

// The SchedulerDelegate is responsible for starting the draw calls of the
// BrowserRenderer, given different signals, such as WebXR frames submitted or
// VSync events.
class VR_EXPORT SchedulerDelegate {
 public:
  virtual ~SchedulerDelegate() {}

  virtual void OnPause() = 0;
  virtual void OnResume() = 0;

  virtual void OnExitPresent() = 0;
  virtual void SetWebXrMode(bool enabled) = 0;
  virtual void SetShowingVrDialog(bool showing) = 0;
  virtual void SetBrowserRenderer(
      SchedulerBrowserRendererInterface* browser_renderer) = 0;
  virtual void SubmitDrawnFrame(FrameType frame_type,
                                const gfx::Transform& head_pose) = 0;
  virtual void AddInputSourceState(
      device::mojom::XRInputSourceStatePtr state) = 0;
  virtual void ConnectPresentingService(
      device::mojom::VRDisplayInfoPtr display_info,
      device::mojom::XRRuntimeSessionOptionsPtr options) = 0;
};

}  // namespace vr

#endif  // CHROME_BROWSER_VR_SCHEDULER_DELEGATE_H_
