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

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: rebase 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 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 // object_from_reference_matrix, we're not updating position_external. 628 // object_from_reference_matrix, we're not updating position_external.
624 // TODO: Not sure what object_from_reference_matrix is. The new api removed 629 // TODO: Not sure what object_from_reference_matrix is. The new api removed
625 // it. For now, removing it seems working fine. 630 // it. For now, removing it seems working fine.
626 gvr_api_->ApplyNeckModel(head_pose, 1.0f); 631 gvr_api_->ApplyNeckModel(head_pose, 1.0f);
627 } 632 }
628 633
629 frame.BindBuffer(kFramePrimaryBuffer); 634 frame.BindBuffer(kFramePrimaryBuffer);
630 635
631 // Update the render position of all UI elements (including desktop). 636 // Update the render position of all UI elements (including desktop).
632 const float screen_tilt = kDesktopScreenTiltDefault * M_PI / 180.0f; 637 const float screen_tilt = kDesktopScreenTiltDefault * M_PI / 180.0f;
633 scene_->UpdateTransforms(screen_tilt, UiScene::TimeInMicroseconds()); 638 scene_->UpdateTransforms(screen_tilt, TimeInMicroseconds());
634 639
635 UpdateController(GetForwardVector(head_pose)); 640 UpdateController(GetForwardVector(head_pose));
636 641
637 if (vr_shell_->GetUiInterface()->GetMode() == UiInterface::Mode::WEB_VR) { 642 if (vr_shell_->GetUiInterface()->GetMode() == UiInterface::Mode::WEB_VR) {
638 DrawWebVr(); 643 DrawWebVr();
639 644
640 // When using async reprojection, we need to know which pose was used in 645 // When using async reprojection, we need to know which pose was used in
641 // the WebVR app for drawing this frame. Due to unknown amounts of 646 // the WebVR app for drawing this frame. Due to unknown amounts of
642 // buffering in the compositor and SurfaceTexture, we read the pose number 647 // buffering in the compositor and SurfaceTexture, we read the pose number
643 // from a corner pixel. There's no point in doing this for legacy 648 // from a corner pixel. There's no point in doing this for legacy
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 } 981 }
977 982
978 task_runner_->PostDelayedTask(FROM_HERE, draw_task_.callback(), target - now); 983 task_runner_->PostDelayedTask(FROM_HERE, draw_task_.callback(), target - now);
979 } 984 }
980 985
981 void VrShellGl::ForceExitVr() { 986 void VrShellGl::ForceExitVr() {
982 main_thread_task_runner_->PostTask( 987 main_thread_task_runner_->PostTask(
983 FROM_HERE, base::Bind(&VrShell::ForceExitVr, weak_vr_shell_)); 988 FROM_HERE, base::Bind(&VrShell::ForceExitVr, weak_vr_shell_));
984 } 989 }
985 990
991 void VrShellGl::UpdateScene(std::unique_ptr<base::ListValue> commands) {
992 scene_->HandleCommands(std::move(commands), TimeInMicroseconds());
993 }
994
986 } // namespace vr_shell 995 } // namespace vr_shell
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell_gl.h ('k') | chrome/browser/ui/webui/vr_shell/vr_shell_ui_message_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698