Webブラウザ「Google Chrome」における性能を改善する技術の一つに「ネイティブウィンドウオクルージョン」がある。これはウィンドウの重なりを追跡し、他のウィンドウの下に隠れて実際には表示されていないウィンドウについては消費リソースを抑えて最適化するというものだ。Chrome OSとmacOSに先行して導入され、2020年10月にリリースされたM86においてWindows版にも搭載された。

Chromium Blogの2021年12月9日の記事「Chromium Blog: Chrome on Windows performance improvements and the journey of Native Window Occlusion」では、Windows版のChromeにおけるネイティブウィンドウオクルージョンの実現に対する取り組みについて解説している。

Chromeには、アクティブでないタブ(バックグラウンドタブ)については、JavaScriptの実行を抑制したりレンダリングを行わなかったりするなどして、CPUやGPU、メモリなどのリソース消費を削減する「タブスロットリング」という機能が搭載されている。ネイティブウィンドウオクルージョンはこのアイデアをウィンドウにも広げたもので、他のウィンドウの後ろに完全に隠れているウィンドウについて、バックグラウンドタブと同様にリソース消費を削減することを目指した機能になる。

しかしWindowsの場合、ウィンドウが他のウィンドウで完全に覆われているかどうかを直接把握する方法が提供されていないため、Chrome側でそれを独自に検出しなければならないという問題があった。Chromium Blogの記事では、そのための具体的な方法が紹介されている。

主なポイントは、ウィンドウが完全に隠れているかどうかを判別する「オクルージョン計算」の方法と、どのタイミングでオクルージョン計算を実施するかを決定するかの2つだという。

オクルージョン計算の難しさは、マルチモニターや仮想デスクトップ、透過ウィンドウ、クロークされたウィンドウなどの要素を考慮しなければならない点にあるという。実際に表示されているウィンドウを、バックグラウンドウィンドウだと誤って判断した場合、コンテンツが表示されなくなってしまう。さらに、オクルージョンの計算中に応答性を低下させない配慮も必要となる。これらの問題をクリアしながらオクルージョン計算を実施する具体的な手続きが解説されている。

2つ目のポイントであるオクルージョン計算を実施するタイミングについては、計算用のスレッドがウィンドウ操作に関するさまざまなシステムイベントを追跡することで実現されている。ただし、短時間で何度も計算が実行されないように、16ミリ秒ごとに1回以上の計算をしないよう調整されているという。実際には、直接的なウィンドウ操作だけでなく、画面ロックのオン/オフやモニターのオン/オフ、マウス操作やカーソル点滅など、ウィンドウ描画に関わるさまざまなシステムイベントがあるため、どのイベントがオクルージョン計算のトリガーになるかが緻密に選択されているとのことだ。

  • オクルージョン計算のタイミングを決める仕組みのイメージ(出典: Chromium Blog)

    オクルージョン計算のタイミングを決める仕組みのイメージ(出典: Chromium Blog)

ネイティブウィンドウオクルージョンを導入した結果、Windows版Chromeでは起動速度の8.5%〜25.8%高速化、GPUメモリ使用量の3.1%削減、全体的に描画されるレンダラーフレームの20.4%削減など、大幅なパフォーマンス向上を実現したとのことだ。