
Chromium代码非常广泛,每个人都会发现自己喜欢的东西。 现在,我决定在其中讨论我最喜欢的文件(您有文件吗?)。 这个文件反映了一切:痛苦,失望,希望,毅力,意志力,对他人失败的责任和自我牺牲。 有时,我读完后
会哭,并了解冰山很大一部分被水淹没了。 通常,这甚至都不是代码文件。 这是一个带有配置的文件,该文件描述了Chromium为了在不同平台上显示其页面而必须绕过的视频卡错误。 它在这里:
https :
//cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.json我们在说什么 让我们记住浏览器是如何工作的:在地址栏中键入一些地址,浏览器将加载内容并显示它。 好的文章
“当您在浏览器中键入google.com并按Enter时会发生什么?”对此进行了详细介绍
。 (以及
一下在哈布雷的
翻译 )。 他们在其中提到了最后一点,他们说:“现在一切就绪,我们在屏幕上画了一幅画。” 是的,当然要把它画出来。
首先,出于某种原因,在编程语言中没有开箱即用的“在屏幕上绘制”功能。 语言及其标准库对这种琐事不感兴趣。 因此,用于绘图的通用跨平台代码不太容易编写。 各种很酷的AAA游戏都非常简单地绕过了这个限制:“您应该拥有这样的带有800美元视频卡的游戏机或这样的操作系统,然后它将以某种方式工作。 大概吧。 谢谢小费! 但是浏览器不是游戏。 浏览器应该随时随地工作。 即使是十年前最死的PC的用户(甚至在那时-出售)也不会期望扮演最后的巫师,但是如果他无法在浏览器或Google中打开邮件,他们将被激怒。 另一方面,为肾脏捐献显卡的游戏玩家希望在浏览器中观看
8k视频,扭转3D模型,甚至可以在Facebook磁带上平滑滚动。
所有这些使Chromium的开发人员名垂青史:一方面,他们仍然支持使用GDI和DirectX9等古老技术在过时的设备上进行绘图,但另一方面,他们看到了对最新版本的OpenGL,DirectX11(或已经是12?)的支持。 Vulkan-使得可以在完整的现代设备(包括移动设备)上进行部署。
但是,如果整个动物园按照规范工作的话,所有这些麻烦将减少一半。 什么都不会发生。 真正的硬件及其驱动程序破坏了一切:对客户的市场承诺,技术规范,公认的标准,认证测试,操作系统兼容性,更新计划等。 但是,除了真正的硬件及其驱动程序之外,我们别无其他。 因此,您必须研究什么。 这就是上述
gpu_driver_bug_list.json文件所
说明的内容 。
顺便说一下,浏览器试图“不惜一切代价生存”的程度值得尊重。 因此,对于非严重问题,例如DirectX11,将尝试禁用其某些功能,以牺牲性能,但保持可操作性。 对于更严重的错误-DirectX11将被禁用,浏览器将切换到DirectX9,并且在必要时还可以“切断并丢弃”有问题的组件。 好吧,在DirectX系统完全崩溃的情况下,将会切换到GDI-这会影响处理器和RAM的消耗,但仍将普通页面(没有沉重的视频或3D图像)的性能保持在用户很可能不了解的水平出问题了。 如果其他程序已经要求您更新驱动程序或更换视频卡,Chromium将会继续正常工作。 令人叹为观止。
让我们看一下我提到的文件的内容。 其中的单个条目数:215件。 铁的开发者懒惰,愚蠢或贪婪的时间是215次。 215次,我必须寻找正确的硬件和软件配置来重现问题并找到解决方案。 很难说决定不解决该问题的次数-但由于我们周围有很多人用旧铁,并且以某种方式很少有人知道“ Google无法在Chrome中打开”,因此我们可以假设这种情况很少。
以下有趣的观察是OS的分布:89-android,44-macosx,34-linux,26-win,8-chromeos。 从这里得出的结论可以有所不同。 一方面,很明显android是Google的关键平台,并且在修复bug上销毁了大量资金。 另一方面,目前尚不清楚为什么将其入侵Chromium代码库而不是驱动程序或操作系统中进行修复(毕竟Google在各个阶段都具有相当高的控制水平)。 更正那里将使android上的所有软件受益,而这里只有Chromeium。 最可能的问题是部门之间的互动,当Chromium程序员在此处和现在解决其代码中的问题比将其升级到3-4层,再到侧面再降低3-4层时更容易时。 在任何公司中对此感兴趣的人数都比必要的少。
我非常惊讶Mac Os中的渲染错误几乎是Windows中的两倍。 在我看来,那里的所有东西在硬件上都非常有限,并且被驱动程序舔了舔。 但是事实证明,Windows Zoo具有两倍的强度和稳定性。 在插图中直接“大教堂和集市”。 还是Google开发人员仅在罂粟花上测试代码?
供应商部门也很有趣:Nvidia-22,AMD / ATI-17,Intel-30。我认为Intel的软件或硬件不会直接恶化-而是会影响批量生产。 每个不专门购买“游戏机”的人都可能会购买带有集成英特尔图形卡的东西。 0.001%的用户所发生的错误将在NVidia或ATI的视频卡上存在数年,但对于英特尔而言,它将导致论坛和社交网络上的一群愤怒的用户。 “大国需要承担重大责任。”
OpenGL和DirectX错误之间的分离看起来很有趣:OpenGL为16,DirectX为0。但这不是因为OpenGL太差,而DirectX太好。 问题在于,“ win”类别的所有错误(共26个)实际上都是DirectX错误(好吧,不是全部,而是几乎全部)。
但是好吧,就在这里停止责怪大家一概而论。 让我们变得个性化
,然后在混战之前,就在不远处 !
这里,例如,
条目211 ,指的是
错误672380 。 对于人们来说,英特尔和NVidia某些硬件上的一元减号和反正切函数停止在代码中起作用。
一元减 ,该死的,和
基本的三角学 ! 看来,还有什么值得相信的? 但是不,他们修复了该问题,并且有效。
或者,这里是“显示不正确的颜色”的记录,如
编号185,219,220等。 程序员一切正确,所有功能都完成并返回“成功”,但结果是在屏幕上显示了错误颜色的像素。 哦,是的-仅在这些视频卡和这些驱动程序版本上。 顺便说一句,对于测试理论可以涵盖一切的迷来说,这是一个问题:您如何用测试来涵盖这一点?
这是另一件很酷的事情,
#224 :“在Windows 10创建者更新之前,不很好地支持VPx解码。” 嗯,就是说操作系统问世了,每个人都大声疾呼说她加快了对这类视频的解码速度。 但实际上,事实证明它存在,但是如果它根本不存在,那就更好了。 最好将其关闭。 结果,操作系统开发商又出售了十亿付费的操作系统,免费浏览器的开发商收集到有关视频播放不尽人意的投诉,尽管看起来硬件和操作系统都应该允许! “我的60 fps在哪里,为什么您的浏览器会吃掉4 GB的RAM”-一个熟悉的对话,对吗?
马上,她就被
225号记录所困扰:“ VPx解码在Intel Broadwell,Skylake和CherryView上太慢了。” 我们开发了产品,这意味着我们陆续开发出了广告,销售的新一代处理器。 但是最终用户的问题就是他们关心的最终用户的问题。 让申请人以某种方式用拐杖压在那儿,然后我们将其修复。
另一首歌是所谓的“可切换图形”,商店中的卖家非常积极地参与其中。 他们说,好,有两块视频卡的好笔记本电脑-游戏中一切都会很快,但是在办公程序(例如浏览器)中,它将非常节能,可以工作十个小时! 现在我们来看看生活中的痛苦真相:在Windows上,这将导致DirectX11的完全拒绝(记录
号100 ),在罂粟花上,它将崩溃的频率如此之高,以至于我们最好完全关闭非离散卡(记录
号228 )。
或这里的
数字242 :“由局部变量初始化产生的代码通常会导致棉花糖Adreno驱动程序崩溃。” 解决方案也很好:“ dont_initialize_uninitialized_locals”。 那么,什么样的普通人会同意在平台下写东西,而在该平台上局部变量不能在声明期间初始化,因为驱动程序会因此崩溃? 但是,在Chromium这样庞大的产品代码中,您必须忍受这一点。
第26号 :“在Windows Vista上禁用Direct3D11。” DirectX10是该发行版中Vista的主要功能之一,经过一段时间DirectX11出现之后,我仍然记得那些当时带有自豪标语“兼容DirectX11”的视频盒。 对于许多人来说,这通常是从熟悉且稳定的XP切换的唯一原因。 多年过去了,现在Windows Vista(Microsoft产品)对DirectX11(Microsoft产品)的支持被评为“不支持”。 直接认可功绩!
好的,我已经厌倦了选择一个特定的问题,自己阅读其余部分-此处充分描述了错误和已实施拐杖的原因,并且还有指向bugtracker的链接(“ cr_bugs”字段)。
品德
首先,每个人都说谎。 其次,即使在每个人都躺着的情况下,仍然可以编写高质量的软件。 第三,下一次有人告诉您,现代网络如何借助“ HTML,CSS和漂亮的Javascript语言的强大功能”获得成功-向他展示这篇文章,并询问它如何工作以及对谁有效没有这种无形的人们的英勇工作是必要的,以“带走所有这些垃圾”。