Mon fichier préféré dans la base de code Chromium

Le code Chrome est très complet, chacun y trouvera son bonheur. Et maintenant, j'ai décidé de parler de mon fichier préféré (en avez-vous un?). Ce fichier reflète tout: la douleur, la déception, l'espoir, la persévérance, la volonté, la responsabilité des échecs des autres et le sacrifice de soi. Parfois, je le lis, je pleure et je comprends ce qu'une énorme partie de l'iceberg est cachée sous l'eau. En général, ce n'est même pas un fichier de code. Il s'agit d'un fichier avec une configuration décrivant les bugs de la carte vidéo que Chromium doit contourner afin d'afficher ses pages sur différentes plateformes. Le voici: https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.json

De quoi parle-t-on? Rappelons-nous comment fonctionne le navigateur: vous tapez une adresse dans la barre d'adresse, le navigateur charge le contenu et l'affiche. Le bon article "Que se passe-t-il lorsque vous tapez google.com dans votre navigateur et appuyez sur Entrée?" En dit un peu plus à ce sujet . (et aussitôt plusieurs traductions de celui-ci sur Habré). Un des derniers points y est mentionné, disent-ils, «et maintenant que tout est prêt, nous dessinons une image à l'écran». Oui, prenez-le et dessinez-le comme ça, bien sûr.


Pour commencer, dans les langages de programmation pour une raison quelconque, il n'y a pas de fonction «prendre et dessiner à l'écran» hors de la boîte. Les langues et leurs bibliothèques standard ne sont pas intéressées par de telles bagatelles. En conséquence, le code universel multiplateforme pour le dessin n'est pas si facile à écrire. Toutes sortes de jeux sympas AAA contournent cette restriction de manière assez simple: «Vous devriez avoir une telle console ou un tel système d'exploitation avec une carte vidéo pour 800 $, alors cela fonctionnera d'une manière ou d'une autre. Probablement. " Merci pour l'astuce! Mais le navigateur n'est pas un jeu. Le navigateur devrait fonctionner toujours et partout. L'utilisateur du PC même le plus mort, acheté il y a 10 ans (et même alors - lors d'une vente) ne s'attend pas à jouer le dernier sorceleur, mais sera véritablement scandalisé s'il ne peut pas ouvrir son courrier dans le navigateur ou quelque chose sur google. D'un autre côté, le joueur qui a fait don d'un rein pour une carte vidéo voudra regarder une vidéo 8k dans un navigateur , faire tourner des modèles 3D, et il peut même défiler en douceur sur une bande Facebook.

Tout cela fait littéralement exploser les développeurs de Chromium: d'une part, ils prennent toujours en charge le dessin avec des technologies anciennes comme GDI et DirectX9 pour travailler sur des équipements obsolètes, mais d'autre part, ils ont vu la prise en charge des dernières versions d'OpenGL, DirectX11 (ou déjà 12?) Et Vulkan - qui permet de déployer sur des appareils modernes et complets (y compris mobiles).

Mais tout cela aurait été la moitié du problème si tout ce zoo fonctionnait comme il devrait fonctionner selon les spécifications. Ce qui ne se produit pas du tout. Le vrai matériel et ses pilotes cassent tout: promesses marketing aux clients, spécifications techniques, normes généralement acceptées, tests de certification, compatibilité OS, plans de mise à jour, etc. Mais, en plus du vrai matériel et de ses pilotes, nous n'avons rien d'autre. Par conséquent, vous devez travailler sur ce qui est. C'est ce que dit le fichier gpu_driver_bug_list.json susmentionné.

Soit dit en passant, la mesure dans laquelle le navigateur tente de "survivre à tout prix" mérite le respect. Ainsi, avec des problèmes non critiques, par exemple, avec DirectX11, des tentatives seront faites pour désactiver certaines parties de ses fonctionnalités, sacrifiant les performances, mais maintenant l'opérabilité. Pour les bogues plus graves - DirectX11 sera désactivé et le navigateur passera à DirectX9, où également (si nécessaire) les composants problématiques seront "coupés et jetés". Eh bien, avec une défaillance complète du système DirectX, il y aura un basculement vers GDI - qui affectera la consommation du processeur et de la RAM, mais gardera toujours les performances des pages ordinaires (sans vidéo ou 3D lourde) à un niveau auquel l'utilisateur ne comprendra probablement même pas que quelque chose ne va pas. Là où d'autres programmes vous demanderont déjà de mettre à jour le pilote ou de changer la carte vidéo - Chromium continuera simplement à fonctionner. L'époustouflant.

Regardons le contenu du fichier que j'ai mentionné. Le nombre d'entrées individuelles en elle: 215 pièces. 215 fois quand le développeur de fer a menti, était trop paresseux, stupide ou gourmand. 215 fois j'ai dû chercher la configuration matérielle et logicielle correcte pour reproduire le problème et trouver sa solution. Il est difficile de dire combien de fois il a été décidé de ne pas résoudre le problème - mais comme il y a beaucoup de gens autour de nous avec du vieux fer et en quelque sorte très peu qui ont "Google n'ouvre pas dans Chrome", nous pouvons supposer qu'il y avait très peu de tels cas.

L'observation intéressante suivante est la distribution par OS: 89 - android, 44 - macosx, 34 - linux, 26 - win, 8 - chromeos. Les conclusions d'ici peuvent être faites différemment. D'une part, il est évident qu'Android est une plate-forme clé pour Google et d'énormes fonds ont été détruits pour y remédier. D'un autre côté, on ne sait pas pourquoi ils ont été piratés dans des correctifs dans la base de code Chromium, et non dans les pilotes ou le système d'exploitation (après tout, Google a un niveau de contrôle assez élevé à toutes les étapes). Les corrections y bénéficieraient à tous les logiciels sur Android, et ici seulement à Chromeium. Le problème réside probablement dans l'interaction des départements, quand il est plus facile pour le programmeur Chromium de résoudre le problème dans son code ici et maintenant que de l'escalader de 3-4 niveaux vers le haut, puis sur le côté, puis 3-4 niveaux vers le bas. Il y a moins de personnes intéressées par une entreprise que cela ne serait nécessaire.

J'ai été très surpris qu'il y ait presque deux fois plus de bugs de rendu dans Mac Os que dans Windows. Il me semblait que tout y est très limité en matériel et léché par les pilotes. Mais il s'est avéré que le zoo de Windows est deux fois plus tenace et stable. Directement "Cathédrale et Bazar" dans les illustrations. Ou les développeurs Google testent-ils le code uniquement sur les coquelicots?

La division des fournisseurs est également intéressante: Nvidia - 22, AMD / ATI - 17, Intel - 30. Je ne pense pas que le logiciel ou le matériel Intel soit directement pire - plutôt, la production de masse affecte. Quiconque n'achète pas spécifiquement un «ordinateur de jeu» est susceptible d'acheter quelque chose avec une carte graphique Intel intégrée. Un bogue qui se produit avec 0,001% des utilisateurs vivra sur la carte vidéo de NVidia ou ATI pendant des années, mais il entraînera une bande d'utilisateurs en colère sur les forums et les réseaux sociaux dans le cas d'Intel. "Un grand pouvoir implique une grande responsabilité."

La séparation entre les bogues OpenGL et DirectX est drôle: OpenGL est 16, DirectX est 0. Mais ce n'est pas parce que OpenGL est si mauvais et DirectX est si bon. Le fait est que tous les bogues de la catégorie «gagnant» (ce sont 26 pièces) sont en fait des bogues DirectX (enfin, ok, pas tous, mais presque tous).

Mais d'accord, arrêtez ici de blâmer tout le monde d'affilée généralisée. Soyons personnels , et là, avant la bagarre, vous voyez, pas loin !

Ici, par exemple, l' entrée 211 , faisant référence au bogue 672380 . Pour les gens, le moins unaire et la fonction arc tangente sur certains matériels d'Intel et de NVidia ont cessé de fonctionner dans le code. Moins unaire , bon sang, et trigonométrie de base ! Il semblerait, quoi de plus à croire? Mais non, ils l'ont réparé et ça fonctionne.

Ou voici des enregistrements de "couleurs mal affichées" comme les n ° 185 , 219 , 220 et quelques autres. Le programmeur a tout fait correctement, toutes les fonctions ont fonctionné et ont renvoyé le "succès", mais sur l'écran, en conséquence, un pixel de la mauvaise couleur est affiché. Oh oui - uniquement sur ces cartes vidéo et ces versions de pilotes. Soit dit en passant, une question pour les fans de la théorie selon laquelle les tests peuvent tout couvrir: comment couvririez-vous cela avec des tests?

Voici une autre chose intéressante, # 224 : "Le décodage VPx n'est pas pris en charge bien avant la mise à jour des créateurs de Windows 10." Eh bien, c'est-à-dire que le système d'exploitation est sorti, tout le monde a trompé qu'elle avait une accélération du décodage de telle ou telle vidéo. Mais en pratique, il s'est avéré qu'elle existe, mais de telle sorte qu'il vaudrait mieux qu'elle n'existe pas du tout. Et il vaut mieux le désactiver. En conséquence, le développeur du système d'exploitation vend un autre milliard de systèmes d'exploitation payés, et le développeur du navigateur gratuit recueille des plaintes selon lesquelles la vidéo ne joue pas aussi bien que nous le souhaiterions, bien qu'il semble que le matériel et le système d'exploitation devraient le permettre! "Où sont mes 60 fps et pourquoi votre navigateur a-t-il mangé 4 Go de RAM" - une conversation familière, non?

Et tout de suite, elle est rattrapée par le nombre record 225 : "Le décodage VPx est trop lent sur Intel Broadwell, Skylake et CherryView." Nous avons développé, ce qui signifie que nous avons développé successivement de nouvelles générations de processeurs, annoncés, vendus. Mais les problèmes de l'utilisateur final sont les problèmes de l'utilisateur final, dont ils se soucient. Laissez les candidats s'y écraser avec une béquille, puis nous le réparerons.

Une chanson distincte est ce qu'on appelle les «graphiques commutables», dans lesquels les vendeurs dans les magasins s'engagent très activement. Eh bien, disent-ils, quel bon ordinateur portable avec deux cartes vidéo - tout sera rapide dans les jeux, mais dans les programmes de bureau (comme un navigateur), il sera très économe en énergie, il fonctionnera pendant dix heures! Et maintenant, nous regardons l'amère vérité de la vie: sous Windows, cela entraînera un rejet complet de DirectX11 (enregistrement n ° 100 ), et sur les coquelicots, il se bloquera si souvent que nous ferions mieux de désactiver complètement une carte non discrète (enregistrement n ° 228 ).

Ou voici le numéro 242 : "Le code produit par l'initialisation de variable locale déclenche souvent des plantages dans le pilote Marshmallow Adreno." La solution est très bien aussi: "dont_initialize_uninitialized_locals". Eh bien, quel genre de gens normaux accepteraient d'écrire quelque chose sous la plate-forme, où les variables locales ne peuvent pas être initialisées pendant la déclaration, car le pilote se bloque à partir de cela? Mais dans le code d'un produit aussi massif que le chrome - vous devez vivre avec cela.

N ° 26 : "Désactiver l'utilisation de Direct3D 11 sur Windows Vista." DirectX10 était l'une des principales caractéristiques de Vista lors de la sortie, et après un certain temps, DirectX11 en est sorti, je me souviens encore des boîtes de cartes vidéo de cette époque avec de fières inscriptions «compatibles DirectX11». Et pour beaucoup, c'était généralement la seule raison de passer d'un XP familier et stable. Des années ont passé - et la prise en charge de DirectX11 (produit Microsoft) dans Windows Vista (produit Microsoft) est désormais considérée comme "non prise en charge". Reconnaissance directe du mérite!

D'accord, je suis fatigué d'en choisir un en particulier, lisez le reste vous-même - les raisons des bogues et des béquilles implémentées y sont bien décrites, en plus il y a des liens vers le bugtracker (le champ "cr_bugs").

Moral


Premièrement, tout le monde ment. Deuxièmement, même dans des conditions où tout le monde ment, il est toujours possible d'écrire des logiciels de haute qualité. Et troisièmement, la prochaine fois, quelqu'un vous dira comment le Web moderne a réussi grâce à la «puissance du HTML, du CSS et du magnifique langage Javascript» - montrez-lui cet article et demandez comment cela fonctionnerait et à qui c'était nécessaire sans ce travail héroïque de personnes invisibles pour "décoller avec toutes ces ordures".

Source: https://habr.com/ru/post/fr424369/


All Articles