File favorit saya di basis kode Chromium

Kode Chromium sangat luas, di sana setiap orang akan menemukan sesuatu sesuai selera mereka. Dan sekarang saya memutuskan untuk berbicara tentang file favorit saya di dalamnya (apakah Anda punya?). File ini mencerminkan segalanya: rasa sakit, kekecewaan, harapan, ketekunan, kemauan keras, tanggung jawab atas kegagalan orang lain dan pengorbanan diri. Kadang-kadang saya membacanya dan menangis dan mendapatkan pemahaman tentang betapa besar bagian dari gunung es yang tersembunyi di bawah air. Ini, secara umum, bahkan bukan file kode. Ini adalah file dengan konfigurasi yang menggambarkan bug kartu video yang harus dilewati Chromium untuk menampilkan halamannya pada platform yang berbeda. Ini dia: https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.json

Apa yang kita bicarakan Mari kita ingat bagaimana browser bekerja: Anda mengetik beberapa alamat di bilah alamat, browser memuat konten dan menampilkannya. Artikel bagus “Apa yang terjadi ketika Anda mengetik google.com di browser Anda dan tekan enter?” Memberitahu lebih banyak tentang ini . (dan sekaligus beberapa terjemahannya di Habré). Di dalamnya, salah satu poin terakhir disebutkan, mereka berkata, "dan sekarang semuanya sudah siap, kita menggambar di layar." Ya, ambil dan gambarkan seperti itu, tentu saja.


Untuk mulai dengan, dalam bahasa pemrograman untuk beberapa alasan tidak ada fungsi "ambil dan gambar ini di layar" di luar kotak. Bahasa dan perpustakaan standar mereka tidak tertarik pada hal sepele seperti itu. Dengan demikian, kode lintas platform universal untuk menggambar tidak begitu mudah untuk ditulis. Segala macam game AAA keren memotong batasan ini dengan cukup mudah: “Anda harus memiliki konsol atau OS semacam itu dengan kartu video seharga $ 800, maka entah bagaimana itu akan berhasil. Mungkin. " Terima kasih atas tipnya! Tapi browser itu bukan game. Browser harus berfungsi selalu dan di mana saja. Pengguna bahkan PC paling mati yang dibeli 10 tahun yang lalu (dan bahkan kemudian - pada penjualan) tidak berharap untuk memainkan Witcher terakhir, tetapi akan benar-benar marah jika ia tidak dapat membuka emailnya di browser atau google sesuatu. Di sisi lain, gamer yang menyumbangkan ginjal untuk kartu video akan ingin menonton video 8k di browser , memutar model 3D, dan bahkan dapat dengan lancar menggulir melalui pita Facebook.

Semua ini membuat pengembang Chromium benar-benar meledak: di satu sisi, mereka masih mendukung menggambar dengan teknologi kuno seperti GDI dan DirectX9 untuk bekerja pada peralatan yang sudah ketinggalan zaman, tetapi di sisi lain mereka melihat dukungan untuk versi terbaru OpenGL, DirectX11 (atau sudah 12?) Dan Vulkan - yang memungkinkan untuk digunakan pada perangkat modern penuh (termasuk ponsel).

Tetapi semua ini akan menjadi setengah masalah jika seluruh kebun binatang ini bekerja dengan cara yang seharusnya sesuai dengan spesifikasi. Apa yang tidak terjadi sama sekali. Perangkat keras nyata dan driver-drivernya merusak segalanya: janji pemasaran kepada pelanggan, spesifikasi teknis, standar yang diterima secara umum, tes sertifikasi, kompatibilitas OS, rencana pembaruan, dll. Tapi, selain perangkat keras yang nyata dan drivernya, kami tidak punya apa-apa lagi. Karena itu, Anda harus mengerjakan apa yang ada. Inilah yang diceritakan oleh file gpu_driver_bug_list.json yang disebutkan di atas.

Ngomong-ngomong, sejauh mana browser mencoba untuk "bertahan hidup dengan segala cara" patut dihormati. Jadi, dengan masalah yang tidak kritis, misalnya, dengan DirectX11, upaya akan dilakukan untuk menonaktifkan bagian-bagian tertentu dari fungsinya, mengorbankan kinerja, tetapi mempertahankan pengoperasian. Untuk bug yang lebih serius - DirectX11 akan dinonaktifkan dan browser akan beralih ke DirectX9, di mana juga (jika perlu) komponen masalah akan "terputus dan dibuang". Nah, dengan kegagalan total sistem DirectX, akan ada peralihan ke GDI - yang akan menekan prosesor dan konsumsi RAM, tetapi tetap mempertahankan kinerja untuk halaman biasa (tanpa video berat atau 3D) pada tingkat di mana pengguna kemungkinan besar bahkan tidak akan mengerti bahwa ada yang salah. Di mana program lain sudah meminta Anda untuk memperbarui driver atau mengganti kartu video - Chromium akan terus bekerja. Menakjubkan.

Mari kita lihat isi file yang saya sebutkan. Jumlah entri individual di dalamnya: 215 buah. 215 kali ketika pengembang besi berbohong, terlalu malas, bodoh atau serakah. 215 kali saya harus mencari konfigurasi hardware dan software yang benar untuk mereproduksi masalah dan menemukan solusinya. Sulit untuk mengatakan berapa kali diputuskan untuk tidak memperbaiki masalah - tetapi karena ada banyak orang di sekitar kita dengan besi tua dan entah bagaimana sangat sedikit yang memiliki "Google tidak terbuka di Chrome", kita dapat mengasumsikan bahwa ada sangat sedikit kasus seperti itu.

Pengamatan menarik berikut adalah distribusi oleh OS: 89-android, 44-macosx, 34-linux, 26-win, 8-chromeos. Kesimpulan dari sini bisa dibuat berbeda. Di satu sisi, jelas bahwa android adalah platform kunci untuk Google dan dana yang luar biasa hancur dalam memperbaiki bug di atasnya. Di sisi lain, tidak jelas mengapa mereka diretas menjadi perbaikan di basis kode Chromium, dan bukan driver atau OS (setelah semua, Google memiliki tingkat kontrol yang cukup tinggi di semua tahap). Koreksi di sana akan menguntungkan semua perangkat lunak di android, dan di sini hanya Chromeium. Kemungkinan besar itu adalah interaksi dari departemen, ketika lebih mudah bagi programmer Chromium untuk memperbaiki masalah dalam kode-nya di sini dan sekarang daripada meningkatkannya level 3-4 ke atas, kemudian ke samping, dan kemudian 3-4 level ke bawah. Ada lebih sedikit orang yang tertarik pada perusahaan ini daripada yang diperlukan.

Saya sangat terkejut bahwa ada bug rendering hampir dua kali lebih banyak di Mac Os daripada di Windows. Tampak bagi saya bahwa segala sesuatu di sana sangat terbatas dalam perangkat keras dan dijilat oleh driver. Tetapi ternyata Kebun Binatang Windows dua kali lebih ulet dan stabil. Langsung "Katedral dan Bazaar" dalam ilustrasi. Atau apakah pengembang Google hanya menguji kode pada bunga poppy saja?

Divisi vendor juga menarik: Nvidia - 22, AMD / ATI - 17, Intel - 30. Saya tidak berpikir bahwa perangkat lunak atau perangkat keras Intel secara langsung lebih buruk - lebih tepatnya, produksi massal mempengaruhi. Setiap orang yang tidak secara khusus membeli "komputer jinjing" cenderung membeli sesuatu dengan kartu grafis Intel terintegrasi. Bug yang terjadi dengan 0,001% pengguna akan hidup di kartu video dari NVidia atau ATI selama bertahun-tahun, tetapi itu akan menyebabkan banyak pengguna yang marah di forum dan jejaring sosial dalam kasus Intel. "Kekuatan besar membutuhkan tanggung jawab besar."

Pemisahan antara bug OpenGL dan DirectX terlihat lucu: OpenGL adalah 16, DirectX adalah 0. Tapi ini bukan karena OpenGL sangat buruk, dan DirectX sangat baik. Masalahnya adalah bahwa semua bug dari kategori "menang" (itu adalah 26 buah) sebenarnya adalah bug DirectX (well, ok, tidak semua, tetapi hampir semua).

Tapi oke, berhenti di sini menyalahkan semua orang secara umum. Ayo pribadi , dan di sana, sebelum perkelahian, Anda tahu, tidak jauh !

Di sini, misalnya, entri 211 , merujuk ke bug 672380 . Bagi orang-orang, minus unary dan fungsi tangen busur pada beberapa perangkat keras dari Intel dan NVidia berhenti bekerja dalam kode. Minus unary , sial, dan trigonometri dasar ! Tampaknya, apa lagi yang harus dipercaya? Tapi tidak, mereka memperbaikinya dan berhasil.

Atau di sini ada catatan "warna-warna yang tidak ditampilkan dengan benar" seperti No. 185 , 219 , 220 dan beberapa lainnya. Pemrogram melakukan segalanya dengan benar, semua fungsi bekerja dan mengembalikan "kesuksesan", tetapi pada layar, sebagai hasilnya, sebuah piksel dengan warna yang salah ditampilkan. Oh ya - hanya pada kartu video ini dan versi driver ini. Ngomong-ngomong, pertanyaan untuk penggemar teori bahwa tes dapat mencakup segalanya: bagaimana Anda akan menutupinya dengan tes?

Inilah hal keren lainnya, # 224 : "Penguraian VPx tidak didukung dengan baik sebelum Windows 10 pembuat pembaruan." Ya, begitulah, OS keluar, semua orang berseru bahwa dia memiliki akselerasi decoding video ini dan itu. Tetapi dalam praktiknya ternyata itu ada, tetapi sedemikian rupa sehingga akan lebih baik jika tidak ada sama sekali. Dan lebih baik mematikannya. Akibatnya, pengembang OS menjual satu miliar OS lainnya yang dibayar, dan pengembang browser gratis mengumpulkan keluhan bahwa video tidak diputar semulus yang kami inginkan, meskipun tampaknya perangkat keras dan OS seharusnya mengizinkan! “Di mana 60 fps saya dan mengapa browser Anda memakan RAM 4 GB” - percakapan yang akrab, bukan?

Dan segera dia terperangkap dalam rekor nomor 225 : "Penguraian VPx terlalu lambat pada Intel Broadwell, Skylake, dan CherryView." Kami berkembang, yang berarti kami mengembangkan generasi prosesor baru satu demi satu, diiklankan, dijual. Tetapi masalah pengguna akhir adalah masalah pengguna akhir, yang mereka pedulikan. Biarkan pelamar entah bagaimana menghancurkan sana dengan kruk, dan kemudian kita akan memperbaikinya.

Lagu terpisah adalah apa yang disebut "Switchable graphics", yang penjual aktif terlibat di dalamnya. Nah, kata mereka, laptop yang bagus dengan dua kartu video - semuanya akan cepat dalam permainan, tetapi dalam program kantor (seperti browser) itu akan sangat hemat energi, itu akan bekerja selama sepuluh jam! Dan sekarang kita melihat kebenaran pahit kehidupan: pada Windows ini akan mengarah pada penolakan lengkap DirectX11 (catatan No. 100 ), dan pada bunga poppy itu akan crash begitu sering sehingga kita lebih baik mematikan kartu non-diskrit sama sekali (catatan No. 228 ).

Atau di sini nomor 242 : "Kode yang dihasilkan oleh inisialisasi variabel lokal sering memicu crash pada driver Marshmallow Adreno." Solusinya juga baik: "dont_initialize_uninitialized_locals". Nah, orang normal macam apa yang akan setuju untuk menulis sesuatu di bawah platform, di mana variabel lokal tidak dapat diinisialisasi selama deklarasi, karena pengemudi crash dari ini? Tetapi dalam kode produk besar seperti Chromium - Anda harus hidup dengan ini.

26 : "Nonaktifkan penggunaan Direct3D 11 pada Windows Vista." DirectX10 adalah salah satu fitur utama Vista selama rilis, dan setelah beberapa waktu DirectX11 keluar di bawahnya, saya masih ingat kotak-kotak kartu video pada masa itu dengan tulisan bangga “DirectX11 compatible”. Dan bagi banyak orang, ini umumnya satu-satunya alasan untuk beralih dari XP yang akrab dan stabil. Tahun berlalu - dan sekarang dukungan untuk DirectX11 (produk Microsoft) di Windows Vista (produk Microsoft) diberi peringkat "tidak didukung". Pengakuan langsung atas prestasi!

Oke, saya bosan memilih yang khusus, baca sisanya sendiri - alasan bug dan kruk yang diterapkan dijelaskan dengan baik di sana, ditambah ada tautan ke bugtracker (bidang “cr_bugs”).

Akhlak


Pertama, semua orang berbohong. Kedua, bahkan dalam kondisi ketika semua orang berbohong, masih mungkin untuk menulis perangkat lunak berkualitas tinggi. Dan ketiga, lain kali seseorang memberi tahu Anda bagaimana web modern menjadi sukses berkat "kekuatan HTML, CSS, dan bahasa Javascript yang indah" - tunjukkan padanya artikel ini dan tanyakan bagaimana cara kerjanya dan kepada siapa perlu tanpa karya heroik orang tak kasat mata ini dalam upaya "lepas landas dengan semua sampah ini."

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


All Articles