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

Side by Side Diff: chrome/browser/android/vr_shell/vr_shell_gl.cc

Issue 2574313002: Clean up threading around VR Scene updates. (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/vr_shell/vr_shell_gl.h" 5 #include "chrome/browser/android/vr_shell/vr_shell_gl.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "chrome/browser/android/vr_shell/ui_elements.h" 10 #include "chrome/browser/android/vr_shell/ui_elements.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 if (pixels[1] == kWebVrPosePixelMagicNumbers[0] && 162 if (pixels[1] == kWebVrPosePixelMagicNumbers[0] &&
163 pixels[2] == kWebVrPosePixelMagicNumbers[1]) { 163 pixels[2] == kWebVrPosePixelMagicNumbers[1]) {
164 // Pose is good. 164 // Pose is good.
165 return pixels[0]; 165 return pixels[0];
166 } 166 }
167 VLOG(1) << "WebVR: reject decoded pose index " << (int)pixels[0] << 167 VLOG(1) << "WebVR: reject decoded pose index " << (int)pixels[0] <<
168 ", bad magic number " << (int)pixels[1] << ", " << (int)pixels[2]; 168 ", bad magic number " << (int)pixels[1] << ", " << (int)pixels[2];
169 return -1; 169 return -1;
170 } 170 }
171 171
172 int64_t TimeInMicroseconds() {
173 return std::chrono::duration_cast<std::chrono::microseconds>(
174 std::chrono::steady_clock::now().time_since_epoch()).count();
175 }
176
172 } // namespace 177 } // namespace
173 178
174 VrShellGl::VrShellGl( 179 VrShellGl::VrShellGl(
175 VrShell* vr_shell, 180 VrShell* vr_shell,
176 const base::WeakPtr<VrShell>& weak_vr_shell, 181 const base::WeakPtr<VrShell>& weak_vr_shell,
177 const base::WeakPtr<VrInputManager>& content_input_manager, 182 const base::WeakPtr<VrInputManager>& content_input_manager,
178 const base::WeakPtr<VrInputManager>& ui_input_manager, 183 const base::WeakPtr<VrInputManager>& ui_input_manager,
179 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, 184 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner,
180 gvr_context* gvr_api) 185 gvr_context* gvr_api)
181 : task_runner_(base::ThreadTaskRunnerHandle::Get()), 186 : task_runner_(base::ThreadTaskRunnerHandle::Get()),
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 // object_from_reference_matrix, we're not updating position_external. 648 // object_from_reference_matrix, we're not updating position_external.
644 // TODO: Not sure what object_from_reference_matrix is. The new api removed 649 // TODO: Not sure what object_from_reference_matrix is. The new api removed
645 // it. For now, removing it seems working fine. 650 // it. For now, removing it seems working fine.
646 gvr_api_->ApplyNeckModel(head_pose, 1.0f); 651 gvr_api_->ApplyNeckModel(head_pose, 1.0f);
647 } 652 }
648 653
649 frame.BindBuffer(kFramePrimaryBuffer); 654 frame.BindBuffer(kFramePrimaryBuffer);
650 655
651 // Update the render position of all UI elements (including desktop). 656 // Update the render position of all UI elements (including desktop).
652 const float screen_tilt = kDesktopScreenTiltDefault * M_PI / 180.0f; 657 const float screen_tilt = kDesktopScreenTiltDefault * M_PI / 180.0f;
653 scene_->UpdateTransforms(screen_tilt, UiScene::TimeInMicroseconds()); 658 scene_->UpdateTransforms(screen_tilt, TimeInMicroseconds());
654 659
655 UpdateController(GetForwardVector(head_pose)); 660 UpdateController(GetForwardVector(head_pose));
656 661
657 if (vr_shell_->GetUiInterface()->GetMode() == UiInterface::Mode::WEB_VR) { 662 if (vr_shell_->GetUiInterface()->GetMode() == UiInterface::Mode::WEB_VR) {
658 DrawWebVr(); 663 DrawWebVr();
659 664
660 // When using async reprojection, we need to know which pose was used in 665 // When using async reprojection, we need to know which pose was used in
661 // the WebVR app for drawing this frame. Due to unknown amounts of 666 // the WebVR app for drawing this frame. Due to unknown amounts of
662 // buffering in the compositor and SurfaceTexture, we read the pose number 667 // buffering in the compositor and SurfaceTexture, we read the pose number
663 // from a corner pixel. There's no point in doing this for legacy 668 // from a corner pixel. There's no point in doing this for legacy
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 } 1008 }
1004 1009
1005 task_runner_->PostDelayedTask(FROM_HERE, draw_task_.callback(), target - now); 1010 task_runner_->PostDelayedTask(FROM_HERE, draw_task_.callback(), target - now);
1006 } 1011 }
1007 1012
1008 void VrShellGl::ForceExitVR() { 1013 void VrShellGl::ForceExitVR() {
1009 main_thread_task_runner_->PostTask( 1014 main_thread_task_runner_->PostTask(
1010 FROM_HERE, base::Bind(&VrShell::ForceExitVR, weak_vr_shell_)); 1015 FROM_HERE, base::Bind(&VrShell::ForceExitVR, weak_vr_shell_));
1011 } 1016 }
1012 1017
1018 void VrShellGl::UpdateScene(std::unique_ptr<base::ListValue> commands) {
1019 scene_->HandleCommands(std::move(commands), TimeInMicroseconds());
1020 }
1021
1013 } // namespace vr_shell 1022 } // namespace vr_shell
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698