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

Side by Side Diff: device/vr/vr_device_manager.cc

Issue 2471433002: Implement WebVR presentation pausing for VR Shell Menu Mode (Closed)
Patch Set: Add comments to VRDisplay Created 4 years, 1 month 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
OLDNEW
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 #include "device/vr/vr_device_manager.h" 5 #include "device/vr/vr_device_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/memory/singleton.h" 11 #include "base/memory/singleton.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 13
14 #if defined(OS_ANDROID) 14 #if defined(OS_ANDROID)
15 #include "device/vr/android/gvr/gvr_device_provider.h" 15 #include "device/vr/android/gvr/gvr_device_provider.h"
16 #endif 16 #endif
17 17
18 namespace device { 18 namespace device {
19 19
20 namespace { 20 namespace {
21 VRDeviceManager* g_vr_device_manager = nullptr; 21 VRDeviceManager* g_vr_device_manager = nullptr;
22 } 22 }
23 23
24 VRDeviceManager::VRDeviceManager() 24 VRDeviceManager::VRDeviceManager()
25 : vr_initialized_(false), 25 : vr_initialized_(false),
26 keep_alive_(false), 26 keep_alive_(false),
27 has_scheduled_poll_(false) { 27 has_scheduled_poll_(false) {
28 // Register VRDeviceProviders for the current platform 28 // Register VRDeviceProviders for the current platform
29 #if defined(OS_ANDROID) 29 #if defined(OS_ANDROID)
30 RegisterProvider(base::WrapUnique(new GvrDeviceProvider())); 30 scoped_refptr<VRDeviceProvider> provider = new GvrDeviceProvider();
31 RegisterProvider(std::move(provider));
31 #endif 32 #endif
32 } 33 }
33 34
34 VRDeviceManager::VRDeviceManager(std::unique_ptr<VRDeviceProvider> provider) 35 VRDeviceManager::VRDeviceManager(scoped_refptr<VRDeviceProvider> provider)
35 : vr_initialized_(false), 36 : vr_initialized_(false), keep_alive_(true), has_scheduled_poll_(false) {
36 keep_alive_(true),
37 has_scheduled_poll_(false) {
38 thread_checker_.DetachFromThread(); 37 thread_checker_.DetachFromThread();
39 RegisterProvider(std::move(provider)); 38 RegisterProvider(std::move(provider));
40 SetInstance(this); 39 SetInstance(this);
41 } 40 }
42 41
43 VRDeviceManager::~VRDeviceManager() { 42 VRDeviceManager::~VRDeviceManager() {
44 DCHECK(thread_checker_.CalledOnValidThread()); 43 DCHECK(thread_checker_.CalledOnValidThread());
45 StopSchedulingPollEvents(); 44 StopSchedulingPollEvents();
46 g_vr_device_manager = nullptr; 45 g_vr_device_manager = nullptr;
47 } 46 }
48 47
49 VRDeviceManager* VRDeviceManager::GetInstance() { 48 VRDeviceManager* VRDeviceManager::GetInstance() {
50 if (!g_vr_device_manager) 49 if (!g_vr_device_manager)
51 g_vr_device_manager = new VRDeviceManager(); 50 g_vr_device_manager = new VRDeviceManager();
52 return g_vr_device_manager; 51 return g_vr_device_manager;
53 } 52 }
54 53
55 void VRDeviceManager::SetInstance(VRDeviceManager* instance) { 54 void VRDeviceManager::SetInstance(VRDeviceManager* instance) {
56 // Unit tests can create multiple instances but only one should exist at any 55 // Unit tests can create multiple instances but only one should exist at any
57 // given time so g_vr_device_manager should only go from nullptr to 56 // given time so g_vr_device_manager should only go from nullptr to
58 // non-nullptr and vica versa. 57 // non-nullptr and vice versa.
59 CHECK_NE(!!instance, !!g_vr_device_manager); 58 CHECK_NE(!!instance, !!g_vr_device_manager);
60 g_vr_device_manager = instance; 59 g_vr_device_manager = instance;
61 } 60 }
62 61
63 bool VRDeviceManager::HasInstance() { 62 bool VRDeviceManager::HasInstance() {
64 // For testing. Checks to see if a VRDeviceManager instance is active. 63 // For testing. Checks to see if a VRDeviceManager instance is active.
65 return !!g_vr_device_manager; 64 return !!g_vr_device_manager;
66 } 65 }
67 66
68 void VRDeviceManager::AddService(VRServiceImpl* service) { 67 void VRDeviceManager::AddService(VRServiceImpl* service) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 } 138 }
140 139
141 for (const auto& provider : providers_) { 140 for (const auto& provider : providers_) {
142 provider->Initialize(); 141 provider->Initialize();
143 } 142 }
144 143
145 vr_initialized_ = true; 144 vr_initialized_ = true;
146 } 145 }
147 146
148 void VRDeviceManager::RegisterProvider( 147 void VRDeviceManager::RegisterProvider(
149 std::unique_ptr<VRDeviceProvider> provider) { 148 scoped_refptr<VRDeviceProvider> provider) {
150 providers_.push_back(make_linked_ptr(provider.release())); 149 providers_.push_back(std::move(provider));
151 } 150 }
152 151
153 void VRDeviceManager::SchedulePollEvents() { 152 void VRDeviceManager::SchedulePollEvents() {
154 if (has_scheduled_poll_) 153 if (has_scheduled_poll_)
155 return; 154 return;
156 155
157 has_scheduled_poll_ = true; 156 has_scheduled_poll_ = true;
158 157
159 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(500), this, 158 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(500), this,
160 &VRDeviceManager::PollEvents); 159 &VRDeviceManager::PollEvents);
161 } 160 }
162 161
163 void VRDeviceManager::PollEvents() { 162 void VRDeviceManager::PollEvents() {
164 for (const auto& provider : providers_) 163 for (const auto& provider : providers_)
165 provider->PollEvents(); 164 provider->PollEvents();
166 } 165 }
167 166
168 void VRDeviceManager::StopSchedulingPollEvents() { 167 void VRDeviceManager::StopSchedulingPollEvents() {
169 if (has_scheduled_poll_) 168 if (has_scheduled_poll_)
170 timer_.Stop(); 169 timer_.Stop();
171 } 170 }
172 171
173 } // namespace device 172 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698