
O código Chromium é muito extenso; todos encontrarão algo a seu gosto. E agora eu decidi falar sobre o meu arquivo favorito (você tem um?). Este arquivo reflete tudo: dor, decepção, esperança, perseverança, força de vontade, responsabilidade pelas falhas de outras pessoas e auto-sacrifício. Às vezes, leio
e choro e entendo o que uma grande parte do iceberg está escondida debaixo d'água. Este, em geral, nem sequer é um arquivo de código. Este é um arquivo com uma configuração que descreve os erros da placa de vídeo que o Chromium precisa ignorar para exibir suas páginas em diferentes plataformas. Aqui está:
https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.jsonDo que estamos falando? Vamos lembrar como o navegador funciona: você digita algum endereço na barra de endereços, o navegador carrega o conteúdo e o exibe. O bom artigo
"O que acontece quando você digita google.com no seu navegador e pressiona enter?" Fala um pouco mais sobre isso
. (e ao mesmo tempo
várias traduções dele em Habré). Um dos últimos pontos é mencionado, eles dizem: “e agora que tudo está pronto, desenhamos uma imagem na tela”. Sim, pegue e desenhe assim, é claro.
Para começar, nas linguagens de programação, por algum motivo, não existe a função "pegar e desenhar isso na tela" pronta para uso. Os idiomas e suas bibliotecas padrão não estão interessados em tais insignificâncias. Consequentemente, o código universal de plataforma cruzada para desenho não é tão fácil de escrever. Todos os tipos de jogos AAA divertidos contornam essa restrição de maneira bem direta: “Você deve ter um console ou um SO com uma placa de vídeo por US $ 800, e de alguma forma funcionará. Provavelmente. " Obrigado pela dica! Mas o navegador não é um jogo. O navegador deve funcionar sempre e em qualquer lugar. O usuário até do PC mais morto, comprado há 10 anos (e mesmo assim - em uma venda) não espera jogar o último Witcher, mas ficará genuinamente indignado se não conseguir abrir o correio no navegador ou pesquisar algo no Google. Por outro lado, o jogador que doou um rim para uma placa de vídeo desejará assistir a um
vídeo de 8k no navegador
, girar modelos 3D e ainda pode rolar suavemente pela fita do Facebook.
Tudo isso faz com que os desenvolvedores do Chromium literalmente explodam: por um lado, eles ainda suportam o desenho com tecnologias antigas, como GDI e DirectX9, para trabalhar em equipamentos desatualizados, mas, por outro lado, eles viram suporte para as versões mais recentes do OpenGL, DirectX11 (ou já tem 12 anos). Vulkan - que permite implantar em dispositivos modernos completos (incluindo dispositivos móveis).
Mas tudo isso teria sido metade do problema se todo esse zoológico funcionasse da maneira que deveria, de acordo com a especificação. O que não acontece de todo. O hardware real e seus drivers quebram tudo: promessas de marketing para os clientes, especificações técnicas, padrões geralmente aceitos, testes de certificação, compatibilidade de SO, planos de atualização etc. Mas, além do hardware real e de seus drivers, não temos mais nada. Portanto, você tem que trabalhar no que é. É isso que o arquivo
gpu_driver_bug_list.json mencionado acima
informa .
A propósito, até que ponto o navegador está tentando "sobreviver a todo custo" merece respeito. Portanto, com problemas não críticos, por exemplo, com o DirectX11, serão feitas tentativas para desativar determinadas partes de sua funcionalidade, sacrificando o desempenho, mas mantendo a operabilidade. Para erros mais sérios - o DirectX11 será desativado e o navegador mudará para o DirectX9, onde também (se necessário) os componentes problemáticos serão "cortados e jogados fora". Bem, com uma falha completa do sistema DirectX, haverá uma mudança para o GDI - que afetará o consumo do processador e da RAM, mas ainda manterá o desempenho de páginas comuns (sem vídeo pesado ou 3D) em um nível em que o usuário provavelmente nem entenderá que algo está errado. Onde outros programas já solicitarem que você atualize o driver ou altere a placa de vídeo - o Chromium simplesmente continuará funcionando. O de tirar o fôlego.
Vamos dar uma olhada no conteúdo do arquivo que mencionei. O número de entradas individuais: 215 peças. 215 vezes quando o desenvolvedor de ferro mentiu, era muito preguiçoso, era estúpido ou ganancioso. 215 vezes tive que procurar a configuração correta de hardware e software para reproduzir o problema e encontrar sua solução. É difícil dizer quantas vezes foi decidido não corrigir o problema - mas como há muitas pessoas ao nosso redor com ferro velho e, de alguma forma, poucas que têm "O Google não abre no Chrome", podemos assumir que houve muito poucos casos assim.
A seguinte observação interessante é a distribuição pelo sistema operacional: 89 - android, 44 - macosx, 34 - linux, 26 - win, 8 - chromeos. As conclusões daqui podem ser feitas diferentes. Por um lado, é óbvio que o Android é uma plataforma essencial para o Google e enormes fundos foram destruídos para corrigir bugs. Por outro lado, não está claro por que eles foram invadidos por correções na base de código do Chromium, e não por drivers ou pelo sistema operacional (afinal, o Google tem um nível de controle bastante alto em todos os estágios). Correções beneficiariam todo o software no Android, e aqui apenas o Chromeium. Provavelmente, o problema está na interação dos departamentos, quando é mais fácil para o programador Chromium corrigir o problema em seu código aqui e agora do que escalá-lo em 3-4 níveis, depois para o lado e depois 3-4. Há menos pessoas interessadas nisso em qualquer empresa do que seria necessário.
Fiquei muito surpreso que havia quase duas vezes mais erros de renderização no Mac Os do que no Windows. Pareceu-me que tudo lá é muito limitado em hardware e lambido por drivers. Mas o Zoológico do Windows é duas vezes mais tenaz e estável. Diretamente "Catedral e Bazar" nas ilustrações. Ou os desenvolvedores do Google estão apenas testando o código apenas em papoulas?
A divisão de fornecedores também é interessante: Nvidia - 22, AMD / ATI - 17, Intel - 30. Não acho que o software ou o hardware da Intel seja diretamente pior - pelo contrário, a produção em massa afeta. Todo mundo que não compra especificamente um “computador para jogos” provavelmente comprará algo com uma placa de vídeo Intel integrada. Um bug que ocorre com 0,001% dos usuários vive na placa de vídeo da NVidia ou da ATI por anos, mas leva a muitos usuários irritados em fóruns e redes sociais no caso da Intel. "Grande poder implica grande responsabilidade."
A separação entre os erros do OpenGL e do DirectX parece engraçada: o OpenGL tem 16 anos, o DirectX é 0. Mas isso não ocorre porque o OpenGL é tão ruim e o DirectX é tão bom. O problema é que todos os bugs da categoria "vitória" (são 26 peças) são na verdade bugs do DirectX (bem, ok, não todos, mas quase todos).
Mas tudo bem, pare aqui de culpar todos de uma maneira generalizada. Vamos ser pessoais
, e lá, antes da briga, veja, não muito longe !
Aqui, por exemplo,
entrada 211 , referindo-se ao
erro 672380 . Para as pessoas, a função de menos e a tangente do arco em alguns hardwares da Intel e NVidia deixaram de funcionar no código.
Unário menos , droga e
trigonometria básica ! Parece, em que mais acreditar? Mas não, eles consertaram e funciona.
Ou aqui estão os registros de "cores exibidas incorretamente", como
nº 185 ,
219 ,
220 e outras. O programador fez tudo certo, todas as funções funcionaram e retornaram "sucesso", mas na tela, como resultado, um pixel da cor errada é exibido. Ah, sim - apenas nessas placas de vídeo e nessas versões de driver. A propósito, uma pergunta para os fãs da teoria de que testes podem cobrir tudo: como você cobriria isso com testes?
Aqui está outra coisa interessante,
nº 224 : "A decodificação de VPx não é suportada muito antes da atualização dos criadores do Windows 10". Bem, isto é, o sistema operacional saiu, todos anunciaram que ela tinha uma aceleração na decodificação de tal e tal vídeo. Mas, na prática, verificou-se que ela existe, mas que seria melhor se não existisse. E é melhor desligá-lo. Como resultado, o desenvolvedor do sistema operacional vende outro bilhão de sistemas operacionais pagos e o desenvolvedor do navegador gratuito coleta reclamações de que o vídeo não é reproduzido da maneira que gostaríamos, embora pareça que o hardware e o sistema operacional deveriam permitir! “Onde estão meus 60 qps e por que seu navegador consumiu 4 GB de RAM” - uma conversa familiar, certo?
E imediatamente ela é alcançada pelo número de registro
225 : "A decodificação de VPx é muito lenta na Intel Broadwell, Skylake e CherryView". Desenvolvemos, o que significa que desenvolvemos novas gerações de processadores, um após o outro, anunciados, vendidos. Mas os problemas do usuário final são os problemas do usuário final, com quem eles se preocupam. Deixem os candidatos de alguma forma esmagá-lo com uma muleta, e então vamos consertá-lo.
Uma música separada é o chamado "Switchable graphics", com o qual os vendedores das lojas participam ativamente. Bem, eles dizem, que bom laptop com duas placas de vídeo - tudo será rápido em jogos, mas em programas de escritório (como um navegador) será muito eficiente em termos de energia, funcionará por dez horas! E agora olhamos para a amarga verdade da vida: no Windows, isso levará a uma completa rejeição do DirectX11 (registro
100 ) e nas papoulas ele trava com tanta frequência que é melhor desligar completamente uma placa não discreta (registro
228 ).
Ou aqui está o
número 242 : "O código produzido pela inicialização da variável local geralmente aciona falhas no driver Marshmallow Adreno". A solução também está correta: "dont_initialize_uninitialized_locals". Bem, que tipo de pessoa normal concordaria em escrever algo sob a plataforma, onde variáveis locais não podem ser inicializadas durante a declaração, porque o driver falha com isso? Mas no código de um produto tão grande como o Chromium - você precisa conviver com isso.
No. 26 : "Desative o uso do Direct3D 11 no Windows Vista." O DirectX10 foi um dos principais recursos do Vista durante o lançamento e, depois de algum tempo, o DirectX11 apareceu, ainda me lembro das caixas de placas de vídeo da época com inscrições orgulhosas “compatíveis com o DirectX11”. E para muitos, esse geralmente era o único motivo para mudar de um XP familiar e estável. Anos se passaram - e agora o suporte ao DirectX11 (produto da Microsoft) no Windows Vista (produto da Microsoft) está classificado como "não suportado". Reconhecimento direto de mérito!
Ok, estou cansado de escolher uma em particular, leia o resto você mesmo - as razões para erros e muletas implementadas estão bem descritas lá, além de haver links para o bugtracker (o campo "cr_bugs").
Moral
Em primeiro lugar, todo mundo mente. Em segundo lugar, mesmo em condições em que todos mentem, ainda é possível escrever software de alta qualidade. Terceiro, da próxima vez que alguém lhe disser como a web moderna obteve sucesso graças ao “poder do HTML, CSS e da bela linguagem Javascript” - mostre a ele este artigo e pergunte como ele funcionaria e para quem sem esse trabalho heróico de pessoas invisíveis, era necessário "decolar com todo esse lixo".