
رمز Chromium واسع جدًا ، حيث سيجد الجميع شيئًا يناسب ذوقهم. والآن قررت التحدث عن ملفي المفضل فيه (هل لديك ملف؟). يعكس هذا الملف كل شيء: الألم وخيبة الأمل والأمل والمثابرة وقوة الإرادة والمسؤولية عن إخفاقات الآخرين والتضحية بالنفس. أحيانًا أقرأه
وأبكي وأتفهم ما يخفيه جزء كبير من جبل الجليد تحت الماء. بشكل عام ، هذا ليس ملف تعليمات برمجية. هذا ملف به تهيئة تصف أخطاء بطاقة الفيديو التي يجب على Chromium تجاوزها لعرض صفحاته على أنظمة أساسية مختلفة. ها هي:
https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.jsonما الذي نتحدث عنه؟ لنتذكر كيف يعمل المتصفح: اكتب بعض العناوين في شريط العناوين ، يقوم المتصفح بتحميل المحتوى وعرضه. المقال الجيد
"ماذا يحدث عندما تكتب google.com في متصفحك وتضغط على مفتاح
الإدخال؟" يخبرنا المزيد عن هذا
. (وعلى الفور
عدة ترجمات له على حبري). في ذلك ، تم ذكر إحدى النقاط الأخيرة ، يقولون ، "والآن بعد أن أصبح كل شيء جاهزًا ، نرسم صورة على الشاشة." نعم ، خذها وارسمها هكذا بالطبع.
بادئ ذي بدء ، في لغات البرمجة لسبب ما ليس هناك وظيفة "خذ ورسم هذا على الشاشة" خارج الصندوق. اللغات ومكتباتهم القياسية ليست مهتمة بمثل هذه التفاهات. وفقًا لذلك ، ليس من السهل كتابة الرمز العالمي عبر النظام الأساسي للرسم. تتخطى جميع أنواع ألعاب AAA الرائعة هذا التقييد بشكل مباشر تمامًا: "يجب أن يكون لديك وحدة التحكم هذه أو نظام التشغيل هذا مع بطاقة فيديو مقابل 800 دولار ، ثم ستعمل بطريقة أو بأخرى. ربما ". شكرا لأجل الطرف! لكن المتصفح ليس لعبة. يجب أن يعمل المتصفح دائمًا وفي كل مكان. لا يتوقع مستخدم الكمبيوتر الأكثر نفوذاً ، الذي تم شراؤه منذ 10 سنوات (وحتى في ذلك الوقت - في البيع) تشغيل Witcher الأخير ، ولكنه سيكون غاضبًا حقًا إذا لم يتمكن من فتح بريده في المتصفح أو شيء من google. من ناحية أخرى ، سيريد اللاعب الذي تبرع بكليّة لبطاقة فيديو مشاهدة
فيديو 8k في المستعرض
، ولف النماذج ثلاثية الأبعاد ، ويمكنه أيضًا التمرير بسلاسة عبر شريط Facebook.
كل هذا يجعل مطوري Chromium ينفجرون حرفياً: من ناحية ، ما زالوا يدعمون الرسم باستخدام التقنيات القديمة مثل GDI و DirectX9 للعمل على المعدات القديمة ، ولكن من ناحية أخرى رأوا دعمًا لأحدث إصدارات OpenGL أو DirectX11 (أو بالفعل 12؟) و Vulkan - مما يجعل من الممكن النشر على الأجهزة الحديثة الكاملة (بما في ذلك الهاتف المحمول).
لكن كل هذا كان سيشكل نصف المشكلة إذا عملت حديقة الحيوانات بأكملها بالطريقة التي يجب أن تعمل بها وفقًا للمواصفات. ما لا يحدث على الإطلاق. الأجهزة الحقيقية ومحركاتها تكسر كل شيء: وعود التسويق للعملاء ، والمواصفات الفنية ، والمعايير المقبولة بشكل عام ، واختبارات الاعتماد ، وتوافق نظام التشغيل ، وخطط التحديث ، وما إلى ذلك. ولكن ، بالإضافة إلى الأجهزة الحقيقية وبرامج التشغيل الخاصة بها ، ليس لدينا أي شيء آخر. لذلك ، عليك العمل على ما هو. هذا ما
يقوله ملف
gpu_driver_bug_list.json المذكور أعلاه.
بالمناسبة ، إلى أي مدى يحاول المتصفح "البقاء على قيد الحياة بأي ثمن" يستحق الاحترام. لذلك ، في حالة وجود مشاكل غير حرجة ، على سبيل المثال ، مع DirectX11 ، سيتم إجراء محاولات لتعطيل أجزاء معينة من وظائفها ، والتضحية بالأداء ، ولكن مع الحفاظ على قابلية التشغيل. بالنسبة للأخطاء الأكثر خطورة - سيتم تعطيل DirectX11 وسيتحول المتصفح إلى DirectX9 ، حيث سيتم أيضًا "قطع أو التخلص من مكونات المشكلة" (إذا لزم الأمر). حسنًا ، مع الفشل التام لنظام DirectX ، سيكون هناك تبديل إلى GDI - الذي سيصل إلى المعالج واستهلاك ذاكرة الوصول العشوائي ، ولكن لا يزال يحافظ على أداء الصفحات العادية (بدون فيديو كثيف أو ثلاثي الأبعاد) عند مستوى لن يلاحظ فيه المستخدم حتى ذلك هناك خطأ ما. عندما تطلب منك البرامج الأخرى بالفعل تحديث برنامج التشغيل أو تغيير بطاقة الفيديو - سيستمر Chromium ببساطة في العمل. لالتقاط الأنفاس.
دعونا نلقي نظرة على محتويات الملف الذي ذكرته. عدد المدخلات الفردية فيه: 215 قطعة. 215 مرة عندما كذب مطور الحديد ، كان كسولًا جدًا ، كان غبيًا أو جشعًا. 215 مرة اضطررت للبحث عن تكوين الأجهزة والبرامج الصحيح لإعادة إنتاج المشكلة وإيجاد حل لها. من الصعب تحديد عدد المرات التي تقرر فيها عدم إصلاح المشكلة - ولكن نظرًا لوجود الكثير من الأشخاص من حولنا ممن لديهم حديد قديم وقليل جدًا من الأشخاص الذين لديهم "Google لا تفتح في Chrome" ، يمكننا افتراض أنه كان هناك عدد قليل جدًا من هذه الحالات.
الملاحظة المثيرة للاهتمام التالية هي التوزيع بواسطة نظام التشغيل: 89 - android ، 44 - macosx ، 34 - linux ، 26 - win ، 8 - chromeos. يمكن جعل الاستنتاجات من هنا مختلفة. من ناحية ، من الواضح أن android هو نظام أساسي أساسي لـ Google وتم تدمير أموال هائلة في إصلاح الأخطاء عليه. من ناحية أخرى ، ليس من الواضح سبب اختراقهم لإصلاحات في قاعدة رمز Chromium ، وليس السائقين أو نظام التشغيل (بعد كل شيء ، تتمتع Google بمستوى عالٍ من التحكم في جميع المراحل). ستستفيد التصحيحات هناك من جميع البرامج على Android ، وهنا فقط Chromeium. على الأرجح هو تفاعل الأقسام ، عندما يكون من الأسهل على مبرمج Chromium إصلاح المشكلة في شفرته هنا والآن من تصعيدها 3-4 إلى أعلى ، ثم إلى الجانب ، ثم إلى 3-4 إلى أسفل. هناك عدد أقل من الأشخاص المهتمين بهذا في أي شركة مما هو ضروري.
لقد فوجئت للغاية أنه كان هناك ما يقرب من مرتين في عرض الأخطاء في نظام التشغيل Mac Os أكثر من Windows. بدا لي أن كل شيء هناك محدود للغاية في الأجهزة ويلعقها السائقون. ولكن اتضح أن حديقة حيوان Windows هي أكثر ضعفًا وثباتًا. مباشرة "الكاتدرائية والبازار" في الرسوم التوضيحية. أو هل يختبر مطورو Google الرمز على الخشخاش فقط؟
قسم البائعين مثير للاهتمام أيضًا: Nvidia - 22 ، AMD / ATI - 17 ، Intel - 30. لا أعتقد أن برامج أو أجهزة Intel أسوأ بشكل مباشر - بدلاً من ذلك ، يؤثر الإنتاج الضخم. من المرجح أن يشتري أي شخص لا يشتري "كمبيوتر ألعاب" على وجه التحديد شيئًا باستخدام بطاقة رسومات Intel مدمجة. سيحدث خطأ يحدث مع 0.001٪ من المستخدمين على بطاقة الفيديو من NVidia أو ATI لسنوات ، ولكنه سيؤدي إلى مجموعة من المستخدمين الغاضبين في المنتديات والشبكات الاجتماعية في حالة Intel. "القوة العظمى تستتبع مسؤولية كبيرة."
يبدو الفصل بين أخطاء OpenGL و DirectX أمرًا مضحكًا: OpenGL هو 16 ، و DirectX هو 0. ولكن هذا ليس لأن برنامج OpenGL سيء للغاية ، و DirectX جيد جدًا. الشيء هو أن جميع الأخطاء من فئة "الفوز" (تلك هي 26 قطعة) هي في الواقع أخطاء DirectX (حسنا ، حسنا ، ليس كل شيء ، ولكن كلها تقريبا).
ولكن حسنًا ، توقف هنا عن إلقاء اللوم على الجميع في صف معمم. دعنا نحصل على شخصية
، وهناك ، قبل المشاجرة ، كما ترون ، ليس بعيدًا !
هنا ، على سبيل المثال ،
الإدخال 211 ، يشير إلى
الخطأ 672380 . بالنسبة للأشخاص ، توقف السالب الأحادي ووظيفة الظل القوسي على بعض الأجهزة من Intel و NVidia عن العمل في التعليمات البرمجية.
أحادي ناقص ، اللعنة ،
وعلم المثلثات الأساسية ! يبدو ، ما أبعد من الاعتقاد؟ ولكن لا ، قاموا بإصلاحه ويعمل.
أو فيما يلي سجلات "الألوان المعروضة بشكل غير صحيح" مثل
رقم 185 و
219 و
220 وبعضها الآخر. قام المبرمج بكل شيء بشكل صحيح ، وعملت جميع الوظائف وعادت "النجاح" ، ولكن على الشاشة ، ونتيجة لذلك ، يتم عرض بكسل بلون خاطئ. أوه نعم - فقط على بطاقات الفيديو وإصدارات برنامج التشغيل هذه. بالمناسبة ، سؤال لمحبي نظرية أن الاختبارات يمكن أن تغطي كل شيء: كيف ستغطي هذا بالاختبارات؟
إليك شيء رائع آخر ،
رقم 224 : "فك ترميز VPx غير مدعوم جيدًا قبل تحديث منشئي Windows 10." حسنًا ، هذا هو ، خرج نظام التشغيل ، قال الجميع أن لديها تسارعًا في فك تشفير هذا الفيديو ومثل هذا الفيديو. ولكن في الواقع اتضح أنه موجود ، ولكن سيكون من الأفضل إذا لم يكن موجودًا على الإطلاق. ومن الأفضل إيقاف تشغيله. ونتيجة لذلك ، يبيع مطور نظام التشغيل مليار نظام تشغيل مدفوع آخر ، ويجمع مطور المتصفح المجاني الشكاوى من أن الفيديو لا يعمل بسلاسة كما نود ، على الرغم من أنه يبدو أن كل من الأجهزة ونظام التشغيل يجب أن يسمحوا بذلك! "أين 60 إطارًا في الثانية ولماذا تناول متصفحك 4 غيغابايت من ذاكرة الوصول العشوائي" - محادثة مألوفة ، أليس كذلك؟
وعلى الفور تم تسجيل رقم
225 : "فك ترميز VPx بطيء جدًا على Intel Broadwell و Skylake و CherryView." لقد طورنا ، مما يعني أننا طورنا أجيالًا جديدة من المعالجات واحدًا تلو الآخر ، تم الإعلان عنها وبيعها. لكن مشاكل المستخدم النهائي هي مشاكل المستخدم النهائي ، الذي يهمه. دع المتقدمين يسحقون بطريقة ما بعكاز ، ثم سنقوم بإصلاحه.
الأغنية المنفصلة هي ما يسمى "رسومات قابلة للتحويل" ، والتي ينخرط فيها البائعون في المتاجر بنشاط كبير. حسنًا ، يقولون ، يا له من كمبيوتر محمول جيد مع بطاقتي فيديو - كل شيء سيكون سريعًا في الألعاب ، ولكن في البرامج المكتبية (مثل المتصفح) سيكون موفرًا جدًا للطاقة ، وسيعمل لمدة عشر ساعات! والآن نلقي نظرة على حقيقة الحياة المريرة: على نظام Windows ، سيؤدي هذا إلى رفض كامل لـ DirectX11 (السجل
رقم 100 ) ، وعلى الخشخاش سوف تتعطل في كثير من الأحيان بحيث من الأفضل إيقاف تشغيل بطاقة غير منفصلة تمامًا (السجل
رقم 228 ).
أو هنا
رقم 242 : "غالبًا ما يؤدي الرمز الناتج عن تهيئة المتغير المحلي إلى حدوث أعطال في برنامج تشغيل Marshmallow Adreno". الحل جيد أيضًا: "dont_initialize_uninitialized_locals". حسنًا ، ما نوع الأشخاص العاديين الذين سيوافقون على كتابة شيء ما تحت النظام الأساسي ، حيث لا يمكن تهيئة المتغيرات المحلية أثناء الإعلان ، لأن السائق ينهار من هذا؟ ولكن في رمز هذا المنتج الضخم مثل Chromium - يجب أن تتعايش مع هذا.
رقم 26 : "تعطيل استخدام Direct3D 11 على نظام التشغيل Windows Vista." كان DirectX10 أحد الميزات الرئيسية لنظام التشغيل Vista أثناء الإصدار ، وبعد مرور بعض الوقت على إصدار DirectX11 تحته ، ما زلت أتذكر صناديق بطاقات الفيديو في تلك الأوقات التي تحتوي على نقوش فخورة "متوافقة مع DirectX11". وبالنسبة للكثيرين ، كان هذا بشكل عام السبب الوحيد للتبديل من XP مألوف ومستقر. مرت سنوات - والآن يتم تصنيف دعم DirectX11 (منتج Microsoft) في نظام التشغيل Windows Vista (منتج Microsoft) على أنه "غير مدعوم". الاعتراف المباشر بالجدارة!
حسنًا ، لقد سئمت من اختيار واحدة معينة ، واقرأ الباقي بنفسك - يتم وصف أسباب الخلل والعكازات التي تم تنفيذها جيدًا هناك ، بالإضافة إلى وجود روابط إلى bugtracker (حقل "cr_bugs").
معنوي
أولاً ، الكل يكذب. ثانيًا ، حتى في الظروف التي يكذب فيها الجميع ، لا يزال من الممكن كتابة برامج عالية الجودة. وثالثًا ، في المرة القادمة التي يخبرك فيها أحدهم بكيفية نجاح الويب الحديث بفضل "قوة HTML و CSS ولغة جافا سكريبت الجميلة" - أطلعه على هذه المقالة واسأل كيف ستعمل ولمن كان من الضروري بدون هذا العمل البطولي للأشخاص غير المرئيين في محاولة "للإقلاع بكل هذه القمامة."