mozilla::ipc::IPCResult VRManagerParent::RecvCreateVRServiceTestController(const nsCString& aID, const uint32_t& aPromiseID) { uint32_t controllerIdx = 0; nsTArray<VRControllerInfo> controllerInfoArray; impl::VRControllerPuppet* controllerPuppet = nullptr; VRManager* vm = VRManager::Get(); // 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; } } MOZ_ASSERT(controllerPuppet); MOZ_ASSERT(mControllerTestID < 2); // We have only two controllers in VRSystemManagerPuppet. 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 VRManagerParent::RegisterWithManager() { VRManager* vm = VRManager::Get(); vm->AddVRManagerParent(this); mVRManagerHolder = vm; }
bool VRManagerParent::RecvGetDisplays(nsTArray<VRDisplayInfo> *aDisplays) { VRManager* vm = VRManager::Get(); vm->GetVRDisplayInfo(*aDisplays); return true; }
mozilla::ipc::IPCResult VRManagerParent::RecvCreateVRTestSystem() { VRManager* vm = VRManager::Get(); vm->CreateVRTestSystem(); return IPC_OK(); }
mozilla::ipc::IPCResult VRManagerParent::RecvCreateVRServiceTestDisplay(const nsCString& aID, const uint32_t& aPromiseID) { nsTArray<VRDisplayInfo> displayInfoArray; impl::VRDisplayPuppet* displayPuppet = nullptr; VRManager* vm = VRManager::Get(); vm->RefreshVRDisplays(); // Get VRDisplayPuppet from VRManager vm->GetVRDisplayInfo(displayInfoArray); for (auto& displayInfo : displayInfoArray) { if (displayInfo.GetType() == VRDeviceType::Puppet) { displayPuppet = static_cast<impl::VRDisplayPuppet*>( vm->GetDisplay(displayInfo.GetDisplayID()).get()); break; } } MOZ_ASSERT(displayPuppet); MOZ_ASSERT(!mDisplayTestID); // We have only one display in VRSystemManagerPuppet. if (!mVRDisplayTests.Get(mDisplayTestID, nullptr)) { mVRDisplayTests.Put(mDisplayTestID, displayPuppet); } if (SendReplyCreateVRServiceTestDisplay(aID, aPromiseID, mDisplayTestID)) { return IPC_OK(); } return IPC_FAIL(this, "SendReplyCreateVRServiceTestController fail"); }
mozilla::ipc::IPCResult VRManagerParent::RecvGetDisplays(nsTArray<VRDisplayInfo> *aDisplays) { VRManager* vm = VRManager::Get(); vm->GetVRDisplayInfo(*aDisplays); return IPC_OK(); }
bool VRManagerParent::RecvGetControllers(nsTArray<VRControllerInfo> *aControllers) { VRManager* vm = VRManager::Get(); vm->GetVRControllerInfo(*aControllers); return true; }
mozilla::ipc::IPCResult VRManagerParent::RecvGetControllers(nsTArray<VRControllerInfo> *aControllers) { VRManager* vm = VRManager::Get(); vm->GetVRControllerInfo(*aControllers); return IPC_OK(); }
void VRManagerParent::UnregisterFromManager() { VRManager* vm = VRManager::Get(); vm->RemoveVRManagerParent(this); mVRManagerHolder = nullptr; }
mozilla::ipc::IPCResult VRManagerParent::RecvStopVibrateHaptic(const uint32_t& aControllerIdx) { VRManager* vm = VRManager::Get(); vm->StopVibrateHaptic(aControllerIdx); return IPC_OK(); }
bool VRLayerParent::RecvSubmitFrame(PTextureParent* texture) { VRManager* vm = VRManager::Get(); vm->SubmitFrame(this, texture, mLeftEyeRect, mRightEyeRect); return true; }
void CompositorVsyncScheduler::DispatchVREvents(TimeStamp aVsyncTimestamp) { MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread()); VRManager* vm = VRManager::Get(); vm->NotifyVsync(aVsyncTimestamp); }
mozilla::ipc::IPCResult VRManagerParent::RecvControllerListenerRemoved() { mHaveControllerListener = false; VRManager* vm = VRManager::Get(); vm->RemoveControllers(); return IPC_OK(); }
mozilla::ipc::IPCResult VRManagerParent::RecvSetSensorStateToMockDisplay(const uint32_t& aDeviceID, const VRHMDSensorState& aSensorState) { VRManager* vm = VRManager::Get(); VRSystemManagerPuppet* puppetManager = vm->GetPuppetManager(); puppetManager->SetPuppetDisplaySensorState(aDeviceID, aSensorState); return IPC_OK(); }
mozilla::ipc::IPCResult VRManagerParent::RecvControllerListenerAdded() { VRManager* vm = VRManager::Get(); mHaveControllerListener = true; // Ask the connected gamepads to be added to GamepadManager vm->ScanForControllers(); return IPC_OK(); }
mozilla::ipc::IPCResult VRManagerParent::RecvSetDisplayInfoToMockDisplay(const uint32_t& aDeviceID, const VRDisplayInfo& aDisplayInfo) { VRManager* vm = VRManager::Get(); VRSystemManagerPuppet* puppetManager = vm->GetPuppetManager(); puppetManager->SetPuppetDisplayInfo(aDeviceID, aDisplayInfo); return IPC_OK(); }
bool VRManagerParent::RecvControllerListenerAdded() { VRManager* vm = VRManager::Get(); // Ask the connected gamepads to be added to GamepadManager vm->ScanForDevices(); return true; }
mozilla::ipc::IPCResult VRManagerParent::RecvGetSensorState(const uint32_t& aDisplayID, VRHMDSensorState* aState) { VRManager* vm = VRManager::Get(); RefPtr<gfx::VRDisplayHost> display = vm->GetDisplay(aDisplayID); if (display != nullptr) { *aState = display->GetSensorState(); } return IPC_OK(); }
mozilla::ipc::IPCResult VRManagerParent::RecvCreateVRTestSystem() { VRManager* vm = VRManager::Get(); vm->CreateVRTestSystem(); // The mControllerTestID is 1 based mControllerTestID = 1; mVRControllerTests.Clear(); return IPC_OK(); }
mozilla::ipc::IPCResult VRManagerParent::RecvControllerListenerAdded() { // Force update the available controllers for GamepadManager, // remove the existing controllers and sync them by NotifyVsync(). VRManager* vm = VRManager::Get(); vm->RemoveControllers(); mHaveControllerListener = true; return IPC_OK(); }
mozilla::ipc::IPCResult VRLayerParent::RecvSubmitFrame(PTextureParent* texture) { if (mVRDisplayID) { VRManager* vm = VRManager::Get(); vm->SubmitFrame(this, texture, mLeftEyeRect, mRightEyeRect); } return IPC_OK(); }
bool VRManagerParent::RecvGetImmediateSensorState(const uint32_t& aDisplayID, VRHMDSensorState* aState) { VRManager* vm = VRManager::Get(); RefPtr<gfx::VRDisplayHost> display = vm->GetDisplay(aDisplayID); if (display != nullptr) { *aState = display->GetImmediateSensorState(); } return true; }
mozilla::ipc::IPCResult VRManagerParent::RecvSetGroupMask(const uint32_t& aDisplayID, const uint32_t& aGroupMask) { VRManager* vm = VRManager::Get(); RefPtr<gfx::VRDisplayHost> display = vm->GetDisplay(aDisplayID); if (display != nullptr) { display->SetGroupMask(aGroupMask); } return IPC_OK(); }
bool VRManagerParent::RecvResetSensor(const uint32_t& aDisplayID) { VRManager* vm = VRManager::Get(); RefPtr<gfx::VRDisplayHost> display = vm->GetDisplay(aDisplayID); if (display != nullptr) { display->ZeroSensor(); } return true; }
mozilla::ipc::IPCResult VRManagerParent::RecvResetSensor(const uint32_t& aDisplayID) { VRManager* vm = VRManager::Get(); RefPtr<gfx::VRDisplayHost> display = vm->GetDisplay(aDisplayID); if (display != nullptr) { display->ZeroSensor(); } return IPC_OK(); }
mozilla::ipc::IPCResult VRManagerParent::RecvVibrateHaptic(const uint32_t& aControllerIdx, const uint32_t& aHapticIndex, const double& aIntensity, const double& aDuration, const uint32_t& aPromiseID) { VRManager* vm = VRManager::Get(); vm->VibrateHaptic(aControllerIdx, aHapticIndex, aIntensity, aDuration, aPromiseID); return IPC_OK(); }
bool VRManagerParent::RecvRefreshDisplays() { // This is called to refresh the VR Displays for Navigator.GetVRDevices(). // We must pass "true" to VRManager::RefreshVRDisplays() // to ensure that the promise returned by Navigator.GetVRDevices // can resolve even if there are no changes to the VR Displays. VRManager* vm = VRManager::Get(); vm->RefreshVRDisplays(true); return true; }
void VRDisplayHost::SubmitFrame(VRLayerParent* aLayer, PTextureParent* aTexture, const gfx::Rect& aLeftEyeRect, const gfx::Rect& aRightEyeRect) { if ((mDisplayInfo.mGroupMask & aLayer->GetGroup()) == 0) { // Suppress layers hidden by the group mask return; } TextureHost* th = TextureHost::AsTextureHost(aTexture); // WebVR doesn't use the compositor to compose the frame, so use // AutoLockTextureHostWithoutCompositor here. AutoLockTextureHostWithoutCompositor autoLock(th); if (autoLock.Failed()) { NS_WARNING("Failed to lock the VR layer texture"); return; } CompositableTextureSourceRef source; if (!th->BindTextureSource(source)) { NS_WARNING("The TextureHost was successfully locked but can't provide a TextureSource"); return; } MOZ_ASSERT(source); IntSize texSize = source->GetSize(); TextureSourceD3D11* sourceD3D11 = source->AsSourceD3D11(); if (!sourceD3D11) { NS_WARNING("WebVR support currently only implemented for D3D11"); return; } if (!SubmitFrame(sourceD3D11, texSize, aLeftEyeRect, aRightEyeRect)) { return; } /** * Trigger the next VSync immediately after we are successfully * submitting frames. As SubmitFrame is responsible for throttling * the render loop, if we don't successfully call it, we shouldn't trigger * NotifyVRVsync immediately, as it will run unbounded. * If NotifyVRVsync is not called here due to SubmitFrame failing, the * fallback "watchdog" code in VRDisplayHost::NotifyVSync() will cause * frames to continue at a lower refresh rate until frame submission * succeeds again. */ VRManager *vm = VRManager::Get(); MOZ_ASSERT(vm); vm->NotifyVRVsync(mDisplayInfo.mDisplayID); }
void VRDisplayHost::RemoveLayer(VRLayerParent *aLayer) { mLayers.RemoveElement(aLayer); if (mLayers.Length() == 0) { StopPresentation(); } mDisplayInfo.mIsPresenting = mLayers.Length() > 0; // Ensure that the content process receives the change immediately VRManager* vm = VRManager::Get(); vm->RefreshVRDisplays(); }
mozilla::ipc::IPCResult VRManagerParent::RecvCreateVRServiceTestDisplay(const nsCString& aID, const uint32_t& aPromiseID) { VRManager* vm = VRManager::Get(); VRSystemManagerPuppet* puppetManager = vm->GetPuppetManager(); uint32_t deviceID = puppetManager->CreateTestDisplay(); if (SendReplyCreateVRServiceTestDisplay(aID, aPromiseID, deviceID)) { return IPC_OK(); } return IPC_FAIL(this, "SendReplyCreateVRServiceTestController fail"); }