09/12/2017: Nouvelle expérience WebVR avec Firefox Quantum

FF Quantum
Mardi dernier, Mozilla a sorti Firefox Quantum, la 57ème version du navigateur Firefox depuis ses débuts publics. Cette version officiellement 2x plus rapide et utilisant 30% de mémoire en moins, a remis au musée certains de ses composants principaux, remplacés avantageusement par des modules plus rapides et plus modernes. Quantum incorpore Quantum Flow, un effort holistique pour moderniser et améliorer les fondations du moteur Web Firefox, en identifiant et supprimant les sources principales de pollution de résultats sans toutefois tout réécrire de zéro.

Quantum Flow a notamment un effet important et notable sur la stabilité de WebVR: Les clignotements intermittents de Firefox 55 correspondaient aux errements de l'ancien système, à travers lequel l'utilisateur était amené vers un espace sécurisé. L'effet est supprimé sur Quantum, il en résulte une expérience nettement plus fluide et agréable. Quantum Flow a éliminé en effet les goulets d'étranglement interfèrant avec la capacité du navigateur à envoyer de nouvelles images au système VR à temps.

Pour comprendre comment ces optimisations globales affectent les performances de réalité virtuelle, il est nécessaire de connaître les exigences strictes des systèmes VR et de comprendre l'infrastructure de communication de Firefox:

Vitesse de rendu: 16,6 Ms
-Dans le navigateur, le contenu 3D normal est affiché à 60 Hz. Ce contenu a donc environ 16,6 millisecondes pour simuler le monde, rendre la scène et envoyer chaque nouvelle image au thread de compositeur du navigateur. Si la page Web répond avant cette limite, la fréquence d'images sera une constante de 60 images par seconde, l'animation paraîtra fluide et agréable.

Navigateur:60 hz, VR: 90hz, voyez le problème
Le contenu VR est affiché à 90 Hz avec un temps de rendu réduit donc à 11,1 ms, en général à un thread WebVR dédié. Le délai entre le moment où la page web commence à rendre la scène VR et l'affichage d'une nouvelle image à un impact direct sur la perception de l'utilisateur, alors même que celui-ci peut changer d'orientation. Cettee latence de mouvement peut causer vertiges et des nausées.

Première solution: Reprojection des casques de VR
Heureusement, les systèmes de Réalité Virtuelle peuvent corriger un partie cet effet sans augmenter la latence, en déformant la scène restituée avant de l'afficher dans le casque: La reprojection. En revanche, plus la latence est faible, plus la simulation est précise. Pour réduire le temps de latence, le navigateur ne démarre pas le rendu immédiatement après l'affichage de la dernière image. A la place, il demande au système VR une période d'attente pour retarder le rendu de la scène, ce que l'on veut éviter en général.

Marier l'inconciliable
Le contenu Web et le thread WebVR s'exécutent dans différents processus, mais doivent être coordonnés pour rendre la scène correctement. Avant Quantum Flow, la communication entre ces processus risquait de devenir un goulot d'étranglement. Pour la VR il y a deux points de communication critiques: l'un après l'attente, lorsque WebVR cède l'exécution à la page Web pour le rendu de la scène; et une autre après le rendu, lorsque le contenu Web envoie l'image au thread WebVR. Un retard inattendu de l'un ou l'autre entraînerait un pic de latence entre le mouvement et l'affichage.

Firefox organize son execution au travers de plusieurs process:
-Le process parent, qui contient l'UI navigateur et peut accéder aux resources système.
-Le Process GPU qui communique spécifiquemet avec la carte graphique et contient le compositeur Firefox et WebVR.
-D'autres proces qui gèrent le contenu web mais ne communiquent pas avec le système PC.
Cette séparation des process permet de futures améliorations de la securité et empêchent un onglet en crashant de fermer le navigateur entier.

Le problème des Communications Inter-Process Très souvent, ces process doivent communiquer entre eux et utilisent pour cela des messages de communication inter-processus ou IPC. Ces messages peuvent être synchrones ou asynchrones. Une IPC est synchrone lorsque toute autre tentative de nouveau message via IPC doit attendre que la communication en cours se termine: Attente pour envoyer le message, terminer la tâche et renvoyer le résultat. Le problème est qu'un onglet actif essayant de communiquer avec le processus parent peut bloquer la livraison du message, et force une attente jusqu'à ce que le résultat d'une communication différente atteigne l'initiateur, même en fond (donc non urgent) ou si la tâche en cours n'a rien à voir avec la tentative de communication. Une IPC asynchrone gère de façon indépendante l'envoi de la requête, l'exécution de la tâche, et le retour du résultat. L'exécution et la livraison des messages peuvent donc se produire dans le désordre et redéfinies de façon dynamique. Firefox à forcé la transition aux IPC asyncrones lors des dernières versions. L'un des objectifs de Quantum Flow a été d'identifier toutes ces IPC synchrones restantes pour les convertir en IPC asynchrones.

Rendu et GPU
outre les IPC synchrones, une autre communication est critique, celle qui permet d'exécuter la page Web pour lancer le rendu, et celle qui envoie cette information au casque, qui toutes les deux nécessitent un IPC de GPU > contenu et inversement contenu > GPU en retour. En raison du taux de trame VR, ces échanges à risque se produisent 180 fois par seconde. Dans Firefox 55, ces fréquences d'images élevées et l'activité de fond des autres onglets ouverts augmentaient la probabilité d'être retardé par une demande IPC synchrone en cours, avec des temps d'attentes souvent nombreux. Le navigateur ratait constamment les délais plus court imposés par l'équipement VR. Le développement de Quantum Flow pour Firefox 56 et 57, avec le passage aux IPC asynchrones ont réduit ce risque pratiquement à zéro.

Bien que Quantum Flow ne visait pas spécifiquement à améliorer WebVR, en supprimant ces goulots d'étranglement, ses nouveaux composants peuvent contribuer efficacement au gain de performance global, qui bénéficie particulièrement à la VR. Ainsi, Firefox Quantum n'est pas seulement la version la plus rapide de Firefox pour le rendu de contenu 2D, mais aussi celle qui offrire l'expérience WebVR la plus stable et la plus fluide d'internet. Et le meilleur reste à venir.

Traduit et adapté de https://hacks.mozilla.org/2017/11/a-super-stable-webvr-user-experience-thanks-to-firefox-quantum/ Voir aussi https://webvr.info/