OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_VR_DEVICE_MANAGER_H | 5 #ifndef DEVICE_VR_VR_DEVICE_MANAGER_H |
6 #define DEVICE_VR_VR_DEVICE_MANAGER_H | 6 #define DEVICE_VR_VR_DEVICE_MANAGER_H |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 namespace device { | 26 namespace device { |
27 | 27 |
28 class VRDeviceManager : public VRClientDispatcher { | 28 class VRDeviceManager : public VRClientDispatcher { |
29 public: | 29 public: |
30 DEVICE_VR_EXPORT virtual ~VRDeviceManager(); | 30 DEVICE_VR_EXPORT virtual ~VRDeviceManager(); |
31 | 31 |
32 // Returns the VRDeviceManager singleton. | 32 // Returns the VRDeviceManager singleton. |
33 static VRDeviceManager* GetInstance(); | 33 static VRDeviceManager* GetInstance(); |
34 | 34 |
| 35 // Gets a VRDevice instance if the specified service is allowed to access it. |
| 36 DEVICE_VR_EXPORT static VRDevice* GetAllowedDevice(VRServiceImpl* service, |
| 37 unsigned int index); |
| 38 |
35 // Adds a listener for device manager events. VRDeviceManager does not own | 39 // Adds a listener for device manager events. VRDeviceManager does not own |
36 // this object. | 40 // this object. |
37 void AddService(VRServiceImpl* service); | 41 void AddService(VRServiceImpl* service); |
38 void RemoveService(VRServiceImpl* service); | 42 void RemoveService(VRServiceImpl* service); |
39 | 43 |
40 DEVICE_VR_EXPORT mojo::Array<VRDisplayPtr> GetVRDevices(); | 44 DEVICE_VR_EXPORT mojo::Array<VRDisplayPtr> GetVRDevices(); |
41 DEVICE_VR_EXPORT VRDevice* GetDevice(unsigned int index); | |
42 | 45 |
| 46 // Manage presentation to only allow a single service and device at a time. |
| 47 DEVICE_VR_EXPORT bool RequestPresent(VRServiceImpl* service, |
| 48 unsigned int index); |
| 49 DEVICE_VR_EXPORT void ExitPresent(VRServiceImpl* service, unsigned int index); |
| 50 void SubmitFrame(VRServiceImpl* service, unsigned int index, VRPosePtr pose); |
| 51 |
| 52 // VRClientDispatcher implementation |
43 void OnDeviceChanged(VRDisplayPtr device) override; | 53 void OnDeviceChanged(VRDisplayPtr device) override; |
44 | 54 |
45 private: | 55 private: |
46 friend class VRDeviceManagerTest; | 56 friend class VRDeviceManagerTest; |
47 friend class VRServiceImplTest; | 57 friend class VRServiceImplTest; |
48 | 58 |
49 VRDeviceManager(); | 59 VRDeviceManager(); |
50 // Constructor for testing. | 60 // Constructor for testing. |
51 DEVICE_VR_EXPORT explicit VRDeviceManager( | 61 DEVICE_VR_EXPORT explicit VRDeviceManager( |
52 std::unique_ptr<VRDeviceProvider> provider); | 62 std::unique_ptr<VRDeviceProvider> provider); |
53 | 63 |
| 64 DEVICE_VR_EXPORT VRDevice* GetDevice(unsigned int index); |
| 65 |
54 static void SetInstance(VRDeviceManager* service); | 66 static void SetInstance(VRDeviceManager* service); |
55 static bool HasInstance(); | 67 static bool HasInstance(); |
56 | 68 |
57 void InitializeProviders(); | 69 void InitializeProviders(); |
58 void RegisterProvider(std::unique_ptr<VRDeviceProvider> provider); | 70 void RegisterProvider(std::unique_ptr<VRDeviceProvider> provider); |
59 | 71 |
60 void SchedulePollEvents(); | 72 void SchedulePollEvents(); |
61 void PollEvents(); | 73 void PollEvents(); |
62 void StopSchedulingPollEvents(); | 74 void StopSchedulingPollEvents(); |
63 | 75 |
64 using ProviderList = std::vector<linked_ptr<VRDeviceProvider>>; | 76 using ProviderList = std::vector<linked_ptr<VRDeviceProvider>>; |
65 ProviderList providers_; | 77 ProviderList providers_; |
66 | 78 |
67 // Devices are owned by their providers. | 79 // Devices are owned by their providers. |
68 using DeviceMap = std::map<unsigned int, VRDevice*>; | 80 using DeviceMap = std::map<unsigned int, VRDevice*>; |
69 DeviceMap devices_; | 81 DeviceMap devices_; |
70 | 82 |
71 bool vr_initialized_; | 83 bool vr_initialized_; |
72 | 84 |
73 using ServiceList = std::vector<VRServiceImpl*>; | 85 using ServiceList = std::vector<VRServiceImpl*>; |
74 ServiceList services_; | 86 ServiceList services_; |
75 | 87 |
| 88 // Only one service and device is allowed to present at a time. |
| 89 VRServiceImpl* presenting_service_; |
| 90 VRDevice* presenting_device_; |
| 91 |
76 // For testing. If true will not delete self when consumer count reaches 0. | 92 // For testing. If true will not delete self when consumer count reaches 0. |
77 bool keep_alive_; | 93 bool keep_alive_; |
78 | 94 |
79 bool has_scheduled_poll_; | 95 bool has_scheduled_poll_; |
80 | 96 |
81 base::ThreadChecker thread_checker_; | 97 base::ThreadChecker thread_checker_; |
82 | 98 |
83 base::RepeatingTimer timer_; | 99 base::RepeatingTimer timer_; |
84 | 100 |
85 DISALLOW_COPY_AND_ASSIGN(VRDeviceManager); | 101 DISALLOW_COPY_AND_ASSIGN(VRDeviceManager); |
86 }; | 102 }; |
87 | 103 |
88 } // namespace content | 104 } // namespace content |
89 | 105 |
90 #endif // CONTENT_BROWSER_VR_VR_DEVICE_MANAGER_H | 106 #endif // CONTENT_BROWSER_VR_VR_DEVICE_MANAGER_H |
OLD | NEW |