- Événements de suspension et de reprise
- Conséquences sur la planification des images et les statistiques
- Modèle d’appel
- Test
Événements de suspension et de reprise
Sur XBOX One, les applications Game OS peuvent être suspendues et reprises par la gestion de la durée de vie des processus (PLM). À l’état suspendu, la mémoire de l’application reste intacte, mais l’application ne dispose d’aucune ressource CPU ou GPU. L’implémentation de la suspension et de la reprise par les applications Game OS fait partie des exigences XBOX (XR) pour la XBOX One. Si une application reçoit l’événement Suspending, elle doit appeler SuspendX. Sinon, elle sera arrêtée. Les appels à SuspendX et à ResumeX doivent tous deux s’exécuter sur le thread de rendu du titre afin de garantir que l’état du GPU est correctement sauvegardé par l’appel à SuspendX. Lorsque le titre est suspendu, il ne peut rien afficher tant que le GPU n’a pas repris. L’appel de n’importe quelle API Direct3D entre les appels Direct3D SuspendX et ResumeX, par exemple l’appel des méthodes ID3D12GraphicsCommandList::DrawInstanced ou ID3D12CommandQueue::ExecuteCommandLists, lève une exception. Voici les méthodes de suspension et de reprise de Direct3D sur XBOX One. Ces méthodes doivent être appelées sur la file d’attente de commandes graphiques, car elles ne sont pas prises en charge par les files d’attente de calcul et de copie.Conséquences sur la planification des images et les statistiques
La suspension de l’application introduit une perturbation non déterministe dans la planification des images qu’elle a établie. Étant donné le caractère imprévisible du moment où un événement de suspension peut se produire, le système ne peut pas restaurer en toute sécurité la planification établie et son état temporel après l’événement de reprise qui suit. Pour garantir un comportement robuste et prévisible, le système efface la planification des images de l’application lors du traitement de l’appel à SuspendX. La file d’attente de présentation est vidée vers l’écran, et toutes les images commencées par WaitFrameEventX mais pas encore envoyées à l’écran au moyen de PresentX sont ignorées. Par conséquent, après le retour de l’appel à ResumeX, l’application doit rétablir la planification des images souhaitée en appelant ID3D12Device::SetFrameIntervalX et ID3D12Device::ScheduleFrameEventX avant d’attendre sa prochaine origine d’image. L’application doit considérer que le pipeline d’images est vide après sa reprise.Il peut être courant qu’une application reçoive un événement de suspension alors qu’elle attend qu’une origine d’image (ou un autre événement d’image) soit signalée pendant un appel à ID3D12Device::WaitFrameEventX. Si le thread de l’application chargé d’appeler SuspendX sur la file d’attente de commandes graphiques est différent de celui utilisé pour attendre les événements d’image, l’appel à ID3D12Device::WaitFrameEventX (bien que lancé avant l’appel à SuspendX) peut échouer avec D3DERR_DEVICEREMOVED.
