| OLD | NEW |
| 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.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram_macros.h" | 7 #include "base/metrics/histogram_macros.h" |
| 8 #include "chrome/browser/android/vr_shell/ui_elements.h" | 8 #include "chrome/browser/android/vr_shell/ui_elements.h" |
| 9 #include "chrome/browser/android/vr_shell/ui_interface.h" |
| 9 #include "chrome/browser/android/vr_shell/ui_scene.h" | 10 #include "chrome/browser/android/vr_shell/ui_scene.h" |
| 10 #include "chrome/browser/android/vr_shell/vr_compositor.h" | 11 #include "chrome/browser/android/vr_shell/vr_compositor.h" |
| 11 #include "chrome/browser/android/vr_shell/vr_controller.h" | 12 #include "chrome/browser/android/vr_shell/vr_controller.h" |
| 12 #include "chrome/browser/android/vr_shell/vr_gesture.h" | 13 #include "chrome/browser/android/vr_shell/vr_gesture.h" |
| 13 #include "chrome/browser/android/vr_shell/vr_gl_util.h" | 14 #include "chrome/browser/android/vr_shell/vr_gl_util.h" |
| 14 #include "chrome/browser/android/vr_shell/vr_input_manager.h" | 15 #include "chrome/browser/android/vr_shell/vr_input_manager.h" |
| 15 #include "chrome/browser/android/vr_shell/vr_shell_delegate.h" | 16 #include "chrome/browser/android/vr_shell/vr_shell_delegate.h" |
| 16 #include "chrome/browser/android/vr_shell/vr_shell_renderer.h" | 17 #include "chrome/browser/android/vr_shell/vr_shell_renderer.h" |
| 17 #include "content/public/browser/navigation_controller.h" | 18 #include "content/public/browser/navigation_controller.h" |
| 18 #include "content/public/browser/render_widget_host.h" | 19 #include "content/public/browser/render_widget_host.h" |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 ui::WindowAndroid* ui_window) | 136 ui::WindowAndroid* ui_window) |
| 136 : desktop_screen_tilt_(kDesktopScreenTiltDefault), | 137 : desktop_screen_tilt_(kDesktopScreenTiltDefault), |
| 137 desktop_height_(kDesktopHeightDefault), | 138 desktop_height_(kDesktopHeightDefault), |
| 138 main_contents_(main_contents), | 139 main_contents_(main_contents), |
| 139 ui_contents_(ui_contents), | 140 ui_contents_(ui_contents), |
| 140 weak_ptr_factory_(this) { | 141 weak_ptr_factory_(this) { |
| 141 DCHECK(g_instance == nullptr); | 142 DCHECK(g_instance == nullptr); |
| 142 g_instance = this; | 143 g_instance = this; |
| 143 j_vr_shell_.Reset(env, obj); | 144 j_vr_shell_.Reset(env, obj); |
| 144 scene_.reset(new UiScene); | 145 scene_.reset(new UiScene); |
| 146 html_interface_.reset(new UiInterface); |
| 145 content_compositor_.reset(new VrCompositor(content_window, false)); | 147 content_compositor_.reset(new VrCompositor(content_window, false)); |
| 146 ui_compositor_.reset(new VrCompositor(ui_window, true)); | 148 ui_compositor_.reset(new VrCompositor(ui_window, true)); |
| 147 | 149 |
| 148 float screen_width = kScreenWidthRatio * desktop_height_; | 150 float screen_width = kScreenWidthRatio * desktop_height_; |
| 149 float screen_height = kScreenHeightRatio * desktop_height_; | 151 float screen_height = kScreenHeightRatio * desktop_height_; |
| 150 std::unique_ptr<ContentRectangle> rect(new ContentRectangle()); | 152 std::unique_ptr<ContentRectangle> rect(new ContentRectangle()); |
| 151 rect->id = kBrowserUiElementId; | 153 rect->id = kBrowserUiElementId; |
| 152 rect->size = {screen_width, screen_height, 1.0f}; | 154 rect->size = {screen_width, screen_height, 1.0f}; |
| 153 rect->translation = kDesktopPositionDefault; | 155 rect->translation = kDesktopPositionDefault; |
| 154 scene_->AddUiElement(rect); | 156 scene_->AddUiElement(rect); |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 void VrShell::OnDomContentsLoaded() { | 744 void VrShell::OnDomContentsLoaded() { |
| 743 // TODO(mthiesse): Setting the background to transparent after the DOM content | 745 // TODO(mthiesse): Setting the background to transparent after the DOM content |
| 744 // has loaded is a hack to work around the background not updating when we set | 746 // has loaded is a hack to work around the background not updating when we set |
| 745 // it to transparent unless we perform a very specific sequence of events. | 747 // it to transparent unless we perform a very specific sequence of events. |
| 746 // First the page background must load as not transparent, then we set the | 748 // First the page background must load as not transparent, then we set the |
| 747 // background of the renderer to transparent, then we update the page | 749 // background of the renderer to transparent, then we update the page |
| 748 // background to be transparent. This is probably a bug in blink that we | 750 // background to be transparent. This is probably a bug in blink that we |
| 749 // should fix. | 751 // should fix. |
| 750 ui_contents_->GetRenderWidgetHostView()->SetBackgroundColor( | 752 ui_contents_->GetRenderWidgetHostView()->SetBackgroundColor( |
| 751 SK_ColorTRANSPARENT); | 753 SK_ColorTRANSPARENT); |
| 754 html_interface_->OnDomContentsLoaded(); |
| 752 } | 755 } |
| 753 | 756 |
| 754 void VrShell::SetWebVrMode(JNIEnv* env, | 757 void VrShell::SetWebVrMode(JNIEnv* env, |
| 755 const base::android::JavaParamRef<jobject>& obj, | 758 const base::android::JavaParamRef<jobject>& obj, |
| 756 bool enabled) { | 759 bool enabled) { |
| 757 webvr_mode_ = enabled; | 760 webvr_mode_ = enabled; |
| 758 if (enabled) { | 761 if (enabled) { |
| 759 int64_t now = gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos; | 762 int64_t now = gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos; |
| 760 constexpr int64_t seconds_to_nanos = 1000 * 1000 * 1000; | 763 constexpr int64_t seconds_to_nanos = 1000 * 1000 * 1000; |
| 761 webvr_warning_end_nanos_ = now + kWebVrWarningSeconds * seconds_to_nanos; | 764 webvr_warning_end_nanos_ = now + kWebVrWarningSeconds * seconds_to_nanos; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 ui_contents_->GetRenderWidgetHostView()->GetRenderWidgetHost()->GetScreenInfo( | 808 ui_contents_->GetRenderWidgetHostView()->GetRenderWidgetHost()->GetScreenInfo( |
| 806 &result); | 809 &result); |
| 807 ui_tex_width_ = width / result.device_scale_factor; | 810 ui_tex_width_ = width / result.device_scale_factor; |
| 808 ui_tex_height_ = height / result.device_scale_factor; | 811 ui_tex_height_ = height / result.device_scale_factor; |
| 809 } | 812 } |
| 810 | 813 |
| 811 UiScene* VrShell::GetScene() { | 814 UiScene* VrShell::GetScene() { |
| 812 return scene_.get(); | 815 return scene_.get(); |
| 813 } | 816 } |
| 814 | 817 |
| 818 UiInterface* VrShell::GetUiInterface() { |
| 819 return html_interface_.get(); |
| 820 } |
| 821 |
| 815 void VrShell::QueueTask(base::Callback<void()>& callback) { | 822 void VrShell::QueueTask(base::Callback<void()>& callback) { |
| 816 base::AutoLock lock(task_queue_lock_); | 823 base::AutoLock lock(task_queue_lock_); |
| 817 task_queue_.push(callback); | 824 task_queue_.push(callback); |
| 818 } | 825 } |
| 819 | 826 |
| 820 void VrShell::HandleQueuedTasks() { | 827 void VrShell::HandleQueuedTasks() { |
| 821 // To protect a stream of tasks from blocking rendering indefinitely, | 828 // To protect a stream of tasks from blocking rendering indefinitely, |
| 822 // process only the number of tasks present when first checked. | 829 // process only the number of tasks present when first checked. |
| 823 std::vector<base::Callback<void()>> tasks; | 830 std::vector<base::Callback<void()>> tasks; |
| 824 { | 831 { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 const JavaParamRef<jobject>& ui_web_contents, | 874 const JavaParamRef<jobject>& ui_web_contents, |
| 868 jlong ui_window_android) { | 875 jlong ui_window_android) { |
| 869 return reinterpret_cast<intptr_t>(new VrShell( | 876 return reinterpret_cast<intptr_t>(new VrShell( |
| 870 env, obj, content::WebContents::FromJavaWebContents(content_web_contents), | 877 env, obj, content::WebContents::FromJavaWebContents(content_web_contents), |
| 871 reinterpret_cast<ui::WindowAndroid*>(content_window_android), | 878 reinterpret_cast<ui::WindowAndroid*>(content_window_android), |
| 872 content::WebContents::FromJavaWebContents(ui_web_contents), | 879 content::WebContents::FromJavaWebContents(ui_web_contents), |
| 873 reinterpret_cast<ui::WindowAndroid*>(ui_window_android))); | 880 reinterpret_cast<ui::WindowAndroid*>(ui_window_android))); |
| 874 } | 881 } |
| 875 | 882 |
| 876 } // namespace vr_shell | 883 } // namespace vr_shell |
| OLD | NEW |