forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vr_device_base.cc
142 lines (110 loc) · 4.04 KB
/
vr_device_base.cc
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Copyright 2017 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.
#include "device/vr/vr_device_base.h"
#include "base/metrics/histogram_functions.h"
#include "device/vr/vr_device_provider.h"
#include "device/vr/vr_display_impl.h"
namespace device {
VRDeviceBase::VRDeviceBase(mojom::XRDeviceId id)
: id_(id), runtime_binding_(this) {}
VRDeviceBase::~VRDeviceBase() = default;
mojom::XRDeviceId VRDeviceBase::GetId() const {
return id_;
}
void VRDeviceBase::PauseTracking() {}
void VRDeviceBase::ResumeTracking() {}
mojom::VRDisplayInfoPtr VRDeviceBase::GetVRDisplayInfo() {
return display_info_.Clone();
}
void VRDeviceBase::OnExitPresent() {
if (listener_)
listener_->OnExitPresent();
presenting_ = false;
}
void VRDeviceBase::OnStartPresenting() {
presenting_ = true;
}
bool VRDeviceBase::HasExclusiveSession() {
return presenting_;
}
void VRDeviceBase::ListenToDeviceChanges(
mojom::XRRuntimeEventListenerAssociatedPtrInfo listener_info,
mojom::XRRuntime::ListenToDeviceChangesCallback callback) {
listener_.Bind(std::move(listener_info));
std::move(callback).Run(display_info_.Clone());
}
void VRDeviceBase::GetInlineFrameData(
mojom::XRFrameDataProvider::GetFrameDataCallback callback) {
if (!inline_poses_enabled_) {
std::move(callback).Run(nullptr);
return;
}
OnGetInlineFrameData(std::move(callback));
}
void VRDeviceBase::SetVRDisplayInfo(mojom::VRDisplayInfoPtr display_info) {
DCHECK(display_info);
DCHECK(display_info->id == id_);
display_info_ = std::move(display_info);
if (listener_)
listener_->OnDisplayInfoChanged(display_info_.Clone());
}
void VRDeviceBase::OnActivate(mojom::VRDisplayEventReason reason,
base::Callback<void(bool)> on_handled) {
if (listener_)
listener_->OnDeviceActivated(reason, std::move(on_handled));
}
mojom::XRRuntimePtr VRDeviceBase::BindXRRuntimePtr() {
mojom::XRRuntimePtr runtime;
runtime_binding_.Bind(mojo::MakeRequest(&runtime));
return runtime;
}
bool VRDeviceBase::ShouldPauseTrackingWhenFrameDataRestricted() {
return false;
}
void VRDeviceBase::OnListeningForActivate(bool listening) {}
void VRDeviceBase::OnGetInlineFrameData(
mojom::XRFrameDataProvider::GetFrameDataCallback callback) {
std::move(callback).Run(nullptr);
}
void VRDeviceBase::SetListeningForActivate(bool is_listening) {
OnListeningForActivate(is_listening);
}
void VRDeviceBase::EnsureInitialized(int render_process_id,
int render_frame_id,
EnsureInitializedCallback callback) {
std::move(callback).Run();
}
void VRDeviceBase::SetInlinePosesEnabled(bool enable) {
inline_poses_enabled_ = enable;
}
void VRDeviceBase::RequestHitTest(
mojom::XRRayPtr ray,
mojom::XREnvironmentIntegrationProvider::RequestHitTestCallback callback) {
NOTREACHED() << "Unexpected call to a device without hit-test support";
std::move(callback).Run(base::nullopt);
}
void VRDeviceBase::ReturnNonImmersiveSession(
mojom::XRRuntime::RequestSessionCallback callback) {
mojom::XRFrameDataProviderPtr data_provider;
mojom::XREnvironmentIntegrationProviderPtr environment_provider;
mojom::XRSessionControllerPtr controller;
magic_window_sessions_.push_back(std::make_unique<VRDisplayImpl>(
this, mojo::MakeRequest(&data_provider), mojo::MakeRequest(&controller)));
auto session = mojom::XRSession::New();
session->data_provider = data_provider.PassInterface();
if (display_info_) {
session->display_info = display_info_.Clone();
}
std::move(callback).Run(std::move(session), std::move(controller));
}
void LogViewerType(VrViewerType type) {
base::UmaHistogramSparse("VRViewerType", static_cast<int>(type));
}
void VRDeviceBase::EndMagicWindowSession(VRDisplayImpl* session) {
base::EraseIf(magic_window_sessions_,
[&](const std::unique_ptr<VRDisplayImpl>& item) {
return item.get() == session;
});
}
} // namespace device