Firefox et l'accélération matérielle sous GNU/Linux

Rédigé par antistress le 08 mars 2010 -

Un manège à grande vitesse

Sur toutes les plateformes, Firefox utilise la bibliothèque logicielle graphique libre Cairo pour réaliser l'affichage de manière indépendante du matériel.

Jusqu'à présent le rendu de l'affichage de Firefox était entièrement pris en charge par le processeur central (via pixman sous GNU/Linux) mais cela est sur le point de changer, l'idée étant d'accroître les performances (voire la qualité du rendu, s'agissant d'atténuer le crénelage du texte) en mettant à contribution le processeur graphique ou un processeur spécialisé (DSP) (via DirectX sous Windows ou OpenGL/OpenGL ES sur la plupart des plateformes).

La version de Firefox pour Windows sera la première servie compte tenu du support effectif actuel de Direct2D par Cairo (elle devrait d'ailleurs griller la politesse à la version 9 d'Internet Explorer qui proposerait aussi l'accélération matérielle du rendu des pages Web).

Hélas le support d'OpenGL par Cairo est moins avancé et n'est pas encore utilisable (mais ça vient). En attendant Mozilla a donc développé une technologie nommée Layers permettant d'accélérer le rendu de certains éléments d'une page web, et ce sur l'ensemble des plateformes (toujours via Direct2D ou OpenGL/OpenGL ES – voire en recourant aux instructions spécifiques du processeur central comme SSE2 pour la vidéo). Robert O'Callahan et Bas Schouten sont sur la brèche.

Layers pour Firefox : l'accélération matérielle sur toutes les plateformes

Une orange découpée en tranches

Normalement une page Web est rendue à l'écran comme un tout par le navigateur, ce qui rend difficile le recours à un quelconque procédé d'accélération matérielle à ce stade. Avec la technologie proposée, la page va être découpée en tranches (Layers en anglais) qui vont être ordonnées pour être rendues séparément et ainsi bénéficier de l'accélération matérielle lorsque c'est possible.

La vidéo fait partie des éléments qui pourront ainsi être accélérés, spécialement le transcodage YUV vers RGB qui consomme la plus grande partie des ressources nécessaires au décodage vidéo [1]. Voilà qui devrait renforcer l'attrait des vidéos au format OGG directement jouées par le navigateur à l'aide des spécifications de HTML5 (lire ce précédent billet), que ce soit sur PC, netbook ou le smartphone Nokia N900 (qui embarque Firefox Mobile).

L'accélération au moyen du procédé Layers sous sous GNU/Linux n'est toutefois pas aussi complète que celle obtenue en confiant tout le rendu à Direct2D sous Windows : ainsi la rastérisation – qui consiste en la conversion d'une image vectorielle (par exemple au format SVG) en image matricielle (dite aussi bitmap) – ne sera pas accélérée et c'est bien dommage, SVG ayant le potentiel pour remplacer un certain nombre d'animations actuellement réalisées avec l'affreux greffon propriétaire Flash.

En revanche les filtres SVG et les propriétés CSS pour les transformations, animations et transitions (tout ce qui permet d'animer vos pages sans recourir à du JavaScript) pourront être accélérés, ce qui signifie que des démos comme celle-ci, celle-ci, celle-ci et celle-là profiteront pleinement du procédé. Par ailleurs WebGL pourra aussi utilement être accéléré.

Enfin, cette technologie permet théoriquement, d'une part, d'économiser du temps de calcul en ne rendant que la partie visible (a priori utile pour les processeurs de faible puissance qui équipent les appareils mobiles, cela peut toutefois être contre-productif lors du défilement de la page ou d'un zoom inversé), et, d'autre part, d'effectuer le rendu de chaque tranche dans autant de processus différents afin d'assurer la fluidité des animations lorsque le rendu de la page nécessite plusieurs opérations simultanées, en tirant parti des architectures multicœurs des processeurs modernes.

Layers est prévu pour intégrer la plateforme mozilla1.9.3a3 sans que l'on sache encore quelle version de Firefox en bénéficiera.

Pour clore ce billet, je dirai que le projet Layers est une bonne nouvelle pour les utilisateurs de Firefox sur systèmes GNU/Linux. C'est une technologie qui accompagnera parfaitement l'essor de la spécification WebGL. Dommage en revanche qu'elle ne puisse accélérer la rastérisation car le gain aurait été tout à fait sensible compte tenu que le rendu d'un fichier SVG est vraiment une opération gourmande en ressources processeur. S'agissant d'accélérer le rendu de vidéos, je ferai deux remarques : d'une part, je ne pense pas que, avec un processeur moderne, l'accélération du rendu de la vidéo sera flagrante à moins que vous n'ayez un processeur économe conçu pour netbook ou smartphone auquel cas cette technologie vous rendra un réel service ; d'autre part les vidéos diffusées dans des boites noires comme le greffon Flash – qui est parfaitement opaque pour le navigateur – ne bénéficieront aucunement de cette technologie, conférant ainsi un avantage supplémentaire en termes de confort à la technologie ouverte constituée par le couple HTML5+OGG.

En savoir plus :

[1] La conversion YUV/RGB pourrait être évitée si tout le système était capable de gérer le YUV : pixman/Cairo, le serveur X, GL, GStreamer (ou libtheora dans le cas de Firefox ; libtheora travaille déjà en YUV quand Firefox et le reste du système nécessite du RGB actuellement, c'est tout le problème). Plus d'informations ici, ici, ici, ici et .


Get Firefox Button

#1  - Tuxicoman a dit :

Ah, si l'accélération matérielle de Cairo pouvait aussi servir à inkscape....

Répondre
#2  - antistress a dit :

Bon alors l'accélération matérielle sous Linux via Firefox 4 est mal partie : No Hardware Acceleration Firefox for Linux Due to Buggy X Drivers

Répondre
#3  - antistress a dit :

Aidez à tester le découplage des threads sous Linux (pour augmenter la réactivité de Firefox) : How to help testing off-main-thread compositing.

« Compositing is the process of taking various sections of the page broken into layers and drawing them as a single image to the screen. This process moves this work into separate thread. This will let the browser continue to draw pieces of that page that don't require the main loop such video, plugins, some CSS animations and perhaps an experimental async WebGL/Canvas mode. »

Tous les détails ici et .

En attendant l'accélération matérielle proprement dite (projet « X11GLLayers », également aux mains de la Gfx team).

Répondre
#4  - antistress a dit :

Ça arrive doucement : bientôt une étape de plus sera franchie :
Off-main-thread compositing on Linux
https://mozillagfx.wordpress.com/2015/05/19/off-main-thread-compositing-on-linux/

Prochaine étape : GPU compositing
https://mozillagfx.wordpress.com/2013/07/22/hardware-acceleration-and-compositing/

Répondre
#5  - antistress a dit :

Je fais un point complet sur ces technos (Basic OMTC, GL-accelerated OMTC, asynchronous panning and zooming (APZ), OMTC pour les animations CSS, Electrolysis (e10s)...) dans ce journal : https://linuxfr.org/users/antistress/journaux/ou-en-est-la-version-gnu-linux-de-firefox-cote-performances

Répondre

Fil RSS des commentaires de cet article

Les commentaires sont fermés.