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

Side by Side Diff: device/vr/android/gvr/gvr_device_provider.cc

Issue 2570553004: Clean up some VrShell threading issues and remove unnecessary WeakPtr types. (Closed)
Patch Set: rebase Created 4 years 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/android/gvr/gvr_device_provider.h" 5 #include "device/vr/android/gvr/gvr_device_provider.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 8
9 #include "base/android/context_utils.h" 9 #include "base/android/context_utils.h"
10 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
11 #include "base/android/jni_utils.h" 11 #include "base/android/jni_utils.h"
12 #include "base/android/scoped_java_ref.h" 12 #include "base/android/scoped_java_ref.h"
13 #include "device/vr/android/gvr/gvr_delegate.h" 13 #include "device/vr/android/gvr/gvr_delegate.h"
14 #include "device/vr/android/gvr/gvr_device.h" 14 #include "device/vr/android/gvr/gvr_device.h"
15 #include "device/vr/android/gvr/gvr_gamepad_data_fetcher.h" 15 #include "device/vr/android/gvr/gvr_gamepad_data_fetcher.h"
16 #include "device/vr/vr_device.h" 16 #include "device/vr/vr_device.h"
17 #include "device/vr/vr_device_manager.h" 17 #include "device/vr/vr_device_manager.h"
18 #include "device/vr/vr_service.mojom.h" 18 #include "device/vr/vr_service.mojom.h"
19 #include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr.h" 19 #include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr.h"
20 #include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr_co ntroller.h" 20 #include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr_co ntroller.h"
21 #include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr_ty pes.h" 21 #include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr_ty pes.h"
22 22
23 using base::android::AttachCurrentThread; 23 using base::android::AttachCurrentThread;
24 using base::android::GetApplicationContext; 24 using base::android::GetApplicationContext;
25 25
26 namespace device { 26 namespace device {
27 27
28 GvrDeviceProvider::GvrDeviceProvider() : weak_ptr_factory_(this) {} 28 GvrDeviceProvider::GvrDeviceProvider() {}
29 29
30 GvrDeviceProvider::~GvrDeviceProvider() { 30 GvrDeviceProvider::~GvrDeviceProvider() {
31 GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory( 31 GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory(
32 GAMEPAD_SOURCE_GVR); 32 GAMEPAD_SOURCE_GVR);
33 33
34 device::GvrDelegateProvider* delegate_provider = 34 device::GvrDelegateProvider* delegate_provider =
35 device::GvrDelegateProvider::GetInstance(); 35 device::GvrDelegateProvider::GetInstance();
36 if (delegate_provider) { 36 if (delegate_provider) {
37 delegate_provider->ExitWebVRPresent(); 37 delegate_provider->ExitWebVRPresent();
38 delegate_provider->DestroyNonPresentingDelegate(); 38 delegate_provider->DestroyNonPresentingDelegate();
39 delegate_provider->SetDeviceProvider(nullptr);
39 } 40 }
40 } 41 }
41 42
42 void GvrDeviceProvider::GetDevices(std::vector<VRDevice*>* devices) { 43 void GvrDeviceProvider::GetDevices(std::vector<VRDevice*>* devices) {
43 Initialize(); 44 Initialize();
44 45
45 if (vr_device_) 46 if (vr_device_)
46 devices->push_back(vr_device_.get()); 47 devices->push_back(vr_device_.get());
47 } 48 }
48 49
49 void GvrDeviceProvider::Initialize() { 50 void GvrDeviceProvider::Initialize() {
50 device::GvrDelegateProvider* delegate_provider = 51 device::GvrDelegateProvider* delegate_provider =
51 device::GvrDelegateProvider::GetInstance(); 52 device::GvrDelegateProvider::GetInstance();
52 if (!delegate_provider) 53 if (!delegate_provider)
53 return; 54 return;
54 delegate_provider->SetDeviceProvider(weak_ptr_factory_.GetWeakPtr()); 55 delegate_provider->SetDeviceProvider(this);
55 if (!vr_device_) { 56 if (!vr_device_) {
56 vr_device_.reset( 57 vr_device_.reset(
57 new GvrDevice(this, delegate_provider->GetNonPresentingDelegate())); 58 new GvrDevice(this, delegate_provider->GetNonPresentingDelegate()));
58 } 59 }
59 } 60 }
60 61
61 void GvrDeviceProvider::RequestPresent( 62 void GvrDeviceProvider::RequestPresent(
62 const base::Callback<void(bool)>& callback) { 63 const base::Callback<void(bool)>& callback) {
63 device::GvrDelegateProvider* delegate_provider = 64 device::GvrDelegateProvider* delegate_provider =
64 device::GvrDelegateProvider::GetInstance(); 65 device::GvrDelegateProvider::GetInstance();
65 if (!delegate_provider) 66 if (!delegate_provider)
66 return callback.Run(false); 67 return callback.Run(false);
67 68
68 // RequestWebVRPresent is async as a render thread may be created. 69 // RequestWebVRPresent is async as a render thread may be created.
69 delegate_provider->RequestWebVRPresent(callback); 70 delegate_provider->RequestWebVRPresent(callback);
70 } 71 }
71 72
72 // VR presentation exit requested by the API. 73 // VR presentation exit requested by the API.
73 void GvrDeviceProvider::ExitPresent() { 74 void GvrDeviceProvider::ExitPresent() {
74 SwitchToNonPresentingDelegate(); 75 SwitchToNonPresentingDelegate();
75 // If we're presenting currently stop. 76 // If we're presenting currently stop.
76 GvrDelegateProvider* delegate_provider = GvrDelegateProvider::GetInstance(); 77 GvrDelegateProvider* delegate_provider = GvrDelegateProvider::GetInstance();
77 if (delegate_provider) 78 if (delegate_provider)
78 delegate_provider->ExitWebVRPresent(); 79 delegate_provider->ExitWebVRPresent();
79 } 80 }
80 81
81 void GvrDeviceProvider::OnGvrDelegateReady( 82 void GvrDeviceProvider::OnGvrDelegateReady(GvrDelegate* delegate) {
82 const base::WeakPtr<GvrDelegate>& delegate) {
83 if (!vr_device_) 83 if (!vr_device_)
84 return; 84 return;
85 VLOG(1) << "Switching to presenting delegate"; 85 VLOG(1) << "Switching to presenting delegate";
86 vr_device_->SetDelegate(delegate); 86 vr_device_->SetDelegate(delegate);
87 GamepadDataFetcherManager::GetInstance()->AddFactory( 87 GamepadDataFetcherManager::GetInstance()->AddFactory(
88 new GvrGamepadDataFetcher::Factory(delegate, vr_device_->id())); 88 new GvrGamepadDataFetcher::Factory(delegate, vr_device_->id()));
89 } 89 }
90 90
91 // VR presentation exit requested by the delegate (probably via UI). 91 // VR presentation exit requested by the delegate (probably via UI).
92 void GvrDeviceProvider::OnGvrDelegateRemoved() { 92 void GvrDeviceProvider::OnGvrDelegateRemoved() {
93 if (!vr_device_) 93 if (!vr_device_)
94 return; 94 return;
95 95
96 SwitchToNonPresentingDelegate(); 96 SwitchToNonPresentingDelegate();
97 vr_device_->OnExitPresent(); 97 vr_device_->OnExitPresent();
98 } 98 }
99 99
100 void GvrDeviceProvider::OnNonPresentingDelegateRemoved() {
101 if (!vr_device_)
102 return;
103 vr_device_->SetDelegate(nullptr);
104 }
105
100 void GvrDeviceProvider::OnDisplayBlur() { 106 void GvrDeviceProvider::OnDisplayBlur() {
101 if (!vr_device_) 107 if (!vr_device_)
102 return; 108 return;
103 vr_device_->OnBlur(); 109 vr_device_->OnBlur();
104 } 110 }
105 111
106 void GvrDeviceProvider::OnDisplayFocus() { 112 void GvrDeviceProvider::OnDisplayFocus() {
107 if (!vr_device_) 113 if (!vr_device_)
108 return; 114 return;
109 vr_device_->OnFocus(); 115 vr_device_->OnFocus();
(...skipping 21 matching lines...) Expand all
131 void GvrDeviceProvider::SetListeningForActivate(bool listening) { 137 void GvrDeviceProvider::SetListeningForActivate(bool listening) {
132 device::GvrDelegateProvider* delegate_provider = 138 device::GvrDelegateProvider* delegate_provider =
133 device::GvrDelegateProvider::GetInstance(); 139 device::GvrDelegateProvider::GetInstance();
134 if (!delegate_provider) 140 if (!delegate_provider)
135 return; 141 return;
136 142
137 delegate_provider->SetListeningForActivate(listening); 143 delegate_provider->SetListeningForActivate(listening);
138 } 144 }
139 145
140 } // namespace device 146 } // namespace device
OLDNEW
« no previous file with comments | « device/vr/android/gvr/gvr_device_provider.h ('k') | device/vr/android/gvr/gvr_gamepad_data_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698