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

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

Issue 2445083002: Fixed bad WebVR content judder when the HTTP warning was displayed (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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_interface.h"
10 #include "chrome/browser/android/vr_shell/ui_scene.h" 10 #include "chrome/browser/android/vr_shell/ui_scene.h"
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 // TODO: Not sure what object_from_reference_matrix is. The new api removed 439 // TODO: Not sure what object_from_reference_matrix is. The new api removed
440 // it. For now, removing it seems working fine. 440 // it. For now, removing it seems working fine.
441 gvr_api_->ApplyNeckModel(head_pose, 1.0f); 441 gvr_api_->ApplyNeckModel(head_pose, 1.0f);
442 } 442 }
443 443
444 // Bind the primary framebuffer. 444 // Bind the primary framebuffer.
445 frame.BindBuffer(kFramePrimaryBuffer); 445 frame.BindBuffer(kFramePrimaryBuffer);
446 446
447 if (webvr_mode_) { 447 if (webvr_mode_) {
448 DrawWebVr(); 448 DrawWebVr();
449
450 // When using async reprojection, we need to know which pose was used in
451 // the WebVR app for drawing this frame. Due to unknown amounts of
452 // buffering in the compositor and SurfaceTexture, we read the pose number
453 // from a corner pixel. There's no point in doing this for legacy
454 // distortion rendering since that doesn't need a pose, and reading back
455 // pixels is an expensive operation. TODO(klausw): stop doing this once we
456 // have working no-compositor rendering for WebVR.
457 if (gvr_api_->GetAsyncReprojectionEnabled()) {
458 uint32_t webvr_pose_frame = GetPixelEncodedPoseIndex();
459 head_pose = webvr_head_pose_[webvr_pose_frame % kPoseRingBufferSize];
460 }
461
449 // Wait for the DOM contents to be loaded before rendering to avoid drawing 462 // Wait for the DOM contents to be loaded before rendering to avoid drawing
450 // white rectangles with no content. 463 // white rectangles with no content.
451 if (!webvr_secure_origin_ && IsUiTextureReady()) { 464 if (!webvr_secure_origin_ && IsUiTextureReady()) {
452 size_t last_viewport = buffer_viewport_list_->GetSize(); 465 size_t last_viewport = buffer_viewport_list_->GetSize();
453 buffer_viewport_list_->SetBufferViewport(last_viewport++, 466 buffer_viewport_list_->SetBufferViewport(last_viewport++,
454 *headlocked_left_viewport_); 467 *headlocked_left_viewport_);
455 buffer_viewport_list_->SetBufferViewport(last_viewport++, 468 buffer_viewport_list_->SetBufferViewport(last_viewport++,
456 *headlocked_right_viewport_); 469 *headlocked_right_viewport_);
457 470
458 // Bind the headlocked framebuffer. 471 // Bind the headlocked framebuffer.
459 frame.BindBuffer(kFrameHeadlockedBuffer); 472 frame.BindBuffer(kFrameHeadlockedBuffer);
460 DrawWebVrOverlay(target_time.monotonic_system_time_nanos); 473 DrawWebVrOverlay(target_time.monotonic_system_time_nanos);
461 } 474 }
462
463 // When using async reprojection, we need to know which pose was used in
464 // the WebVR app for drawing this frame. Due to unknown amounts of
465 // buffering in the compositor and SurfaceTexture, we read the pose number
466 // from a corner pixel. There's no point in doing this for legacy
467 // distortion rendering since that doesn't need a pose, and reading back
468 // pixels is an expensive operation. TODO(klausw): stop doing this once we
469 // have working no-compositor rendering for WebVR.
470 if (gvr_api_->GetAsyncReprojectionEnabled()) {
471 uint32_t webvr_pose_frame = GetPixelEncodedPoseIndex();
472 head_pose = webvr_head_pose_[webvr_pose_frame % kPoseRingBufferSize];
473 }
474 } else { 475 } else {
475 DrawVrShell(head_pose); 476 DrawVrShell(head_pose);
476 } 477 }
477 478
478 frame.Unbind(); 479 frame.Unbind();
479 frame.Submit(*buffer_viewport_list_, head_pose); 480 frame.Submit(*buffer_viewport_list_, head_pose);
480 } 481 }
481 482
482 void VrShell::DrawVrShell(const gvr::Mat4f& head_pose) { 483 void VrShell::DrawVrShell(const gvr::Mat4f& head_pose) {
483 float screen_tilt = desktop_screen_tilt_ * M_PI / 180.0f; 484 float screen_tilt = desktop_screen_tilt_ * M_PI / 180.0f;
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 const JavaParamRef<jobject>& ui_web_contents, 917 const JavaParamRef<jobject>& ui_web_contents,
917 jlong ui_window_android) { 918 jlong ui_window_android) {
918 return reinterpret_cast<intptr_t>(new VrShell( 919 return reinterpret_cast<intptr_t>(new VrShell(
919 env, obj, content::WebContents::FromJavaWebContents(content_web_contents), 920 env, obj, content::WebContents::FromJavaWebContents(content_web_contents),
920 reinterpret_cast<ui::WindowAndroid*>(content_window_android), 921 reinterpret_cast<ui::WindowAndroid*>(content_window_android),
921 content::WebContents::FromJavaWebContents(ui_web_contents), 922 content::WebContents::FromJavaWebContents(ui_web_contents),
922 reinterpret_cast<ui::WindowAndroid*>(ui_window_android))); 923 reinterpret_cast<ui::WindowAndroid*>(ui_window_android)));
923 } 924 }
924 925
925 } // namespace vr_shell 926 } // namespace vr_shell
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698