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

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

Issue 2513143002: Fixed crash when exiting page using GVR controller w/ the gamepad API (Closed)
Patch Set: 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
« no previous file with comments | « device/vr/android/gvr/gvr_gamepad_data_fetcher.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_gamepad_data_fetcher.h" 5 #include "device/vr/android/gvr/gvr_gamepad_data_fetcher.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 8
9 #include "device/vr/android/gvr/gvr_delegate.h" 9 #include "device/vr/android/gvr/gvr_delegate.h"
10 #include "third_party/WebKit/public/platform/WebGamepads.h" 10 #include "third_party/WebKit/public/platform/WebGamepads.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 unsigned int display_id) 50 unsigned int display_id)
51 : display_id_(display_id) { 51 : display_id_(display_id) {
52 gvr::GvrApi* gvr_api = delegate->gvr_api(); 52 gvr::GvrApi* gvr_api = delegate->gvr_api();
53 controller_api_.reset(new gvr::ControllerApi()); 53 controller_api_.reset(new gvr::ControllerApi());
54 int32_t options = gvr::ControllerApi::DefaultOptions(); 54 int32_t options = gvr::ControllerApi::DefaultOptions();
55 options |= GVR_CONTROLLER_ENABLE_GYRO; 55 options |= GVR_CONTROLLER_ENABLE_GYRO;
56 bool success = controller_api_->Init(options, gvr_api->GetContext()); 56 bool success = controller_api_->Init(options, gvr_api->GetContext());
57 if (!success) 57 if (!success)
58 controller_api_.reset(nullptr); 58 controller_api_.reset(nullptr);
59 59
60 user_prefs_.reset(new gvr::UserPrefs(gvr_api->GetUserPrefs().cobj())); 60 // TODO(bajones): Monitor changes to the controller handedness.
billorr 2016/11/18 22:27:52 I assume the bug is that the user_prefs_ object go
61 handedness_ = gvr_api->GetUserPrefs().GetControllerHandedness();
61 } 62 }
62 63
63 GvrGamepadDataFetcher::~GvrGamepadDataFetcher() {} 64 GvrGamepadDataFetcher::~GvrGamepadDataFetcher() {}
64 65
65 GamepadSource GvrGamepadDataFetcher::source() { 66 GamepadSource GvrGamepadDataFetcher::source() {
66 return GAMEPAD_SOURCE_GVR; 67 return GAMEPAD_SOURCE_GVR;
67 } 68 }
68 69
69 void GvrGamepadDataFetcher::OnAddedToProvider() { 70 void GvrGamepadDataFetcher::OnAddedToProvider() {
70 PauseHint(false); 71 PauseHint(false);
(...skipping 13 matching lines...) Expand all
84 // initialization 85 // initialization
85 pad.connected = true; 86 pad.connected = true;
86 CopyToWebUString(pad.id, WebGamepad::idLengthCap, 87 CopyToWebUString(pad.id, WebGamepad::idLengthCap,
87 base::UTF8ToUTF16("Daydream Controller")); 88 base::UTF8ToUTF16("Daydream Controller"));
88 CopyToWebUString(pad.mapping, WebGamepad::mappingLengthCap, 89 CopyToWebUString(pad.mapping, WebGamepad::mappingLengthCap,
89 base::UTF8ToUTF16("")); 90 base::UTF8ToUTF16(""));
90 pad.buttonsLength = 1; 91 pad.buttonsLength = 1;
91 pad.axesLength = 2; 92 pad.axesLength = 2;
92 93
93 pad.displayId = display_id_; 94 pad.displayId = display_id_;
95
96 pad.hand = (handedness_ == GVR_CONTROLLER_RIGHT_HANDED) ? GamepadHandRight
97 : GamepadHandLeft;
94 } 98 }
95 99
96 controller_state_.Update(*controller_api_); 100 controller_state_.Update(*controller_api_);
97 101
98 pad.timestamp = controller_state_.GetLastOrientationTimestamp(); 102 pad.timestamp = controller_state_.GetLastOrientationTimestamp();
99 103
100 // TODO: Query from API if avaialable.
101 gvr::ControllerHandedness handedness = user_prefs_->GetControllerHandedness();
102 pad.hand = (handedness == GVR_CONTROLLER_RIGHT_HANDED) ? GamepadHandRight
103 : GamepadHandLeft;
104
105 if (controller_state_.IsTouching()) { 104 if (controller_state_.IsTouching()) {
106 gvr_vec2f touch_position = controller_state_.GetTouchPos(); 105 gvr_vec2f touch_position = controller_state_.GetTouchPos();
107 pad.axes[0] = (touch_position.x * 2.0f) - 1.0f; 106 pad.axes[0] = (touch_position.x * 2.0f) - 1.0f;
108 pad.axes[1] = (touch_position.y * 2.0f) - 1.0f; 107 pad.axes[1] = (touch_position.y * 2.0f) - 1.0f;
109 } else { 108 } else {
110 pad.axes[0] = 0.0f; 109 pad.axes[0] = 0.0f;
111 pad.axes[1] = 0.0f; 110 pad.axes[1] = 0.0f;
112 } 111 }
113 112
114 pad.buttons[0].touched = controller_state_.IsTouching(); 113 pad.buttons[0].touched = controller_state_.IsTouching();
(...skipping 30 matching lines...) Expand all
145 return; 144 return;
146 145
147 if (paused) { 146 if (paused) {
148 controller_api_->Pause(); 147 controller_api_->Pause();
149 } else { 148 } else {
150 controller_api_->Resume(); 149 controller_api_->Resume();
151 } 150 }
152 } 151 }
153 152
154 } // namespace device 153 } // namespace device
OLDNEW
« no previous file with comments | « device/vr/android/gvr/gvr_gamepad_data_fetcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698