Index: device/vr/android/gvr/gvr_gamepad_data_fetcher.cc |
diff --git a/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc b/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc |
index be21ce900575e3e7f88d7c364793f8dbbb39f849..d4eed157cf578c172241f94b244715a1efb3eca0 100644 |
--- a/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc |
+++ b/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc |
@@ -9,6 +9,7 @@ |
#include "device/vr/android/gvr/gvr_delegate.h" |
#include "third_party/WebKit/public/platform/WebGamepads.h" |
+#include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr.h" |
namespace device { |
@@ -29,36 +30,38 @@ void CopyToWebUString(blink::WebUChar* dest, |
using namespace blink; |
-GvrGamepadDataFetcher::Factory::Factory(GvrDelegate* delegate, |
+GvrGamepadDataFetcher::Factory::Factory(gvr_context* context, |
unsigned int display_id) |
- : delegate_(delegate), display_id_(display_id) {} |
+ : context_(context), display_id_(display_id) {} |
GvrGamepadDataFetcher::Factory::~Factory() {} |
std::unique_ptr<GamepadDataFetcher> |
GvrGamepadDataFetcher::Factory::CreateDataFetcher() { |
- if (!delegate_) |
- return nullptr; |
- return base::MakeUnique<GvrGamepadDataFetcher>(delegate_, display_id_); |
+ return base::MakeUnique<GvrGamepadDataFetcher>(context_, display_id_); |
} |
GamepadSource GvrGamepadDataFetcher::Factory::source() { |
return GAMEPAD_SOURCE_GVR; |
} |
-GvrGamepadDataFetcher::GvrGamepadDataFetcher(GvrDelegate* delegate, |
+GvrGamepadDataFetcher::GvrGamepadDataFetcher(gvr_context* context, |
unsigned int display_id) |
: display_id_(display_id) { |
- gvr::GvrApi* gvr_api = delegate->gvr_api(); |
controller_api_.reset(new gvr::ControllerApi()); |
int32_t options = gvr::ControllerApi::DefaultOptions(); |
options |= GVR_CONTROLLER_ENABLE_GYRO; |
- bool success = controller_api_->Init(options, gvr_api->GetContext()); |
- if (!success) |
- controller_api_.reset(nullptr); |
+ // TODO(mthiesse): Use of the gvr_context on multiple threads isn't guaranteed |
+ // to be threadsafe. All gvr context usage should be moved to VR Shell's GL |
+ // thread. crbug.com/674594 |
+ std::unique_ptr<gvr::GvrApi> gvr = gvr::GvrApi::WrapNonOwned(context); |
// TODO(bajones): Monitor changes to the controller handedness. |
- handedness_ = gvr_api->GetUserPrefs().GetControllerHandedness(); |
+ handedness_ = gvr->GetUserPrefs().GetControllerHandedness(); |
+ |
+ bool success = controller_api_->Init(options, context); |
+ if (!success) |
+ controller_api_.reset(nullptr); |
} |
GvrGamepadDataFetcher::~GvrGamepadDataFetcher() {} |