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

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

Issue 2471433002: Implement WebVR presentation pausing for VR Shell Menu Mode (Closed)
Patch Set: Address Comments 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 RegisterProvider(base::WrapUnique(new GvrDeviceProvider()));
dcheng 2016/11/12 02:03:31 Nit: base::MakeUnique<GvrDeviceProvider>()
mthiesse 2016/11/14 16:41:39 Done.
31 #endif 31 #endif
32 } 32 }
33 33
34 VRDeviceManager::VRDeviceManager(std::unique_ptr<VRDeviceProvider> provider) 34 VRDeviceManager::VRDeviceManager(std::unique_ptr<VRDeviceProvider> provider)
35 : vr_initialized_(false), 35 : vr_initialized_(false), keep_alive_(true), has_scheduled_poll_(false) {
36 keep_alive_(true),
37 has_scheduled_poll_(false) {
38 thread_checker_.DetachFromThread(); 36 thread_checker_.DetachFromThread();
39 RegisterProvider(std::move(provider)); 37 RegisterProvider(std::move(provider));
40 SetInstance(this); 38 SetInstance(this);
41 } 39 }
42 40
43 VRDeviceManager::~VRDeviceManager() { 41 VRDeviceManager::~VRDeviceManager() {
44 DCHECK(thread_checker_.CalledOnValidThread()); 42 DCHECK(thread_checker_.CalledOnValidThread());
45 StopSchedulingPollEvents(); 43 StopSchedulingPollEvents();
46 g_vr_device_manager = nullptr; 44 g_vr_device_manager = nullptr;
47 } 45 }
48 46
49 VRDeviceManager* VRDeviceManager::GetInstance() { 47 VRDeviceManager* VRDeviceManager::GetInstance() {
50 if (!g_vr_device_manager) 48 if (!g_vr_device_manager)
51 g_vr_device_manager = new VRDeviceManager(); 49 g_vr_device_manager = new VRDeviceManager();
52 return g_vr_device_manager; 50 return g_vr_device_manager;
53 } 51 }
54 52
55 void VRDeviceManager::SetInstance(VRDeviceManager* instance) { 53 void VRDeviceManager::SetInstance(VRDeviceManager* instance) {
56 // Unit tests can create multiple instances but only one should exist at any 54 // 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 55 // given time so g_vr_device_manager should only go from nullptr to
58 // non-nullptr and vica versa. 56 // non-nullptr and vice versa.
59 CHECK_NE(!!instance, !!g_vr_device_manager); 57 CHECK_NE(!!instance, !!g_vr_device_manager);
60 g_vr_device_manager = instance; 58 g_vr_device_manager = instance;
61 } 59 }
62 60
63 bool VRDeviceManager::HasInstance() { 61 bool VRDeviceManager::HasInstance() {
64 // For testing. Checks to see if a VRDeviceManager instance is active. 62 // For testing. Checks to see if a VRDeviceManager instance is active.
65 return !!g_vr_device_manager; 63 return !!g_vr_device_manager;
66 } 64 }
67 65
68 void VRDeviceManager::AddService(VRServiceImpl* service) { 66 void VRDeviceManager::AddService(VRServiceImpl* service) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 138
141 for (const auto& provider : providers_) { 139 for (const auto& provider : providers_) {
142 provider->Initialize(); 140 provider->Initialize();
143 } 141 }
144 142
145 vr_initialized_ = true; 143 vr_initialized_ = true;
146 } 144 }
147 145
148 void VRDeviceManager::RegisterProvider( 146 void VRDeviceManager::RegisterProvider(
149 std::unique_ptr<VRDeviceProvider> provider) { 147 std::unique_ptr<VRDeviceProvider> provider) {
150 providers_.push_back(make_linked_ptr(provider.release())); 148 providers_.push_back(std::move(provider));
151 } 149 }
152 150
153 void VRDeviceManager::SchedulePollEvents() { 151 void VRDeviceManager::SchedulePollEvents() {
154 if (has_scheduled_poll_) 152 if (has_scheduled_poll_)
155 return; 153 return;
156 154
157 has_scheduled_poll_ = true; 155 has_scheduled_poll_ = true;
158 156
159 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(500), this, 157 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(500), this,
160 &VRDeviceManager::PollEvents); 158 &VRDeviceManager::PollEvents);
161 } 159 }
162 160
163 void VRDeviceManager::PollEvents() { 161 void VRDeviceManager::PollEvents() {
164 for (const auto& provider : providers_) 162 for (const auto& provider : providers_)
165 provider->PollEvents(); 163 provider->PollEvents();
166 } 164 }
167 165
168 void VRDeviceManager::StopSchedulingPollEvents() { 166 void VRDeviceManager::StopSchedulingPollEvents() {
169 if (has_scheduled_poll_) 167 if (has_scheduled_poll_)
170 timer_.Stop(); 168 timer_.Stop();
171 } 169 }
172 170
173 } // namespace device 171 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698