由於 Microsoft 轉向 Chromium,用戶現在可以在 Google Chrome 和 Microsoft Edge 中享受增強的功能。此次整合帶來了顯著的增強功能,包括更平滑的滾動、優化的字體處理以及專門針對Windows 11 的更好的電池效率。 ) 的暗模式功能。
然而,一個常見的問題仍然存在:在 Windows 10 或 Windows 11 上以深色模式使用 Chrome 時,使用者在開啟新視窗時經常會遇到短暫的白色閃爍。這種不希望發生的情況凸顯了一個問題,即瀏覽器和作業系統都不知道如何正確管理初始渲染,從而導致出現難看的中間螢幕。
在作業系統的深色主題設定下啟動 Chrome 和 Edge 時,這一點同樣明顯。雖然谷歌和微軟之前都解決了深色主題整合的問題,但在瀏覽器視窗之間的轉換過程中,挑戰仍然特別明顯。先前在 Windows 檔案總管中也發現類似的快閃記憶體問題,但這些問題已在 Windows 11 23H2 更新中解決。
解決 Chromium 暗模式下的白色閃光問題
根據Windows Last 分析的最近的 Chromium 程式碼提交,問題似乎源於 Windows 缺乏新建立的 Chrome 視窗的必要處理。啟動新視窗時,Windows 11 預設為白色背景,在 Chrome 或 Edge 宣告控制權之前保持可見。
在這種情況下,當 Windows 11 在暗模式下執行時,新視窗顯示的管理會出現問題,Windows 最初會處理載入階段,直到各個應用程式建立渲染。可惜的是,現階段Windows並沒有有效地承認黑暗主題管理。
Microsoft 開發人員 Chris Davis 引入了一種解決方法,透過實施隱身技術來減輕白色閃光。這涉及隱藏窗口,直到 Chrome 或 Edge 可以渲染適當的深色背景。雖然這更像是一個補丁,而不是 DWM.exe 問題的最終解決方案,但它似乎是目前可用的最可行的解決方案。
正如 Chris Davis 所解釋的那樣,「首次建立視窗時,DWM 將為視窗使用預設的白色背景顏色。當第一次以深色模式顯示視窗時,這可能會導致白色閃爍。為了避免這種情況,我們在第一次顯示視窗之前將其隱藏起來,並在取消隱藏之前強制繪製預期的背景顏色。
對 Chromium 提交的進一步檢查表明對ui/views/win/hwnd_message_handler.cc
.
在隱藏狀態下,程式碼使用 GDI 呼叫以深色填滿客戶區域。在達到所需的深色色調後,微軟將設定DWMWA_CLOAK
為FALSE
以預期的深色視覺效果而不是突然的白色閃光來揭開視窗。
雖然一些貢獻者對潛在的競爭條件表示擔憂(即當視窗更新為黑暗背景時 GPU 可能會渲染頁面內容),但微軟的測試尚未發現此類問題,這表明一旦部署補丁,就會實現平穩過渡。
展望未來,Google和微軟可能會改進 Chromium 管理頂級視窗的方式。未來的解決方案可能會實施類似WS_EX_NOREDIRECTIONBITMAP
或更新的 Windows API(例如,DWM_SYSTEMBACKDROP_TYPE
)的方法來完全防止白色閃光。
不過,目前將採用 Davis 推出的隱形方法,消除 Windows 10 和 Windows 11 上的白色閃光效果。
額外的見解
1. Chrome和Edge出現白閃問題是什麼原因?
出現白色閃爍問題是因為 Windows 每次建立新視窗時都會預設使用白色背景,這與瀏覽器的深色模式主題設定形成對比。
2. 微軟提出的隱形方法有何影響?
隱藏方法是一種臨時解決方法,可以隱藏窗口,直到可以正確顯示深色背景。這可以防止在視窗轉換期間出現白色閃光。
3. 未來的更新會完全消除白色閃光嗎?
雖然目前的隱藏方法解決了白色閃光問題,但未來的更新可能會在 Chromium 和 Windows 中探索更整合的解決方案,以最終更有效地解決根本問題。
發佈留言