#ifndef CHROME_BROWSER_VR_BROWSER_RENDERER_H_
#define CHROME_BROWSER_VR_BROWSER_RENDERER_H_
#include <memory>
#include <optional>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
#include "chrome/browser/vr/graphics_delegate.h"
#include "chrome/browser/vr/ui_test_input.h"
#include "chrome/browser/vr/vr_export.h"
#include "device/vr/util/sliding_average.h"
namespace base {
class TimeTicks;
}
namespace vr {
class UiInterface;
struct RenderInfo;
struct UiVisibilityState;
class VR_EXPORT BrowserRenderer {
public:
BrowserRenderer(std::unique_ptr<UiInterface> ui,
std::unique_ptr<GraphicsDelegate> graphics_delegate,
size_t sliding_time_size);
BrowserRenderer(const BrowserRenderer&) = delete;
BrowserRenderer& operator=(const BrowserRenderer&) = delete;
~BrowserRenderer();
void DrawBrowserFrame(base::TimeTicks current_time,
const gfx::Transform& head_pose);
void DrawWebXrFrame(base::TimeTicks current_time,
const gfx::Transform& head_pose);
void WatchElementForVisibilityStatusForTesting(
std::optional<UiVisibilityState> visibility_expectation);
private:
void Draw(FrameType frame_type,
base::TimeTicks current_time,
const gfx::Transform& head_pose);
void UpdateUi(const RenderInfo& render_info,
base::TimeTicks currrent_time,
FrameType frame_type);
void DrawWebXrOverlay(const RenderInfo& render_info);
void DrawBrowserUi(const RenderInfo& render_info);
void ReportElementVisibilityStatus(const base::TimeTicks& current_time);
void ReportElementVisibilityResult(bool result);
std::unique_ptr<GraphicsDelegate> graphics_delegate_;
std::optional<UiVisibilityState> ui_visibility_state_;
device::SlidingTimeDeltaAverage ui_processing_time_;
std::unique_ptr<UiInterface> ui_;
};
}
#endif