1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#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/public/mojom/isolated_xr_service.mojom-forward.h"
#include "device/vr/public/mojom/vr_service.mojom-forward.h"
#include "device/vr/util/sliding_average.h"
namespace base {
class TimeTicks;
} // namespace base
namespace vr {
class UiInterface;
struct RenderInfo;
struct UiVisibilityState;
// The BrowserRenderer handles all input/output activities during a frame.
// This includes head movement, controller movement and input, audio output and
// rendering of the frame.
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);
// Allows passing std::nullopt in case the test is shutdown before the
// visibility notification has fired.
void WatchElementForVisibilityStatusForTesting(
std::optional<UiVisibilityState> visibility_expectation);
private:
void Draw(FrameType frame_type,
base::TimeTicks current_time,
const gfx::Transform& head_pose);
// Position, hide and/or show UI elements, process input and update textures.
// Returns true if the scene changed.
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_;
// ui_ is using gl contexts during destruction (skia context specifically), so
// it must be destroyed before graphics_delegate_.
std::unique_ptr<UiInterface> ui_;
};
} // namespace vr
#endif // CHROME_BROWSER_VR_BROWSER_RENDERER_H_
|