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

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

Issue 2584343002: WIP: working copy-no-compositor path
Patch Set: StatTracker destructor, delete old magic numbers, mojo export 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
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..34a56b680ce34badb5e253fd40afb576ec65c3e4 100644
--- a/chrome/browser/android/vr_shell/vr_shell.cc
+++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -24,6 +24,8 @@
#include "content/public/browser/web_contents.h"
#include "content/public/common/referrer.h"
#include "device/vr/android/gvr/gvr_device_provider.h"
+#include "gpu/ipc/common/gpu_surface_tracker.h"
+#include "gpu/ipc/common/surface_handle.h"
#include "jni/VrShellImpl_jni.h"
#include "ui/android/view_android.h"
#include "ui/android/window_android.h"
@@ -31,6 +33,9 @@
#include "ui/display/display.h"
#include "ui/display/screen.h"
+#include <android/native_window.h>
+#include <android/native_window_jni.h>
+
using base::android::JavaParamRef;
using base::android::JavaRef;
@@ -161,6 +166,7 @@ bool RegisterVrShell(JNIEnv* env) {
}
VrShell::~VrShell() {
+ VLOG(1) << __FUNCTION__ << ": Destructor for presenting delegate and its gvr_api";
{
// The GvrLayout is, and must always be, used only on the UI thread, and the
// GvrApi used for rendering should only be used from the GL thread as it's
@@ -238,6 +244,7 @@ void VrShell::OnDomContentsLoaded() {
void VrShell::SetWebVrMode(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
bool enabled) {
+ VLOG(1) << __FUNCTION__ << ": enabled=" << enabled;
metrics_helper_->SetWebVREnabled(enabled);
GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
PostToGlThreadWhenReady(
@@ -249,40 +256,48 @@ void VrShell::SetWebVrMode(JNIEnv* env,
}
}
-void VrShell::SetGvrPoseForWebVr(const gvr::Mat4f& pose, uint32_t pose_num) {
+void VrShell::SetWebVRGvrPose(const gvr::Mat4f& pose, uint32_t pose_num, int64_t pose_time_nanos) {
GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
if (thread->IsRunning()) {
thread->task_runner()->PostTask(
- FROM_HERE, base::Bind(&VrShellGl::SetGvrPoseForWebVr,
- thread->GetVrShellGl(), pose, pose_num));
+ FROM_HERE, base::Bind(&VrShellGl::SetWebVRGvrPose,
+ thread->GetVrShellGl(), pose, pose_num, pose_time_nanos));
}
}
-void VrShell::SetWebVRRenderSurfaceSize(int width, int height) {
- // TODO(klausw,crbug.com/655722): Change the GVR render size and set the WebVR
- // render surface size.
-}
-
-gvr::Sizei VrShell::GetWebVRCompositorSurfaceSize() {
- const gfx::Size& size = content_compositor_->GetWindowBounds();
- return {size.width(), size.height()};
-}
-
void VrShell::SetWebVRSecureOrigin(bool secure_origin) {
// TODO(cjgrant): Align this state with the logic that drives the omnibox.
html_interface_->SetWebVRSecureOrigin(secure_origin);
}
-void VrShell::SubmitWebVRFrame() {}
+void VrShell::SubmitWebVRFrame(int32_t surface_handle, device::mojom::VRPosePtr pose) {
+ GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
+ PostToGlThreadWhenReady(base::Bind(&VrShellGl::SubmitWebVRFrame,
+ thread->GetVrShellGl(),
+ surface_handle,
+ std::move(pose)));
+}
-void VrShell::UpdateWebVRTextureBounds(const gvr::Rectf& left_bounds,
+void VrShell::UpdateWebVRTextureBounds(uint32_t for_pose_index,
+ const gvr::Rectf& left_bounds,
const gvr::Rectf& right_bounds) {
GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
PostToGlThreadWhenReady(base::Bind(&VrShellGl::UpdateWebVRTextureBounds,
- thread->GetVrShellGl(), left_bounds,
+ thread->GetVrShellGl(),
+ for_pose_index,
+ left_bounds,
right_bounds));
}
+void VrShell::GetWebVRSurfaceHandle(int width, int height, const device::mojom::VRDisplay::GetSurfaceHandleCallback& callback) {
+ GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
+ PostToGlThreadWhenReady(base::Bind(&VrShellGl::GetWebVRSurfaceHandle,
+ thread->GetVrShellGl(),
+ width,
+ height,
+ std::move(callback)));
+}
+
// TODO(mthiesse): Do not expose GVR API outside of GL thread.
// It's not thread-safe.
gvr::GvrApi* VrShell::gvr_api() {
@@ -303,6 +318,10 @@ void VrShell::GvrDelegateReady() {
delegate_->SetDelegate(this);
}
+void VrShell::OnWebVRFrameSubmitted(int32_t surface_handle, uint32_t frame_index, double elapsed) {
+ delegate_->device_provider()->OnFrameSubmitted(surface_handle, frame_index, elapsed);
+}
+
void VrShell::AppButtonPressed() {
#if defined(ENABLE_VR_SHELL)
html_interface_->SetMenuMode(!html_interface_->GetMenuMode());

Powered by Google App Engine
This is Rietveld 408576698