void CompositorVsyncScheduler::DispatchVREvents(TimeStamp aVsyncTimestamp) { MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread()); VRManager* vm = VRManager::Get(); vm->NotifyVsync(aVsyncTimestamp); }
mozilla::ipc::IPCResult VRManagerParent::RecvCreateVRServiceTestController(const nsCString& aID, const uint32_t& aPromiseID) { uint32_t controllerIdx = 1; // ID's are 1 based nsTArray<VRControllerInfo> controllerInfoArray; impl::VRControllerPuppet* controllerPuppet = nullptr; VRManager* vm = VRManager::Get(); /** * When running headless mochitests on some of our automated test * infrastructure, 2d display vsyncs are not always generated. * In this case, the test controllers can't be created immediately * after the VR display was created as the state of the VR displays * are updated during vsync. * To workaround, we produce a vsync manually. */ vm->NotifyVsync(TimeStamp::Now()); // Get VRControllerPuppet from VRManager vm->GetVRControllerInfo(controllerInfoArray); for (auto& controllerInfo : controllerInfoArray) { if (controllerInfo.GetType() == VRDeviceType::Puppet) { if (controllerIdx == mControllerTestID) { controllerPuppet = static_cast<impl::VRControllerPuppet*>( vm->GetController(controllerInfo.GetControllerID()).get()); break; } ++controllerIdx; } } // We might not have a controllerPuppet if the test did // not create a VR display first. if (!controllerPuppet) { // We send a device ID of "0" to indicate failure if (SendReplyCreateVRServiceTestController(aID, aPromiseID, 0)) { return IPC_OK(); } } else { if (!mVRControllerTests.Get(mControllerTestID, nullptr)) { mVRControllerTests.Put(mControllerTestID, controllerPuppet); } if (SendReplyCreateVRServiceTestController(aID, aPromiseID, mControllerTestID)) { ++mControllerTestID; return IPC_OK(); } } return IPC_FAIL(this, "SendReplyCreateVRServiceTestController fail"); }
void CompositorVsyncScheduler::DispatchVREvents(TimeStamp aVsyncTimestamp) { { MonitorAutoLock lock(mCurrentVRListenerTaskMonitor); mCurrentVRListenerTask = nullptr; } // This only allows to be called by CompositorVsyncScheduler::PostVRTask() // When the process is going to shutdown, the runnable has chance to be executed // by other threads, we only want it to be run at VRListenerThread. if (!VRListenerThreadHolder::IsInVRListenerThread()) { return; } VRManager* vm = VRManager::Get(); vm->NotifyVsync(aVsyncTimestamp); }