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

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

Issue 2834843002: Add event listening function to openvr device (Closed)
Patch Set: 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 };
nhu 2017/04/24 01:47:06 No need to define general vr events in OpenVRDevic
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);
nhu 2017/04/24 01:47:06 VRDevice already defines OnXXX functions for event
shaobo.yan 2017/04/24 02:27:27 Due to the current class relationship, I think Ope
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);
nhu 2017/04/24 01:47:06 Can we use a VRDevice reference to OpenVRDevice in
shaobo.yan 2017/04/24 02:27:27 Yes, I think this is the base question need to dis
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 // OpenVR need invoke pollNextEvent to query system event.
62 void PollEvent();
nhu 2017/04/24 01:47:06 naming: PollEvent -> PollEvents?
shaobo.yan 2017/04/24 02:27:28 That's a better name !
63
52 private: 64 private:
53 void Run() override; 65 void Run() override;
54 66
55 void GetVSync(const device::mojom::VRVSyncProvider::GetVSyncCallback& 67 void GetVSync(const device::mojom::VRVSyncProvider::GetVSyncCallback&
56 callback) override; 68 callback) override;
57 69
58 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; 70 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
71 base::Callback<void(OpenVRDevice::VREvent)> on_polling_event_;
59 vr::IVRSystem* vr_system_; 72 vr::IVRSystem* vr_system_;
60 mojo::Binding<device::mojom::VRVSyncProvider> binding_; 73 mojo::Binding<device::mojom::VRVSyncProvider> binding_;
61 }; 74 };
62 75
63 std::unique_ptr<OpenVRRenderLoop> 76 std::unique_ptr<OpenVRRenderLoop>
64 render_loop_; // TODO (BillOrr): This should not be a unique_ptr because 77 render_loop_; // TODO (BillOrr): This should not be a unique_ptr because
65 // the render_loop_ binds to VRVSyncProvider requests, 78 // the render_loop_ binds to VRVSyncProvider requests,
66 // so its lifetime should be tied to the lifetime of that 79 // so its lifetime should be tied to the lifetime of that
67 // binding. 80 // binding.
68 81
69 mojom::VRSubmitFrameClientPtr submit_client_; 82 mojom::VRSubmitFrameClientPtr submit_client_;
70 83
84 base::WeakPtrFactory<OpenVRDevice> weak_ptr_factory_;
85
71 DISALLOW_COPY_AND_ASSIGN(OpenVRDevice); 86 DISALLOW_COPY_AND_ASSIGN(OpenVRDevice);
72 }; 87 };
73 88
74 } // namespace device 89 } // namespace device
75 90
76 #endif // DEVICE_VR_OPENVR_DEVICE_H 91 #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