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

Unified Diff: chrome/browser/android/vr_shell/vr_shell.cc

Issue 2616583002: Fix WebVR support for devices without Async Reprojection. (Closed)
Patch Set: Fix compile? Created 3 years, 11 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
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell.h ('k') | chrome/browser/android/vr_shell/vr_shell_gl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/android/vr_shell/vr_shell.cc
diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc
index f931b2d7a787195537d5f243747cf12b08942cb0..ee4aa9843e6188d468b450677340af9e5b586d8b 100644
--- a/chrome/browser/android/vr_shell/vr_shell.cc
+++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/android/vr_shell/vr_shell.h"
+#include <android/native_window_jni.h>
+
#include "base/metrics/histogram_macros.h"
#include "base/threading/platform_thread.h"
#include "base/threading/thread.h"
@@ -48,14 +50,16 @@ class GLThread : public base::Thread {
const base::WeakPtr<VrInputManager>& ui_input_manager,
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner,
gvr_context* gvr_api,
- bool initially_web_vr)
+ bool initially_web_vr,
+ bool reprojected_rendering)
: base::Thread("VrShellGL"),
weak_vr_shell_(weak_vr_shell),
content_input_manager_(content_input_manager),
ui_input_manager_(ui_input_manager),
main_thread_task_runner_(std::move(main_thread_task_runner)),
gvr_api_(gvr_api),
- initially_web_vr_(initially_web_vr) {}
+ initially_web_vr_(initially_web_vr),
+ reprojected_rendering_(reprojected_rendering) {}
~GLThread() override {
Stop();
@@ -70,11 +74,10 @@ class GLThread : public base::Thread {
std::move(ui_input_manager_),
std::move(main_thread_task_runner_),
gvr_api_,
- initially_web_vr_));
+ initially_web_vr_,
+ reprojected_rendering_));
weak_vr_shell_gl_ = vr_shell_gl_->GetWeakPtr();
- if (!vr_shell_gl_->Initialize()) {
- vr_shell_gl_.reset();
- }
+ vr_shell_gl_->Initialize();
}
void CleanUp() override {
vr_shell_gl_.reset();
@@ -91,6 +94,7 @@ class GLThread : public base::Thread {
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
gvr_context* gvr_api_;
bool initially_web_vr_;
+ bool reprojected_rendering_;
};
} // namespace
@@ -103,7 +107,8 @@ VrShell::VrShell(JNIEnv* env,
ui::WindowAndroid* ui_window,
bool for_web_vr,
VrShellDelegate* delegate,
- gvr_context* gvr_api)
+ gvr_context* gvr_api,
+ bool reprojected_rendering)
: WebContentsObserver(ui_contents),
main_contents_(main_contents),
content_compositor_(new VrCompositor(content_window, false)),
@@ -112,6 +117,7 @@ VrShell::VrShell(JNIEnv* env,
delegate_(delegate),
metrics_helper_(new VrMetricsHelper(main_contents_)),
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ reprojected_rendering_(reprojected_rendering),
weak_ptr_factory_(this) {
DCHECK(g_instance == nullptr);
g_instance = this;
@@ -128,7 +134,8 @@ VrShell::VrShell(JNIEnv* env,
ui_input_manager_->GetWeakPtr(),
main_thread_task_runner_,
gvr_api,
- for_web_vr));
+ for_web_vr,
+ reprojected_rendering_));
base::Thread::Options options(base::MessageLoop::TYPE_DEFAULT, 0);
options.priority = base::ThreadPriority::DISPLAY;
@@ -215,6 +222,18 @@ void VrShell::OnResume(JNIEnv* env, const JavaParamRef<jobject>& obj) {
SetShowingOverscrollGlow(false);
}
+void VrShell::SetSurface(JNIEnv* env,
+ const JavaParamRef<jobject>& obj,
+ const JavaParamRef<jobject>& surface) {
+ CHECK(!reprojected_rendering_);
+ GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
+ gfx::AcceleratedWidget window =
+ ANativeWindow_fromSurface(base::android::AttachCurrentThread(), surface);
+ PostToGlThreadWhenReady(base::Bind(&VrShellGl::InitializeGl,
+ thread->GetVrShellGl(),
+ base::Unretained(window)));
+}
+
void VrShell::SetShowingOverscrollGlow(bool showing_glow) {
main_contents_->GetRenderWidgetHostView()->SetShowingOverscrollGlow(
showing_glow);
@@ -453,14 +472,14 @@ jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& ui_web_contents,
jlong ui_window_android, jboolean for_web_vr,
const base::android::JavaParamRef<jobject>& delegate,
- jlong gvr_api) {
+ jlong gvr_api, jboolean reprojected_rendering) {
return reinterpret_cast<intptr_t>(new VrShell(
env, obj, content::WebContents::FromJavaWebContents(content_web_contents),
reinterpret_cast<ui::WindowAndroid*>(content_window_android),
content::WebContents::FromJavaWebContents(ui_web_contents),
reinterpret_cast<ui::WindowAndroid*>(ui_window_android),
for_web_vr, VrShellDelegate::GetNativeDelegate(env, delegate),
- reinterpret_cast<gvr_context*>(gvr_api)));
+ reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering));
}
} // namespace vr_shell
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell.h ('k') | chrome/browser/android/vr_shell/vr_shell_gl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698