Windows向けGoogle ChromeのGPUとCanvasのバグ

先日、私は珍しくて面白い仕事に取り組んでいました。 マネージャーが特定のページでGoogle Chromeに「グーフィー」メッセージを常に表示していることがわかりました。 このページは非常に飽和しており、フォトギャラリー、地図、パノラマなどの非常に重いコンポーネントが含まれているとすぐに言います。 どうにかしてこのバグを再現することはできませんでした。それを見つけて無力化するために何が行われたかについてお話します。



まず、同じ「Aw」を得るために行動する必要があるシーケンスを見つけました。 このため、ページに移動してから更新する(または後で戻る)必要がありました。 すべて、Windowsの下の開いているChromeタブはすぐに死にました。



JSFiddleで小さな孤立した例を作成しました 。 このリンクを開き、パノラマ画像が表示されたら、ページを更新します。 WindowsとGoogle Chrome(46.0.2490.86)が必要であることを思い出させてください。



その後、問題がWindowsでのみ明らかになることが明らかになりました。 私はMacを使用していますが、あらゆる場面でIE仮想マシンを使用しています 。 しかし、仮想マシン上でも、この問題はまったく発生しませんでした。 ちなみに、これは、仮想マシンが必ずしも実際のマシンを実際のハードウェアに完全に置き換えることができないという事実の非常に良い例です。



誰かがそのような問題を抱えているかどうかを確認するためにグーグルを始めました。 しかし最終的に、彼は「Opanku」を表示したときに正確に何が起こるかをよりよく理解するために、Google Chromeでログモードを有効にする方法についてグーグルで調べました。 どうやってやるの?



次のフラグを使用してGoogle Chromeを実行する必要があります。

--enable-logging --v=1
      
      





そして、ブラウザがクラッシュした後、 ホームディレクトリchrome_debug.logログを見つけます



彼らはすべてWindowsマシンでそれを行い、ログを調べ始めました。

 [7924:5320:1202/135210:VERBOSE1:policy_loader_win.cc(441)] Reading policy from the registry is enabled. [7924:5320:1202/135210:VERBOSE1:pref_proxy_config_tracker_impl.cc(216)] 03885C38: set chrome proxy config service to 00A097F8 [7924:5320:1202/135210:VERBOSE1:pref_proxy_config_tracker_impl.cc(354)] 03885C38: Done pushing proxy to UpdateProxyConfig [7924:6044:1202/135210:VERBOSE1:multi_log_ct_verifier.cc(67)] Adding CT log: Google 'Pilot' log [7924:6044:1202/135210:VERBOSE1:multi_log_ct_verifier.cc(67)] Adding CT log: Google 'Aviator' log [7924:6044:1202/135210:VERBOSE1:multi_log_ct_verifier.cc(67)] Adding CT log: DigiCert Log Server [7924:6044:1202/135210:VERBOSE1:multi_log_ct_verifier.cc(67)] Adding CT log: Google 'Rocketeer' log [7924:6044:1202/135210:VERBOSE1:multi_log_ct_verifier.cc(67)] Adding CT log: Certly.IO log [7924:6044:1202/135210:VERBOSE1:multi_log_ct_verifier.cc(67)] Adding CT log: Izenpe log [7924:6044:1202/135210:VERBOSE1:multi_log_ct_verifier.cc(67)] Adding CT log: Symantec log [7924:6044:1202/135210:ERROR:cache_util_win.cc(20)] Unable to move the cache: 5 [7924:6044:1202/135210:ERROR:cache_util.cc(132)] Unable to move cache folder C:\Users\User32\AppData\Local\Google\Chrome\User Data\ShaderCache\GPUCache to C:\Users\User32\AppData\Local\Google\Chrome\User Data\ShaderCache\old_GPUCache_000 [7924:6044:1202/135210:ERROR:cache_creator.cc(132)] Unable to create cache [7924:6044:1202/135210:ERROR:shader_disk_cache.cc(588)] Shader Cache Creation failed: -2
      
      





もちろん、最後の4行に注目されました。 何らかの未知の理由で、ブラウザがGPUCacheディレクトリをコピーできなかったことがわかります。 ChromeがGPUとそのキャッシュでどのように機能するかを正確に知っているとは言えませんが、最近WindowsとGPUの組み合わせが私の口を埋め始めました。



次に、地図とパノラマを交互に無効にすることにより、その理由が正確にストリートビューにあることを確認することができました。 これについてChromiumで問題を作成しました。



合計ではなく



私が作成したチケットからわかるように、問題は安定バージョン47で修正され、Chromeはすでに更新されています。 しかし、とにかく、私はこの投稿を書くことにしました。これは、少なくとも問題を解決するためのアプローチの観点からは、開発者に役立つでしょう。 コンポーネントを交互に無効にすることで問題を解決することができたと言う人々に同意します。 一般的に、これは起こりましたが、問題がプログラマーの間違いなのか特定のエコシステムのバグなのかを見つけることも、同じコンポーネントのさらなるサポートの観点から重要です。



All Articles