Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: device/vr/openvr/openvr_device.h

Issue 2834843002: Add event listening function to openvr device (Closed)
Patch Set: Address nhu@ some comments and temporary fix initial vr_system in each OnChange call issue Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | device/vr/openvr/openvr_device.cc » ('j') | device/vr/openvr/openvr_device.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef DEVICE_VR_OPENVR_DEVICE_H 5 #ifndef DEVICE_VR_OPENVR_DEVICE_H
6 #define DEVICE_VR_OPENVR_DEVICE_H 6 #define DEVICE_VR_OPENVR_DEVICE_H
7 7
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/threading/simple_thread.h" 9 #include "base/threading/simple_thread.h"
10 #include "device/vr/vr_device.h" 10 #include "device/vr/vr_device.h"
11 #include "mojo/public/cpp/bindings/binding.h" 11 #include "mojo/public/cpp/bindings/binding.h"
12 12
13 namespace vr { 13 namespace vr {
14 class IVRSystem; 14 class IVRSystem;
15 } // namespace vr 15 } // namespace vr
16 16
17 namespace device { 17 namespace device {
18 18
19 class OpenVRDevice : public VRDevice { 19 class OpenVRDevice : public VRDevice {
20 public: 20 public:
21 enum VREvent { CONNECTED = 0, DISCONNECTED = 1, CHANGED = 2 };
22
21 OpenVRDevice(); 23 OpenVRDevice();
22 ~OpenVRDevice() override; 24 ~OpenVRDevice() override;
23 25
24 // VRDevice 26 // VRDevice
25 void CreateVRDisplayInfo( 27 void CreateVRDisplayInfo(
26 const base::Callback<void(mojom::VRDisplayInfoPtr)>& on_created) override; 28 const base::Callback<void(mojom::VRDisplayInfoPtr)>& on_created) override;
27 29
28 void RequestPresent(mojom::VRSubmitFrameClientPtr submit_client, 30 void RequestPresent(mojom::VRSubmitFrameClientPtr submit_client,
29 const base::Callback<void(bool)>& callback) override; 31 const base::Callback<void(bool)>& callback) override;
30 void SetSecureOrigin(bool secure_origin) override; 32 void SetSecureOrigin(bool secure_origin) override;
31 void ExitPresent() override; 33 void ExitPresent() override;
32 34
33 void SubmitFrame(int16_t frame_index, 35 void SubmitFrame(int16_t frame_index,
34 const gpu::MailboxHolder& mailbox) override; 36 const gpu::MailboxHolder& mailbox) override;
35 void UpdateLayerBounds(int16_t frame_index, 37 void UpdateLayerBounds(int16_t frame_index,
36 mojom::VRLayerBoundsPtr left_bounds, 38 mojom::VRLayerBoundsPtr left_bounds,
37 mojom::VRLayerBoundsPtr right_bounds, 39 mojom::VRLayerBoundsPtr right_bounds,
38 int16_t source_width, 40 int16_t source_width,
39 int16_t source_height) override; 41 int16_t source_height) override;
40 void GetVRVSyncProvider(mojom::VRVSyncProviderRequest request) override; 42 void GetVRVSyncProvider(mojom::VRVSyncProviderRequest request) override;
41 43
44 void OnPollingEvent(OpenVRDevice::VREvent event);
45
42 private: 46 private:
43 class OpenVRRenderLoop : public base::SimpleThread, 47 class OpenVRRenderLoop : public base::SimpleThread,
44 device::mojom::VRVSyncProvider { 48 device::mojom::VRVSyncProvider {
45 public: 49 public:
46 OpenVRRenderLoop(vr::IVRSystem* vr); 50 OpenVRRenderLoop(vr::IVRSystem* vr);
47 51
52 void RegistPollingEventCallback(
53 const base::Callback<void(OpenVRDevice::VREvent)>& onPollingVREvent);
54
55 void UnregistPollingEventCallback();
56
48 void Bind(mojom::VRVSyncProviderRequest request); 57 void Bind(mojom::VRVSyncProviderRequest request);
49 58
50 mojom::VRPosePtr getPose(); 59 mojom::VRPosePtr getPose();
51 60
61 vr::IVRSystem* GetVRSystem();
62
63 // OpenVR need invoke pollNextEvent to query system event.
64 void PollEvents();
65
52 private: 66 private:
53 void Run() override; 67 void Run() override;
54 68
55 void GetVSync(const device::mojom::VRVSyncProvider::GetVSyncCallback& 69 void GetVSync(const device::mojom::VRVSyncProvider::GetVSyncCallback&
56 callback) override; 70 callback) override;
57 71
58 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; 72 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
73 base::Callback<void(OpenVRDevice::VREvent)> on_polling_event_;
59 vr::IVRSystem* vr_system_; 74 vr::IVRSystem* vr_system_;
60 mojo::Binding<device::mojom::VRVSyncProvider> binding_; 75 mojo::Binding<device::mojom::VRVSyncProvider> binding_;
61 }; 76 };
62 77
63 std::unique_ptr<OpenVRRenderLoop> 78 std::unique_ptr<OpenVRRenderLoop>
64 render_loop_; // TODO (BillOrr): This should not be a unique_ptr because 79 render_loop_; // TODO (BillOrr): This should not be a unique_ptr because
65 // the render_loop_ binds to VRVSyncProvider requests, 80 // the render_loop_ binds to VRVSyncProvider requests,
66 // so its lifetime should be tied to the lifetime of that 81 // so its lifetime should be tied to the lifetime of that
67 // binding. 82 // binding.
68 83
69 mojom::VRSubmitFrameClientPtr submit_client_; 84 mojom::VRSubmitFrameClientPtr submit_client_;
70 85
86 base::WeakPtrFactory<OpenVRDevice> weak_ptr_factory_;
87
71 DISALLOW_COPY_AND_ASSIGN(OpenVRDevice); 88 DISALLOW_COPY_AND_ASSIGN(OpenVRDevice);
72 }; 89 };
73 90
74 } // namespace device 91 } // namespace device
75 92
76 #endif // DEVICE_VR_OPENVR_DEVICE_H 93 #endif // DEVICE_VR_OPENVR_DEVICE_H
OLDNEW
« no previous file with comments | « no previous file | device/vr/openvr/openvr_device.cc » ('j') | device/vr/openvr/openvr_device.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698