Chromium Code Reviews| Index: third_party/WebKit/Source/modules/vr/VRDisplay.cpp |
| diff --git a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp |
| index ace724eec6f9ca1ef506f130936aee361715a9f3..fd94a9c7851f776217acf3ed07c0e7292a9cfba6 100644 |
| --- a/third_party/WebKit/Source/modules/vr/VRDisplay.cpp |
| +++ b/third_party/WebKit/Source/modules/vr/VRDisplay.cpp |
| @@ -55,17 +55,30 @@ VREye StringToVREye(const String& which_eye) { |
| VRDisplay::VRDisplay(NavigatorVR* navigator_vr, |
| device::mojom::blink::VRDisplayPtr display, |
| device::mojom::blink::VRDisplayClientRequest request) |
| - : ContextLifecycleObserver(navigator_vr->GetDocument()), |
| + : SuspendableObject(navigator_vr->GetDocument()), |
| navigator_vr_(navigator_vr), |
| capabilities_(new VRDisplayCapabilities()), |
| eye_parameters_left_(new VREyeParameters()), |
| eye_parameters_right_(new VREyeParameters()), |
| display_(std::move(display)), |
| submit_frame_client_binding_(this), |
| - display_client_binding_(this, std::move(request)) {} |
| + display_client_binding_(this, std::move(request)) { |
| + SuspendIfNeeded(); // Initialize suspended_. |
| +} |
| VRDisplay::~VRDisplay() {} |
| +void VRDisplay::Suspend() { |
| + suspended_ = true; |
| +} |
| + |
| +void VRDisplay::Resume() { |
| + suspended_ = false; |
| + if (request_vsync_on_resume_) { |
|
mthiesse
2017/06/08 03:26:30
No need for this boolean. RequestVSync() is always
billorr
2017/06/08 04:20:21
Done.
|
| + RequestVSync(); |
| + } |
| +} |
| + |
| VRController* VRDisplay::Controller() { |
| return navigator_vr_->Controller(); |
| } |
| @@ -801,6 +814,13 @@ void VRDisplay::ProcessScheduledAnimations(double timestamp) { |
| return; |
| } |
| + if (suspended_) { |
| + // We are currently suspended - try ProcessScheduledAnimations again later |
| + // when we resume. |
| + request_vsync_on_resume_ = true; |
| + return; |
| + } |
| + |
| TRACE_EVENT1("gpu", "VRDisplay::OnVSync", "frame", vr_frame_id_); |
| if (pending_vrdisplay_raf_ && scripted_animation_controller_) { |
| @@ -910,7 +930,8 @@ const AtomicString& VRDisplay::InterfaceName() const { |
| return EventTargetNames::VRDisplay; |
| } |
| -void VRDisplay::ContextDestroyed(ExecutionContext*) { |
| +void VRDisplay::ContextDestroyed(ExecutionContext* context) { |
| + SuspendableObject::ContextDestroyed(context); |
| ForceExitPresent(); |
| scripted_animation_controller_.Clear(); |
| } |