Pages Menu
TwitterRss
Categories Menu

Posted on 5 Juil, 2012 in Debian, Linux |

Réparer les lenteurs de Chromium sur Debian Wheezy

Chrome et/ou Chromium sur Debian Wheezy et Sid souffre de lenteurs

Une mise à jour de libcairo2 en 2-1.12.2-1 semble corriger ce bug, cet article ne devrait donc plus vous concerner… 

Les onglets mais aussi l’affichage en général provoques des énormes ralentissements dès que vous ouvrez plus de trois onglets. J’ai d’ailleurs passé plusieurs minutes à me demander pourquoi mon blog était si lent alors que j’étais justement an train d’essayer de l’optimiser (mise en cache, optimisation des images etc…).

Solutions pour Chromium sur Debian

Il m’a fallut un peu de recherche pour trouver cette solution, il s’agit apparemment d’un bug de la librairie libcairo2 qui avait déjà fait parler d’elle il y a quelques versions (1.0.8 je crois), qui a été patchée relativement rapidement par les développeurs Debian pour la version stable Squeeze. Le problème (et j’avoue que je comprend pas bien pourquoi) c’est que ce patch n’a pas été repris dans les versions récentes qui ont, du coup, de nouveau fait parler d’elle dans Sid. Seulement je ne suis pas sur Sid mais juste en Wheezy, seulement on sait que les paquets Sid finissent par débouler dans Testing… Et nous y voilà, la version Testing de Debian se retrouve avec un bug vieux de plusieurs mois, voire plusieurs années!!!

Première tentative: Downgrader* notre version de libcairo2

La solution qu’on trouve, ma foi, très vite sur Google parait tout à fait logique: downgrader* la librairie dans sa version précédente qui du coup était patchée. Mon problème alors fut tout à coup complètement différent.

Je commence par éditer mon /etc/apt/sources.list et lui indique les dépôts Stables (Squeeze) en plus des siens. Ensuite un petit effet apt-cache policy libcairo2 m’indique bien une version antérieure à la mienne, parfait, il ne me reste plus qu’à lancer mon aptitude install libcairo2/squeeze, et là patatra! Ce dont j’aurais dû me douter arriva: une liste pas possible de dépendances insatisfaites qui fait carrément peur tellement il y en a et pas des moindres!!!

Je ne sais pas si c’est « mon côté Gnome-shell » qui provoque autant d’incompatibilités mais ça fait peur! Du coup, reste plus qu’à retrouver ce fameux patch et essayer de l’appliquer aux sources récentes de libcairo2, rien que ça…

Réparer les lenteurs de Chromium sous Debian Wheezy (la vraie solution!)

Bon vous l’aurez compris, pour ce « hack » il va nous falloir compiler, et pour compiler on installe les outils classiques (en root ou avec sudo bien sûr!):

Avant tout:

#aptitude update
#aptitude install build-essentials autoconf automake pkg-config

Si vous n’avez jamais compilé sur votre machine vous aurez un bon nombre de paquets à installer par dépendance… Ensuite, en plus des outils classiques il nous faut installer pas mal de paquets de développement nécessaires à la compilation de libcairo2 elle même:

#aptitude install debhelper xutils-dev libxcb-shm0-dev libx11-dev libpng12-dev libxcb1-dev libxcb-render0-dev pkg-config libfontconfig1-dev libfreetype6-dev zlib1g-dev dh-autoreconf libxt-dev libpixman-1-dev libglib2.0-dev libxcb1-dev libxcb-render libxrender-dev

Et j’en ai peut-être même oublié mais les messages dû aux paquets -dev manquants pendant la compilation qui suit, sont plutôt explicites et vous ne devriez pas avoir de mal à les interpréter. Bien sûr, les deux commandes peuvent être concaténées en une seule. Et pour finir, pour compiler libcairo2 il nous faut… Les sources de libcairo2 évidemment!

apt-get source libcairo2

On peut très bien mixer l’utilisation de aptitude et de apt-get dans cet exemple, puisque apt-get source n’intervient en rien dans l’installation du système, il ne risque donc pas d’entrer en conflit avec aptitude. Apt-get se charge non seulement de retrouver les paquets source, mais aussi de les décompresser pour nous. On peut donc se rendre dans le répertoire de notre librairie et commencer notre noble tâche:

cd cairo-1.12.2

À propos du patch de correction

Capture patch Debian Chromium

Nous y voilà, maintenant qu’on a les sources, on peut leur appliquer le patch, pour ça on va le créer, (un bête fichier texte) pour ça n’importe quel éditeur fera l’affaire pourvu qu’il soit lancé avec les droits administrateur:

nano ./debian/patches/07_server_side_gradients.patch

Et collez-y le code ci-dessous:

# Description: don’t use server side gradients most drivers don’t handle it
Index: cairo-1.12.2/src/cairo-xlib-display.c
===================================================================
– – – cairo-1.12.2.orig/src/cairo-xlib-display.c 2012-04-25 21:53:19.000000000 +1200
+++ cairo-1.12.2/src/cairo-xlib-display.c 2012-05-17 16:06:18.543220800 +1200
@@ -266,11 +266,7 @@
/* Prior to Render 0.10, there is no protocol support for gradients and
* we call function stubs instead, which would silently consume the drawing.
*/
-#if RENDER_MAJOR == 0 && RENDER_MINOR < 10 display->buggy_gradients = TRUE;
-#else
– display->buggy_gradients = FALSE;
-#endif
display->buggy_pad_reflect = FALSE;
display->buggy_repeat = FALSE;

Sauvegardez puis fermer votre éditeur. Nous devons maintenant ajouter le patch au fichier

#echo 07_server_side_gradients.patch >> ./debian/patches/series

On passe à la compilation de notre librairie patchée:

dpkg-buildpackage -rfakeroot -uc -b

Si tout c’est bien déroulé vous devriez obtenir des paquets prêts à être installés par votre Debian, il ne nous reste plus qu’à lancer cette installe:

dpkg -i ../libcairo2_1.12.2-1_amd64.deb

Perso j’ai aussi ajouté deux des paquets fraîchement créés:

dpkg -i ../libcairo-script-interpreter2_1.12.2-1_amd64.deb
dpkg -i ../cairo-perf-utils_1.12.2-1_amd64.deb

Le nom avait l’air sympa 🙂Capture Compilation Debian patch Chromium

En espérant que ça fonctionne pour vous…

* L’inverse de upgrader càd redescendre à une version plus vieille.