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

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

Issue 2729523002: Re-land^2 WebVR compositor bypass via BrowserMain context + mailbox (Closed)
Patch Set: Revert FrameView.cpp change, re-enable typemap workaround. Created 3 years, 9 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 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.h" 5 #include "chrome/browser/android/vr_shell/vr_shell.h"
6 6
7 #include <android/native_window_jni.h> 7 #include <android/native_window_jni.h>
8 8
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 18 matching lines...) Expand all
29 #include "chrome/browser/android/vr_shell/vr_web_contents_observer.h" 29 #include "chrome/browser/android/vr_shell/vr_web_contents_observer.h"
30 #include "content/public/browser/navigation_controller.h" 30 #include "content/public/browser/navigation_controller.h"
31 #include "content/public/browser/render_view_host.h" 31 #include "content/public/browser/render_view_host.h"
32 #include "content/public/browser/render_widget_host.h" 32 #include "content/public/browser/render_widget_host.h"
33 #include "content/public/browser/render_widget_host_view.h" 33 #include "content/public/browser/render_widget_host_view.h"
34 #include "content/public/browser/web_contents.h" 34 #include "content/public/browser/web_contents.h"
35 #include "content/public/common/content_features.h" 35 #include "content/public/common/content_features.h"
36 #include "content/public/common/referrer.h" 36 #include "content/public/common/referrer.h"
37 #include "device/vr/android/gvr/gvr_device.h" 37 #include "device/vr/android/gvr/gvr_device.h"
38 #include "device/vr/android/gvr/gvr_device_provider.h" 38 #include "device/vr/android/gvr/gvr_device_provider.h"
39 #include "gpu/command_buffer/common/mailbox.h"
39 #include "jni/VrShellImpl_jni.h" 40 #include "jni/VrShellImpl_jni.h"
40 #include "third_party/WebKit/public/platform/WebInputEvent.h" 41 #include "third_party/WebKit/public/platform/WebInputEvent.h"
41 #include "ui/android/view_android.h" 42 #include "ui/android/view_android.h"
42 #include "ui/android/window_android.h" 43 #include "ui/android/window_android.h"
43 #include "ui/base/page_transition_types.h" 44 #include "ui/base/page_transition_types.h"
44 #include "ui/display/display.h" 45 #include "ui/display/display.h"
45 #include "ui/display/screen.h" 46 #include "ui/display/screen.h"
46 #include "ui/gfx/transform.h" 47 #include "ui/gfx/transform.h"
47 #include "ui/gfx/transform_util.h" 48 #include "ui/gfx/transform_util.h"
48 49
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 jboolean incognito, 318 jboolean incognito,
318 jint id) { 319 jint id) {
319 html_interface_->RemoveTab(incognito, id); 320 html_interface_->RemoveTab(incognito, id);
320 } 321 }
321 322
322 void VrShell::SetWebVRSecureOrigin(bool secure_origin) { 323 void VrShell::SetWebVRSecureOrigin(bool secure_origin) {
323 // TODO(cjgrant): Align this state with the logic that drives the omnibox. 324 // TODO(cjgrant): Align this state with the logic that drives the omnibox.
324 html_interface_->SetWebVRSecureOrigin(secure_origin); 325 html_interface_->SetWebVRSecureOrigin(secure_origin);
325 } 326 }
326 327
327 void VrShell::SubmitWebVRFrame() {} 328 void VrShell::SubmitWebVRFrame(
329 int16_t frame_index,
330 const gpu::Mailbox& mailbox,
331 const gpu::SyncToken& sync_token,
332 device::mojom::VRSubmitFrameClientPtr submit_client) {
333 TRACE_EVENT1("gpu", "SubmitWebVRFrame", "frame", frame_index);
334
335 // Save the submit completion client for later, we'll call the
336 // next lifecycle stages on it later. Use extra boolean maps
337 // to track when they get called since they could potentially
338 // be out of order, do cleanup once both were called.
339 webvr_submit_clients_.insert(
340 std::make_pair(frame_index, std::move(submit_client)));
341 webvr_submit_client_transferring_.insert({frame_index, true});
342 webvr_submit_client_rendering_.insert({frame_index, true});
343
344 PostToGlThreadWhenReady(base::Bind(&VrShellGl::SubmitWebVRFrame,
345 gl_thread_->GetVrShellGl(), frame_index,
346 mailbox, sync_token));
347 }
348
349 void VrShell::OnSubmitWebVRFrameTransferred(int frame_index) {
350 DCHECK(webvr_submit_clients_.find(frame_index) !=
351 webvr_submit_clients_.end());
352 webvr_submit_clients_[frame_index]->OnSubmitFrameTransferred();
353 webvr_submit_client_transferring_[frame_index] = false;
354 if (!webvr_submit_client_rendering_[frame_index]) {
355 webvr_submit_clients_.erase(frame_index);
356 webvr_submit_client_transferring_.erase(frame_index);
357 webvr_submit_client_rendering_.erase(frame_index);
358 }
359 }
360
361 void VrShell::OnSubmitWebVRFrameRendered(int frame_index) {
362 DCHECK(webvr_submit_clients_.find(frame_index) !=
363 webvr_submit_clients_.end());
364 webvr_submit_clients_[frame_index]->OnSubmitFrameRendered();
365 webvr_submit_client_rendering_[frame_index] = false;
366 if (!webvr_submit_client_transferring_[frame_index]) {
367 webvr_submit_clients_.erase(frame_index);
368 webvr_submit_client_transferring_.erase(frame_index);
369 webvr_submit_client_rendering_.erase(frame_index);
370 }
371 }
328 372
329 void VrShell::UpdateWebVRTextureBounds(int16_t frame_index, 373 void VrShell::UpdateWebVRTextureBounds(int16_t frame_index,
330 const gvr::Rectf& left_bounds, 374 const gvr::Rectf& left_bounds,
331 const gvr::Rectf& right_bounds) { 375 const gvr::Rectf& right_bounds,
376 const gvr::Sizei& source_size) {
332 PostToGlThreadWhenReady(base::Bind(&VrShellGl::UpdateWebVRTextureBounds, 377 PostToGlThreadWhenReady(base::Bind(&VrShellGl::UpdateWebVRTextureBounds,
333 gl_thread_->GetVrShellGl(), frame_index, 378 gl_thread_->GetVrShellGl(), frame_index,
334 left_bounds, right_bounds)); 379 left_bounds, right_bounds, source_size));
335 } 380 }
336 381
337 bool VrShell::SupportsPresentation() { 382 bool VrShell::SupportsPresentation() {
338 return true; 383 return true;
339 } 384 }
340 385
341 void VrShell::ResetPose() { 386 void VrShell::ResetPose() {
342 gl_thread_->task_runner()->PostTask( 387 gl_thread_->task_runner()->PostTask(
343 FROM_HERE, base::Bind(&VrShellGl::ResetPose, gl_thread_->GetVrShellGl())); 388 FROM_HERE, base::Bind(&VrShellGl::ResetPose, gl_thread_->GetVrShellGl()));
344 } 389 }
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 pose->position.value()[0] = decomposed_transform.translate[0]; 661 pose->position.value()[0] = decomposed_transform.translate[0];
617 pose->position.value()[1] = decomposed_transform.translate[1]; 662 pose->position.value()[1] = decomposed_transform.translate[1];
618 pose->position.value()[2] = decomposed_transform.translate[2]; 663 pose->position.value()[2] = decomposed_transform.translate[2];
619 } 664 }
620 665
621 return pose; 666 return pose;
622 } 667 }
623 668
624 device::mojom::VRDisplayInfoPtr VrShell::CreateVRDisplayInfo( 669 device::mojom::VRDisplayInfoPtr VrShell::CreateVRDisplayInfo(
625 gvr::GvrApi* gvr_api, 670 gvr::GvrApi* gvr_api,
626 gvr::Sizei compositor_size, 671 gvr::Sizei recommended_size,
627 uint32_t device_id) { 672 uint32_t device_id) {
628 TRACE_EVENT0("input", "GvrDevice::GetVRDevice"); 673 TRACE_EVENT0("input", "GvrDevice::GetVRDevice");
629 674
630 device::mojom::VRDisplayInfoPtr device = device::mojom::VRDisplayInfo::New(); 675 device::mojom::VRDisplayInfoPtr device = device::mojom::VRDisplayInfo::New();
631 676
632 device->index = device_id; 677 device->index = device_id;
633 678
634 device->capabilities = device::mojom::VRDisplayCapabilities::New(); 679 device->capabilities = device::mojom::VRDisplayCapabilities::New();
635 device->capabilities->hasOrientation = true; 680 device->capabilities->hasOrientation = true;
636 device->capabilities->hasPosition = false; 681 device->capabilities->hasPosition = false;
637 device->capabilities->hasExternalDisplay = false; 682 device->capabilities->hasExternalDisplay = false;
638 device->capabilities->canPresent = true; 683 device->capabilities->canPresent = true;
639 684
640 std::string vendor = gvr_api->GetViewerVendor(); 685 std::string vendor = gvr_api->GetViewerVendor();
641 std::string model = gvr_api->GetViewerModel(); 686 std::string model = gvr_api->GetViewerModel();
642 device->displayName = vendor + " " + model; 687 device->displayName = vendor + " " + model;
643 688
644 gvr::BufferViewportList gvr_buffer_viewports = 689 gvr::BufferViewportList gvr_buffer_viewports =
645 gvr_api->CreateEmptyBufferViewportList(); 690 gvr_api->CreateEmptyBufferViewportList();
646 gvr_buffer_viewports.SetToRecommendedBufferViewports(); 691 gvr_buffer_viewports.SetToRecommendedBufferViewports();
647 692
648 device->leftEye = device::mojom::VREyeParameters::New(); 693 device->leftEye = device::mojom::VREyeParameters::New();
649 device->rightEye = device::mojom::VREyeParameters::New(); 694 device->rightEye = device::mojom::VREyeParameters::New();
650 for (auto eye : {GVR_LEFT_EYE, GVR_RIGHT_EYE}) { 695 for (auto eye : {GVR_LEFT_EYE, GVR_RIGHT_EYE}) {
651 device::mojom::VREyeParametersPtr& eye_params = 696 device::mojom::VREyeParametersPtr& eye_params =
652 (eye == GVR_LEFT_EYE) ? device->leftEye : device->rightEye; 697 (eye == GVR_LEFT_EYE) ? device->leftEye : device->rightEye;
653 eye_params->fieldOfView = device::mojom::VRFieldOfView::New(); 698 eye_params->fieldOfView = device::mojom::VRFieldOfView::New();
654 eye_params->offset.resize(3); 699 eye_params->offset.resize(3);
655 eye_params->renderWidth = compositor_size.width / 2; 700 eye_params->renderWidth = recommended_size.width / 2;
656 eye_params->renderHeight = compositor_size.height; 701 eye_params->renderHeight = recommended_size.height;
657 702
658 gvr::BufferViewport eye_viewport = gvr_api->CreateBufferViewport(); 703 gvr::BufferViewport eye_viewport = gvr_api->CreateBufferViewport();
659 gvr_buffer_viewports.GetBufferViewport(eye, &eye_viewport); 704 gvr_buffer_viewports.GetBufferViewport(eye, &eye_viewport);
660 gvr::Rectf eye_fov = eye_viewport.GetSourceFov(); 705 gvr::Rectf eye_fov = eye_viewport.GetSourceFov();
661 eye_params->fieldOfView->upDegrees = eye_fov.top; 706 eye_params->fieldOfView->upDegrees = eye_fov.top;
662 eye_params->fieldOfView->downDegrees = eye_fov.bottom; 707 eye_params->fieldOfView->downDegrees = eye_fov.bottom;
663 eye_params->fieldOfView->leftDegrees = eye_fov.left; 708 eye_params->fieldOfView->leftDegrees = eye_fov.left;
664 eye_params->fieldOfView->rightDegrees = eye_fov.right; 709 eye_params->fieldOfView->rightDegrees = eye_fov.right;
665 710
666 gvr::Mat4f eye_mat = gvr_api->GetEyeFromHeadMatrix(eye); 711 gvr::Mat4f eye_mat = gvr_api->GetEyeFromHeadMatrix(eye);
(...skipping 20 matching lines...) Expand all
687 jboolean reprojected_rendering) { 732 jboolean reprojected_rendering) {
688 return reinterpret_cast<intptr_t>(new VrShell( 733 return reinterpret_cast<intptr_t>(new VrShell(
689 env, obj, reinterpret_cast<ui::WindowAndroid*>(content_window_android), 734 env, obj, reinterpret_cast<ui::WindowAndroid*>(content_window_android),
690 content::WebContents::FromJavaWebContents(ui_web_contents), 735 content::WebContents::FromJavaWebContents(ui_web_contents),
691 reinterpret_cast<ui::WindowAndroid*>(ui_window_android), for_web_vr, 736 reinterpret_cast<ui::WindowAndroid*>(ui_window_android), for_web_vr,
692 VrShellDelegate::GetNativeVrShellDelegate(env, delegate), 737 VrShellDelegate::GetNativeVrShellDelegate(env, delegate),
693 reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering)); 738 reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering));
694 } 739 }
695 740
696 } // namespace vr_shell 741 } // namespace vr_shell
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698