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

Unified Diff: device/vr/android/gvr/gvr_device_provider.cc

Issue 2398103002: Enable magic window mode with new Gvr (Closed)
Patch Set: reviews Created 4 years, 2 months 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 side-by-side diff with in-line comments
Download patch
Index: device/vr/android/gvr/gvr_device_provider.cc
diff --git a/device/vr/android/gvr/gvr_device_provider.cc b/device/vr/android/gvr/gvr_device_provider.cc
index 1025ca40726bfe2136cc3ee93f18d62cc8b0d8fc..252aa117667e09cce9ca7041c791706dc8c2a220 100644
--- a/device/vr/android/gvr/gvr_device_provider.cc
+++ b/device/vr/android/gvr/gvr_device_provider.cc
@@ -14,7 +14,6 @@
#include "device/vr/android/gvr/gvr_device.h"
#include "device/vr/android/gvr/gvr_gamepad_data_fetcher.h"
#include "device/vr/vr_device_manager.h"
-#include "jni/GvrDeviceProvider_jni.h"
#include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr.h"
#include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr_controller.h"
#include "third_party/gvr-android-sdk/src/ndk/include/vr/gvr/capi/include/gvr_types.h"
@@ -24,62 +23,16 @@ using base::android::GetApplicationContext;
namespace device {
-// A temporary delegate till a VrShell instance becomes available.
-class GvrNonPresentingDelegate : public GvrDelegate {
- public:
- GvrNonPresentingDelegate() { Initialize(); }
-
- virtual ~GvrNonPresentingDelegate() { Shutdown(); }
-
- void Initialize() {
- if (j_device_.is_null()) {
- JNIEnv* env = AttachCurrentThread();
-
- j_device_.Reset(
- Java_GvrDeviceProvider_create(env, GetApplicationContext()));
- jlong context =
- Java_GvrDeviceProvider_getNativeContext(env, j_device_.obj());
-
- if (!context)
- return;
-
- gvr_api_ =
- gvr::GvrApi::WrapNonOwned(reinterpret_cast<gvr_context*>(context));
- }
- }
-
- void Shutdown() {
- if (!j_device_.is_null()) {
- gvr_api_ = nullptr;
- JNIEnv* env = AttachCurrentThread();
- Java_GvrDeviceProvider_shutdown(env, j_device_.obj());
- j_device_ = nullptr;
- }
- }
-
- // GvrDelegate implementation
- void SetWebVRSecureOrigin(bool secure_origin) override {}
- void SubmitWebVRFrame() override {}
- void UpdateWebVRTextureBounds(int eye,
- float left,
- float top,
- float width,
- float height) override {}
- void SetGvrPoseForWebVr(const gvr::Mat4f& pose,
- uint32_t pose_index) override {}
-
- gvr::GvrApi* gvr_api() override { return gvr_api_.get(); }
-
- private:
- base::android::ScopedJavaGlobalRef<jobject> j_device_;
- std::unique_ptr<gvr::GvrApi> gvr_api_;
-};
-
GvrDeviceProvider::GvrDeviceProvider()
: VRDeviceProvider(),
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
GvrDeviceProvider::~GvrDeviceProvider() {
+ device::GvrDelegateProvider* delegate_provider =
+ device::GvrDelegateProvider::GetInstance();
+ if (delegate_provider)
+ delegate_provider->DestroyNonPresentingDelegate();
+
ExitPresent();
}
@@ -96,17 +49,25 @@ void GvrDeviceProvider::SetClient(VRClientDispatcher* client) {
}
void GvrDeviceProvider::Initialize() {
+ device::GvrDelegateProvider* delegate_provider =
+ device::GvrDelegateProvider::GetInstance();
+ if (!delegate_provider)
+ return;
+
if (!vr_device_) {
- vr_device_.reset(new GvrDevice(this, nullptr));
+ vr_device_.reset(
+ new GvrDevice(this, delegate_provider->GetNonPresentingDelegate()));
client_->OnDeviceConnectionStatusChanged(vr_device_.get(), true);
}
}
bool GvrDeviceProvider::RequestPresent() {
- GvrDelegateProvider* delegate_provider = GvrDelegateProvider::GetInstance();
+ device::GvrDelegateProvider* delegate_provider =
+ device::GvrDelegateProvider::GetInstance();
if (!delegate_provider)
return false;
+ // RequestWebVRPresent is async as a render thread may be created.
return delegate_provider->RequestWebVRPresent(this);
}
@@ -116,14 +77,17 @@ void GvrDeviceProvider::ExitPresent() {
if (!vr_device_)
return;
- vr_device_->SetDelegate(nullptr);
+ device::GvrDelegateProvider* delegate_provider =
+ device::GvrDelegateProvider::GetInstance();
+ if (!delegate_provider)
+ return;
+
+ vr_device_->SetDelegate(delegate_provider->GetNonPresentingDelegate());
GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory(
GAMEPAD_SOURCE_GVR);
- GvrDelegateProvider* delegate_provider = GvrDelegateProvider::GetInstance();
- if (delegate_provider)
- delegate_provider->ExitWebVRPresent();
+ delegate_provider->ExitWebVRPresent();
if (client_)
client_->OnPresentEnded(vr_device_.get());
@@ -137,12 +101,10 @@ void GvrDeviceProvider::OnGvrDelegateReady(GvrDelegate* delegate) {
}
void GvrDeviceProvider::OnGvrDelegateRemoved() {
+ DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
if (!vr_device_)
return;
-
- main_thread_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&GvrDeviceProvider::ExitPresent, base::Unretained(this)));
+ ExitPresent();
}
void GvrDeviceProvider::GvrDelegateReady(GvrDelegate* delegate) {
« no previous file with comments | « device/vr/android/gvr/gvr_device_provider.h ('k') | device/vr/android/java/src/org/chromium/device/vr/GvrDeviceProvider.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698