Bug 1537967 - Skipping running refresh driver and compositing in VR mode. r=mstange,kip

MozReview-Commit-ID: 4L3PygFSFCB

Differential Revision: https://phabricator.services.mozilla.com/D26834

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Daosheng Mu 2019-04-12 04:42:28 +00:00
parent 3e6ef756b6
commit 0e6aee236e
4 changed files with 32 additions and 0 deletions

View File

@ -176,7 +176,16 @@ bool CompositorVsyncScheduler::NotifyVsync(const VsyncEvent& aVsync) {
MOZ_ASSERT_IF(XRE_GetProcessType() == GeckoProcessType_GPU,
CompositorThreadHolder::IsInCompositorThread());
MOZ_ASSERT(!NS_IsMainThread());
#if defined(MOZ_WIDGET_ANDROID)
gfx::VRManager* vm = gfx::VRManager::Get();
if (!vm->IsPresenting()) {
PostCompositeTask(aVsync.mId, aVsync.mTime);
}
#else
PostCompositeTask(aVsync.mId, aVsync.mTime);
#endif // defined(MOZ_WIDGET_ANDROID)
PostVRTask(aVsync.mTime);
return true;
}

View File

@ -795,5 +795,15 @@ void VRManager::StopVRNavigation(const uint32_t& aDisplayID,
}
}
bool VRManager::IsPresenting() {
for (const auto& manager : mManagers) {
if (manager->GetIsPresenting()) {
return true;
}
}
return false;
}
} // namespace gfx
} // namespace mozilla

View File

@ -68,6 +68,7 @@ class VRManager {
const TimeDuration& aTimeout);
void Shutdown();
bool IsPresenting();
protected:
VRManager();

View File

@ -76,6 +76,10 @@
#include "nsDisplayList.h"
#include "nsTransitionManager.h"
#if defined(MOZ_WIDGET_ANDROID)
# include "VRManager.h"
#endif // defined(MOZ_WIDGET_ANDROID)
#ifdef MOZ_XUL
# include "nsXULPopupManager.h"
#endif
@ -1747,6 +1751,14 @@ void nsRefreshDriver::Tick(VsyncId aId, TimeStamp aNowTime) {
return;
}
#if defined(MOZ_WIDGET_ANDROID)
gfx::VRManager* vm = gfx::VRManager::Get();
if (vm->IsPresenting()) {
RunFrameRequestCallbacks(aNowTime);
return;
}
#endif // defined(MOZ_WIDGET_ANDROID)
AUTO_PROFILER_LABEL("nsRefreshDriver::Tick", LAYOUT);
// We're either frozen or we were disconnected (likely in the middle