Chromium Code Reviews| Index: chrome/browser/android/vr_shell/vr_gl_thread.cc |
| diff --git a/chrome/browser/android/vr_shell/vr_gl_thread.cc b/chrome/browser/android/vr_shell/vr_gl_thread.cc |
| index 16d08aa97d14aaf6ae34a176297c3b2525b41239..f1e45ca8db34134fbd534eb43a811a14793df9d4 100644 |
| --- a/chrome/browser/android/vr_shell/vr_gl_thread.cc |
| +++ b/chrome/browser/android/vr_shell/vr_gl_thread.cc |
| @@ -6,6 +6,7 @@ |
| #include <utility> |
| +#include "chrome/browser/android/vr_shell/ui_interface.h" |
| #include "chrome/browser/android/vr_shell/ui_scene.h" |
| #include "chrome/browser/android/vr_shell/ui_scene_manager.h" |
| #include "chrome/browser/android/vr_shell/vr_input_manager.h" |
| @@ -14,6 +15,12 @@ |
| namespace vr_shell { |
| +void RunDisplayInfoCallback( |
|
cjgrant
2017/05/02 18:07:06
This will need a rebase with Michael's change I th
ymalik
2017/05/02 20:28:40
Yes. Rebased.
|
| + const base::Callback<void(device::mojom::VRDisplayInfoPtr)>& callback, |
| + device::mojom::VRDisplayInfoPtr info) { |
| + callback.Run(std::move(info)); |
| +} |
| + |
| VrGLThread::VrGLThread( |
| const base::WeakPtr<VrShell>& weak_vr_shell, |
| scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, |
| @@ -25,7 +32,8 @@ VrGLThread::VrGLThread( |
| main_thread_task_runner_(std::move(main_thread_task_runner)), |
| gvr_api_(gvr_api), |
| initially_web_vr_(initially_web_vr), |
| - reprojected_rendering_(reprojected_rendering) {} |
| + reprojected_rendering_(reprojected_rendering), |
| + weak_ptr_factory_(this) {} |
| VrGLThread::~VrGLThread() { |
| Stop(); |
| @@ -34,15 +42,70 @@ VrGLThread::~VrGLThread() { |
| void VrGLThread::Init() { |
| scene_ = base::MakeUnique<UiScene>(); |
| vr_shell_gl_ = base::MakeUnique<VrShellGl>( |
| - std::move(weak_vr_shell_), std::move(main_thread_task_runner_), gvr_api_, |
| - initially_web_vr_, reprojected_rendering_, scene_.get()); |
| - scene_manager_ = base::MakeUnique<UiSceneManager>(scene_.get()); |
| + weak_ptr_factory_.GetWeakPtr(), gvr_api_, initially_web_vr_, |
| + reprojected_rendering_, scene_.get()); |
| + scene_manager_ = base::MakeUnique<UiSceneManager>( |
| + weak_ptr_factory_.GetWeakPtr(), scene_.get()); |
| weak_vr_shell_gl_ = vr_shell_gl_->GetWeakPtr(); |
| weak_scene_manager_ = scene_manager_->GetWeakPtr(); |
| vr_shell_gl_->Initialize(); |
| } |
| +void VrGLThread::ContentSurfaceChanged(jobject surface) { |
|
cjgrant
2017/05/02 18:07:06
This is cool. Thanks for rejigging this to keep t
ymalik
2017/05/02 20:28:40
Acknowledged.
|
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&VrShell::ContentSurfaceChanged, weak_vr_shell_, surface)); |
| +} |
| + |
| +void VrGLThread::GvrDelegateReady() { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&VrShell::GvrDelegateReady, weak_vr_shell_)); |
| +} |
| + |
| +void VrGLThread::UpdateGamepadData(device::GvrGamepadData pad) { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&VrShell::UpdateGamepadData, weak_vr_shell_, pad)); |
| +} |
| + |
| +void VrGLThread::AppButtonGesturePerformed(UiInterface::Direction direction) { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&VrShell::AppButtonGesturePerformed, weak_vr_shell_, |
| + direction)); |
| +} |
| + |
| +void VrGLThread::AppButtonPressed() { |
| + weak_vr_shell_gl_->GetTaskRunner()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&UiSceneManager::AppButtonPressed, weak_scene_manager_)); |
| +} |
| + |
| +void VrGLThread::ProcessContentGesture( |
| + std::unique_ptr<blink::WebInputEvent> event) { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&VrShell::ProcessContentGesture, weak_vr_shell_, |
| + base::Passed(std::move(event)))); |
| +} |
| + |
| +void VrGLThread::ForceExitVr() { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&VrShell::ForceExitVr, weak_vr_shell_)); |
| +} |
| + |
| +void VrGLThread::RunVRDisplayInfoCallback( |
| + const base::Callback<void(device::mojom::VRDisplayInfoPtr)>& callback, |
| + device::mojom::VRDisplayInfoPtr* info) { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&RunDisplayInfoCallback, callback, base::Passed(info))); |
| +} |
| + |
| +void VrGLThread::OnContentPaused(bool enabled) { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&VrShell::OnContentPaused, weak_vr_shell_, enabled)); |
| +} |
| + |
| void VrGLThread::CleanUp() { |
| scene_manager_.reset(); |
| vr_shell_gl_.reset(); |