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

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

Issue 2624633002: Remove Sync GetPose VRService call, implement VRVSyncProvider (Closed)
Patch Set: Address comments 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 b1fe6a972ce10b6ccc885b556a1f2c98ab746918..2fddbd365bd72eb97117bbe3c12a7c20cb2c37be 100644
--- a/chrome/browser/android/vr_shell/vr_shell.cc
+++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -32,6 +32,8 @@
#include "ui/base/page_transition_types.h"
#include "ui/display/display.h"
#include "ui/display/screen.h"
+#include "ui/gfx/transform.h"
+#include "ui/gfx/transform_util.h"
using base::android::JavaParamRef;
using base::android::JavaRef;
@@ -275,15 +277,6 @@ void VrShell::OnLoadProgressChanged(
html_interface_->SetLoadProgress(progress);
}
-void VrShell::SetGvrPoseForWebVr(const gvr::Mat4f& pose, uint32_t pose_num) {
- 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));
- }
-}
-
void VrShell::SetWebVRRenderSurfaceSize(int width, int height) {
// TODO(klausw,crbug.com/655722): Change the GVR render size and set the WebVR
// render surface size.
@@ -459,6 +452,21 @@ void VrShell::ForceExitVr() {
delegate_->ForceExitVr();
}
+void VrShell::OnVRVsyncProviderRequest(
+ device::mojom::VRVSyncProviderRequest request) {
+ GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
dcheng 2017/01/14 11:22:53 Can gl_thread_ just be std::unique_ptr<GLThread>?
mthiesse 2017/01/16 20:52:57 Done, but this required moving GLThread to its own
+ PostToGlThreadWhenReady(base::Bind(
+ &VrShellGl::OnRequest, thread->GetVrShellGl(), base::Passed(&request)));
+}
+
+void VrShell::UpdateVSyncInterval(long timebase_nanos,
+ double interval_seconds) {
+ GLThread* thread = static_cast<GLThread*>(gl_thread_.get());
+ PostToGlThreadWhenReady(
+ base::Bind(&VrShellGl::UpdateVSyncInterval,
+ thread->GetVrShellGl(), timebase_nanos, interval_seconds));
+}
+
void VrShell::SetContentCssSize(float width, float height, float dpr) {
JNIEnv* env = base::android::AttachCurrentThread();
Java_VrShellImpl_setContentCssSize(env, j_vr_shell_.obj(), width, height,
@@ -470,6 +478,41 @@ void VrShell::SetUiCssSize(float width, float height, float dpr) {
Java_VrShellImpl_setUiCssSize(env, j_vr_shell_.obj(), width, height, dpr);
}
+device::mojom::VRPosePtr VrShell::VRPosePtrFromGvrPose(gvr::Mat4f head_mat,
+ uint32_t pose_index) {
+ device::mojom::VRPosePtr pose = device::mojom::VRPose::New();
+
+ pose->timestamp = base::Time::Now().ToJsTime();
+
+ // Increment pose frame counter always, even if it's a faked pose.
klausw 2017/01/13 21:04:36 Comment doesn't match code, I don't see any increm
mthiesse 2017/01/16 20:52:57 Done.
+ pose->poseIndex = pose_index;
+ pose->orientation.emplace(4);
+
+ gfx::Transform inv_transform(
+ head_mat.m[0][0], head_mat.m[0][1], head_mat.m[0][2], head_mat.m[0][3],
+ head_mat.m[1][0], head_mat.m[1][1], head_mat.m[1][2], head_mat.m[1][3],
+ head_mat.m[2][0], head_mat.m[2][1], head_mat.m[2][2], head_mat.m[2][3],
+ head_mat.m[3][0], head_mat.m[3][1], head_mat.m[3][2], head_mat.m[3][3]);
+
+ gfx::Transform transform;
+ if (inv_transform.GetInverse(&transform)) {
+ gfx::DecomposedTransform decomposed_transform;
+ gfx::DecomposeTransform(&decomposed_transform, transform);
+
+ pose->orientation.value()[0] = decomposed_transform.quaternion[0];
+ pose->orientation.value()[1] = decomposed_transform.quaternion[1];
+ pose->orientation.value()[2] = decomposed_transform.quaternion[2];
+ pose->orientation.value()[3] = decomposed_transform.quaternion[3];
+
+ pose->position.emplace(3);
+ pose->position.value()[0] = decomposed_transform.translate[0];
+ pose->position.value()[1] = decomposed_transform.translate[1];
+ pose->position.value()[2] = decomposed_transform.translate[2];
+ }
+
+ return pose;
+}
+
// ----------------------------------------------------------------------------
// Native JNI methods
// ----------------------------------------------------------------------------

Powered by Google App Engine
This is Rietveld 408576698