Meine Lieblingsdatei in Chromium Codebase

    Der Chrom-Code ist sehr umfangreich, dort findet jeder etwas zu schmecken. Aber ich beschloss, von meiner Lieblingsdatei zu erzählen (haben Sie eine?). Diese Akte spiegelt alles wider: Schmerz, Enttäuschung, Hoffnung, Ausdauer, Willenskraft, Verantwortung für das Versagen anderer Menschen und Selbstaufopferung. Ich lese es manchmal und weine und ich verstehe, wie viel Eisberg unter Wasser verborgen ist. Dies ist im Allgemeinen nicht einmal eine Codedatei. Dies ist eine Datei mit einer Konfiguration, die die Videokartenfehler beschreibt, die Chromium umgehen muss, um seine Seiten auf verschiedenen Plattformen richtig anzuzeigen. Hier ist es: https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.json

    Worum geht es? Denken wir daran, wie der Browser funktioniert: Sie geben eine Adresse in die Adressleiste ein, der Browser lädt den Inhalt und zeigt ihn an. Ein wenig mehr Details über sie sagt , ein guter Artikel «für Was passiert , wenn Sie von der Art google.com in Ihren Browser ein und drücken Sie Enter - Taste zu?» (Und nur ein paar seiner Übersetzungen Habré). Darin wird einer der letzten Punkte erwähnt, sagen sie: "Jetzt, da alles fertig ist, zeichnen wir ein Bild auf den Bildschirm." Ja, das nehmen und zeichnen wir natürlich.


    Zunächst einmal gibt es in Programmiersprachen aus irgendeinem Grund keine Funktion "Nehmen Sie und zeichnen Sie diese auf dem Bildschirm". Sprachen und ihre Standardbibliotheken wie diese Kleinigkeiten sind nicht interessant. Dementsprechend ist der universelle plattformübergreifende Code zum Zeichnen nicht so einfach zu schreiben. Jede Art cooler AAA-Spiele umgehen diese Einschränkung auf einfache Weise: „Sie sollten ein solches Präfix oder dieses Betriebssystem mit einer Videokarte für 800 Dollar haben, dann wird es irgendwie funktionieren. Wahrscheinlich Danke für den Rat! Der Browser ist jedoch kein Spiel. Der Browser sollte immer und überall funktionieren. Der Benutzer selbst des meist getöteten PCs, der vor 10 Jahren (und sogar dann - zum Verkauf) gekauft wurde, erwartet nicht, den letzten Witcher zu spielen, wird jedoch wirklich empört sein, wenn er seine Mail nicht im Browser öffnen oder etwas googeln kann. Auf der anderen Seite, und der Spieler, der eine Niere für die Grafikkarte gegeben hat,8k-Video, drehen Sie das 3D-Modell, naja, vielleicht sogar das Facebook-Band glatt rollen.

    All dies lässt Chromium-Entwickler buchstäblich explodieren: Zum einen unterstützen sie immer noch das Zeichnen mit alten Technologien wie GDI und DirectX9, um auf veralteten Geräten zu funktionieren, aber andererseits sahen sie Unterstützung für die neuesten Versionen von OpenGL, DirectX11 (oder bereits 12?) Und Vulkan - ermöglicht die Erweiterung auf vollständig moderne Geräte (einschließlich mobiler Geräte).

    Aber all das wäre die Hälfte der Mühe gewesen, wenn dieser Zoo so funktioniert hätte, wie er laut Spezifikation funktionieren sollte. Was absolut nicht passiert. Echte Hardware und ihre Treiber brechen alles: Marketingversprechen an Kunden, technische Spezifikationen, allgemein anerkannte Standards, Zertifizierungstests, Kompatibilität mit Betriebssystemen, Pläne zur Veröffentlichung von Updates usw. Aber außer der echten Hardware und den Treibern haben wir nichts anderes. Deshalb müssen wir daran arbeiten, was ist. Dies ist, worüber die Datei gpu_driver_bug_list.json berichtet .

    Übrigens verdient der Browser Respekt, wenn er versucht, "um jeden Preis zu überleben". Bei nicht kritischen Problemen, z. B. bei DirectX11, wird daher versucht, bestimmte Teile der Funktionalität zu deaktivieren, wodurch die Leistung beeinträchtigt wird, die Leistung jedoch erhalten bleibt. Bei schwerwiegenderen Fehlern wird DirectX11 deaktiviert und der Browser wechselt zu DirectX9, wo auch (falls erforderlich) problematische Komponenten "abgeschnitten und verworfen" werden. Nun, bei einem kompletten Ausfall des DirectX-Systems wird auf GDI umgestellt - was den Prozessor und den RAM-Verbrauch treffen wird, aber die Leistung für normale Seiten (ohne schweres Video oder 3D) auf einem Niveau hält, auf dem der Benutzer dies wahrscheinlich nicht versteht etwas geht schief Wo andere Programme bereits aufgefordert werden, den Treiber zu aktualisieren oder die Grafikkarte zu wechseln, funktioniert Chromium einfach weiter.

    Schauen wir uns den Inhalt der Datei an, die ich erwähnt habe. Die Anzahl der einzelnen Einträge darin: 215 Stück. 215 Mal, als der Entwickler des Eisens gelogen hat, zu faul war, dumm oder gierig war. 215 Mal mussten wir nach der korrekten Konfiguration von Hardware und Software suchen, um das Problem zu reproduzieren und die Lösung zu finden. Es ist schwer zu sagen, wie oft beschlossen wurde, das Problem nicht zu beheben. Da aber viele Leute mit altem Eisen um uns herum sind und einige wenige "Google Chrome" nicht öffnen, können wir davon ausgehen, dass es sehr wenige Fälle gab.

    Die nächste interessante Beobachtung ist die Betriebssystemverteilung: 89 - Android, 44 - Macosx, 34 - Linux, 26 - Win, 8 - Chromeos. Schlussfolgerungen von hier aus können Sie anders machen. Einerseits ist es offensichtlich, dass der Android eine wichtige Plattform für Google ist und enorme Mittel zur Behebung von Fehlern drohten. Andererseits ist nicht klar, warum sie mit Fixes in der Chromium-Code-Basis und nicht mit Treibern oder Betriebssystemen bedroht waren (schließlich hat Google dort auf allen Stufen ein hohes Maß an Kontrolle). Korrekturen würden von der gesamten Software auf dem Android profitieren, hier nur Chromium. Am wahrscheinlichsten ist das Zusammenspiel der Abteilungen, wenn es für den Chromium-Programmierer einfacher ist, das Problem in seinem Code hier und jetzt zu beheben, als es um 3 bis 4 Stufen zu erhöhen, dann zur Seite und 3 bis 4 Stufen nach unten. Es gibt weniger Menschen, die sich für ein Unternehmen interessieren, als nötig wäre.

    Ich war sehr überrascht, dass die Zeichenfehler in Mac OS fast doppelt so häufig gefunden wurden wie in Windows. Es schien mir, dass alles in Hardware sehr begrenzt und in Treibern geleckt ist. Es stellte sich jedoch heraus, dass der Windows Zoo doppelt so zäh und stabil ist. Gerade "Kathedrale und Basar" in den Illustrationen. Oder nur die Google-Entwickler selbst testen den Code auf einigen Macs?

    Interessant ist auch die Aufteilung nach Herstellern: Nvidia - 22, AMD / ATI - 17, Intel - 30. Ich glaube nicht, dass die Software von Intel oder die Hardware von Intel schlechter ist - eher die Masse der Produkte. Jeder, der nicht ausdrücklich einen "Gaming-PC" kauft, kauft höchstwahrscheinlich etwas mit einer integrierten Intel-Grafikkarte. Der Fehler, der bei 0,001% der Benutzer auftritt, wird jahrelang in einer Grafikkarte von NVidia oder ATI verwendet, führt jedoch bei Intel in den Foren und im sozialen Netzwerk zu einer Reihe verärgerter Benutzer. „Große Kraft bedeutet große Verantwortung.“

    Auf Bugs sieht OpenGL und DirectX eine lustige Einteilung aus: OpenGL - 16, DirectX - 0. Dies ist jedoch nicht der Fall, weil OpenGL so schlecht ist und DirectX so gut ist. Der Punkt hier ist, dass alle "win" -Kategorie-Bugs (hier sind diese 26 Stücke) eigentlich DirectX-Bugs (gut, ok, nicht alle, aber fast alle).

    Aber okay, genug ist genug, um jeden hintereinander anzuklagen. Wenden wir uns der Person zu und dort und dem Massaker, sehen Sie, nicht weit ! Nehmen Sie

    hier beispielsweise den Datensatz 211 auf , der sich auf den Fehler 672380 bezieht . Die Leute haben aufgehört, im Code unary minus und der Arc-Tangens-Funktion einiger Hardware von Intel und NVidia zu arbeiten. Unäres Minus , Pfannkuchen und grundlegende Trigonometrie ! Es scheint, an was weiter zu glauben? Aber nein, korrigiert und funktioniert.

    Oder hier sind die Aufzeichnungen zu "falsch angezeigten Farben" wie # 185 , 219 , 220und einige andere. Der Programmierer hat alles richtig gemacht, alle Funktionen haben funktioniert und "Erfolg" zurückgegeben. Als Ergebnis wird ein Pixel mit der falschen Farbe auf dem Bildschirm angezeigt. Ach ja - nur hier auf diesen Grafikkarten und diesen Treiberversionen. Die Frage ist übrigens den Fans der Theorie, dass alles mit Tests abgedeckt werden kann: Wie würden Sie das mit Tests abdecken?

    Hier ist eine weitere coole Sache, №224: "VPx-Dekodierung unterstützt kein Windows 10-Ersteller-Update". Das heißt, das Betriebssystem kam heraus, jeder sagte, dass es eine Beschleunigung beim Dekodieren eines solchen Videos gibt. In der Praxis stellte sich jedoch heraus, dass dies der Fall ist. Es ist jedoch so, dass es besser wäre, wenn es überhaupt nicht existieren würde. Und es ist besser, es auszuschalten. Infolgedessen verkauft der Betriebssystementwickler eine weitere Milliarde des kostenpflichtigen Betriebssystems, und der Entwickler eines kostenlosen Browsers erhebt Beschwerden darüber, dass das Video nicht so reibungslos abgespielt wird, wie wir möchten, obwohl sowohl Hardware als auch Betriebssystem dies zulassen würden! „Wo sind meine 60 Bilder pro Sekunde und warum hat Ihr Browser 4 GB RAM beansprucht?“ Ist ein vertrautes Gespräch, nicht wahr?

    Und sofort ihren Rekord Nummer 225 fangen: "VPx-Dekodierung ist auf Intel Broadwell, Skylake und CherryView zu langsam." Wir haben entwickelt, also haben wir neue Generationen von Prozessoren nacheinander entwickelt, beworben, verkauft. Die Probleme des Endbenutzers sind jedoch die Probleme des Endbenutzers, den er interessiert. Lassen Sie die Anwärter dort mit einer Krücke unterstützen, und dann reparieren wir sie.

    Ein separater Song - die sogenannte "Switchable graphics", die sehr aktiv vtyuhivayut Verkäufer in den Läden ist. Nun, was für ein guter Laptop mit zwei Grafikkarten - in Spielen und in Office-Programmen (wie einem Browser) wird alles schnell sein - es wird sehr energieeffizient sein, Nn Stunden Akkulaufzeit werden funktionieren! Und jetzt betrachten wir die bittere Wahrheit des Lebens: Unter Windows führt dies zu einer vollständigen Ablehnung von DirectX11 (Eintrag Nr. 100)), und bei Mohn wird es so oft abstürzen, dass wir die nicht-diskrete Karte besser ganz deaktivieren (Datensatz Nr. 228 ).

    Oder hier # 242 : "Löst Abstürze im Marshmallow Adreno-Treiber aus". Die Lösung ist auch großartig: "dont_initialize_uninitialized_locals". Nun, was für normale Leute würden sich einig sein, etwas für die Plattform zu schreiben, bei dem lokale Variablen bei der Deklaration nicht initialisiert werden können, weil der Treiber davon abstürzt? Aber im Code eines solchen Massenprodukts wie Chrom muss man damit leben.

    №26: "Deaktivieren Sie die Verwendung von Direct3D 11 unter Windows Vista." DirectX10 war eine der Hauptfunktionen von Vista mit der Veröffentlichung, und nach einiger Zeit kam DirectX11 heraus. Ich erinnere mich noch an die Schachteln von Grafikkarten dieser Zeit mit den stolzen Worten "DirectX11 compatible". Und für viele war dies im Allgemeinen der einzige Grund für den Übergang von den üblichen und stabilen XP. Jahre vergingen - und jetzt wird die Unterstützung für DirectX11 (Microsoft-Produkt) in Windows Vista (Microsoft-Produkt) mit der Stufe "nicht unterstützt" bewertet. Direkte Anerkennung des Verdienstes!

    Okay, ich habe es satt, Details auszusuchen, den Rest für sich selbst zu lesen - die Ursachen von Fehlern und die implementierten Krücken sowie die Links zum Bugtracker (das Feld „cr_bugs“) sind gut beschrieben.

    Moralisch


    Zuerst lügt jeder. Zweitens ist es auch unter Bedingungen, in denen alle lügen, möglich, qualitativ hochwertige Software zu schreiben. Und drittens, wenn Ihnen das nächste Mal jemand erzählt, wie das moderne Web dank „der Kraft von HTML, CSS und einer schönen Javascript-Sprache“ zum Erfolg wurde - zeigen Sie ihm diesen Artikel und fragen Sie, wie alles funktioniert hat und wer es war notwendig, ohne diese heldenhafte Arbeit von unsichtbaren Menschen "mit all diesem Müll abzufahren".

    Jetzt auch beliebt: