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

Side by Side Diff: third_party/WebKit/Source/modules/vr/VRDisplay.cpp

Issue 2668003003: Provide WebVR pose data only to the focused frame. (Closed)
Patch Set: Address comments Created 3 years, 10 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 "modules/vr/VRDisplay.h" 5 #include "modules/vr/VRDisplay.h"
6 6
7 #include "core/css/StylePropertySet.h" 7 #include "core/css/StylePropertySet.h"
8 #include "core/dom/DOMException.h" 8 #include "core/dom/DOMException.h"
9 #include "core/dom/DocumentUserGestureToken.h" 9 #include "core/dom/DocumentUserGestureToken.h"
10 #include "core/dom/FrameRequestCallback.h" 10 #include "core/dom/FrameRequestCallback.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 OnPresentChange(); 107 OnPresentChange();
108 } 108 }
109 } 109 }
110 110
111 void VRDisplay::disconnected() { 111 void VRDisplay::disconnected() {
112 if (m_isConnected) 112 if (m_isConnected)
113 m_isConnected = !m_isConnected; 113 m_isConnected = !m_isConnected;
114 } 114 }
115 115
116 bool VRDisplay::getFrameData(VRFrameData* frameData) { 116 bool VRDisplay::getFrameData(VRFrameData* frameData) {
117 if (!m_framePose || m_displayBlurred) 117 if (!m_navigatorVR->isFocused() || !m_framePose || m_displayBlurred)
118 return false; 118 return false;
119 119
120 if (!frameData) 120 if (!frameData)
121 return false; 121 return false;
122 122
123 if (m_depthNear == m_depthFar) 123 if (m_depthNear == m_depthFar)
124 return false; 124 return false;
125 125
126 return frameData->update(m_framePose, m_eyeParametersLeft, 126 return frameData->update(m_framePose, m_eyeParametersLeft,
127 m_eyeParametersRight, m_depthNear, m_depthFar); 127 m_eyeParametersRight, m_depthNear, m_depthFar);
128 } 128 }
129 129
130 VRPose* VRDisplay::getPose() { 130 VRPose* VRDisplay::getPose() {
131 if (!m_framePose || m_displayBlurred) 131 if (!m_navigatorVR->isFocused() || !m_framePose || m_displayBlurred)
132 return nullptr; 132 return nullptr;
133 133
134 VRPose* pose = VRPose::create(); 134 VRPose* pose = VRPose::create();
135 pose->setPose(m_framePose); 135 pose->setPose(m_framePose);
136 return pose; 136 return pose;
137 } 137 }
138 138
139 void VRDisplay::resetPose() { 139 void VRDisplay::resetPose() {
140 if (!m_display) 140 if (!m_display)
141 return; 141 return;
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 665
666 AutoReset<bool> animating(&m_inAnimationFrame, true); 666 AutoReset<bool> animating(&m_inAnimationFrame, true);
667 m_framePose = std::move(pose); 667 m_framePose = std::move(pose);
668 m_frameId = frameId; 668 m_frameId = frameId;
669 m_pendingRaf = false; 669 m_pendingRaf = false;
670 m_scriptedAnimationController->serviceScriptedAnimations( 670 m_scriptedAnimationController->serviceScriptedAnimations(
671 m_timebase + timeDelta.InSecondsF()); 671 m_timebase + timeDelta.InSecondsF());
672 } 672 }
673 673
674 void VRDisplay::ConnectVSyncProvider() { 674 void VRDisplay::ConnectVSyncProvider() {
675 if (!m_navigatorVR->isFocused())
676 return;
675 m_display->GetVRVSyncProvider(mojo::MakeRequest(&m_vrVSyncProvider)); 677 m_display->GetVRVSyncProvider(mojo::MakeRequest(&m_vrVSyncProvider));
676 if (m_pendingRaf && !m_displayBlurred) { 678 if (m_pendingRaf && !m_displayBlurred) {
677 m_vrVSyncProvider->GetVSync(convertToBaseCallback( 679 m_vrVSyncProvider->GetVSync(convertToBaseCallback(
678 WTF::bind(&VRDisplay::OnVSync, wrapWeakPersistent(this)))); 680 WTF::bind(&VRDisplay::OnVSync, wrapWeakPersistent(this))));
679 } 681 }
680 } 682 }
681 683
682 void VRDisplay::onFullscreenCheck(TimerBase*) { 684 void VRDisplay::onFullscreenCheck(TimerBase*) {
683 if (!m_isPresenting) { 685 if (!m_isPresenting) {
684 m_fullscreenCheckTimer.stop(); 686 m_fullscreenCheckTimer.stop();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 forceExitPresent(); 742 forceExitPresent();
741 m_scriptedAnimationController.clear(); 743 m_scriptedAnimationController.clear();
742 } 744 }
743 745
744 bool VRDisplay::hasPendingActivity() const { 746 bool VRDisplay::hasPendingActivity() const {
745 // Prevent V8 from garbage collecting the wrapper object if there are 747 // Prevent V8 from garbage collecting the wrapper object if there are
746 // event listeners attached to it. 748 // event listeners attached to it.
747 return getExecutionContext() && hasEventListeners(); 749 return getExecutionContext() && hasEventListeners();
748 } 750 }
749 751
752 void VRDisplay::focusChanged() {
753 // TODO(mthiesse): Blur/focus the display.
754 m_vrVSyncProvider.reset();
755 if (m_navigatorVR->isFocused()) {
jbroman 2017/02/06 15:34:18 nit: This check seems redundant with the one in Co
mthiesse 2017/02/06 16:37:47 Removed redundant check.
756 ConnectVSyncProvider();
757 }
758 }
759
750 DEFINE_TRACE(VRDisplay) { 760 DEFINE_TRACE(VRDisplay) {
751 EventTargetWithInlineData::trace(visitor); 761 EventTargetWithInlineData::trace(visitor);
752 ContextLifecycleObserver::trace(visitor); 762 ContextLifecycleObserver::trace(visitor);
753 visitor->trace(m_navigatorVR); 763 visitor->trace(m_navigatorVR);
754 visitor->trace(m_capabilities); 764 visitor->trace(m_capabilities);
755 visitor->trace(m_stageParameters); 765 visitor->trace(m_stageParameters);
756 visitor->trace(m_eyeParametersLeft); 766 visitor->trace(m_eyeParametersLeft);
757 visitor->trace(m_eyeParametersRight); 767 visitor->trace(m_eyeParametersRight);
758 visitor->trace(m_layer); 768 visitor->trace(m_layer);
759 visitor->trace(m_renderingContext); 769 visitor->trace(m_renderingContext);
760 visitor->trace(m_scriptedAnimationController); 770 visitor->trace(m_scriptedAnimationController);
761 visitor->trace(m_pendingPresentResolvers); 771 visitor->trace(m_pendingPresentResolvers);
762 } 772 }
763 773
764 } // namespace blink 774 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698