Dzięki przejściu Microsoftu na Chromium użytkownicy mogą teraz korzystać z ulepszonych funkcjonalności zarówno w Google Chrome, jak i Microsoft Edge. Integracja doprowadziła do znaczących udoskonaleń, w tym płynniejszego przewijania, zoptymalizowanej obsługi czcionek i lepszej wydajności baterii, szczególnie w systemie Windows 11. Teraz Microsoft skupia się na udoskonalaniu możliwości trybu ciemnego obok Menedżera okien pulpitu (DWM.exe).
Jednak powszechny problem nadal występuje: podczas korzystania z Chrome w trybie ciemnym w systemie Windows 10 lub Windows 11 użytkownicy często napotykają krótki biały błysk podczas otwierania nowego okna. To niepożądane zjawisko uwypukla problem, w którym ani przeglądarka, ani system operacyjny nie wiedzą, jak prawidłowo zarządzać początkowym renderowaniem, co prowadzi do nieestetycznego ekranu tymczasowego.
Jest to również zauważalne podczas uruchamiania Chrome i Edge w ustawieniach ciemnego motywu systemu operacyjnego. Podczas gdy zarówno Google, jak i Microsoft wcześniej zajęli się aspektami integracji ciemnego motywu, wyzwanie pozostaje szczególnie widoczne podczas przejścia między oknami przeglądarki. Podobne problemy z Flashem odnotowano wcześniej w Eksploratorze plików systemu Windows, ale zostały one rozwiązane w aktualizacji Windows 11 23H2.
Rozwiązywanie problemu białego błysku w trybie ciemnym Chromium
Na podstawie niedawnego zatwierdzenia kodu Chromium przeanalizowanego przez Windows Latest, wydaje się, że problem wynika z braku niezbędnej obsługi nowo utworzonych okien Chrome w systemie Windows. Podczas uruchamiania nowego okna system Windows 11 domyślnie ustawia białe tło, pozostając widocznym, dopóki Chrome lub Edge nie przejmą kontroli.
W tym kontekście, gdy Windows 11 działa w trybie ciemnym, zarządzanie nowymi wyświetlaczami okien stanowi problem, ponieważ Windows początkowo obsługuje fazę ładowania, dopóki odpowiednie aplikacje nie ustalą swojego renderowania. Niestety, na tym etapie Windows nie rozpoznaje skutecznie zarządzania motywem ciemnym.
Chris Davis, programista Microsoftu, wprowadził obejście problemu białego błysku poprzez zastosowanie techniki maskowania. Polega ona na ukryciu okna do czasu, aż Chrome lub Edge będzie mógł wyrenderować odpowiednie ciemne tło. Chociaż jest to raczej łatka niż ostateczne rozwiązanie problemu DWM.exe, wydaje się, że jest to najbardziej wykonalne rozwiązanie obecnie dostępne.
Jak wyjaśnia Chris Davis, „Gdy okno jest tworzone po raz pierwszy, DWM użyje domyślnego białego koloru tła dla okna. Może to spowodować biały błysk podczas pierwszego wyświetlania okna w trybie ciemnym. Aby tego uniknąć, maskujemy okno przed jego pierwszym wyświetleniem i wymuszamy malowanie zamierzonego koloru tła przed odmaskowaniem”.
Dalsza analiza commitów Chromium wskazuje na modyfikacje w ui/views/win/hwnd_message_handler.cc
.
W stanie zamaskowanym kod wykorzystuje wywołania GDI, aby wypełnić obszar klienta ciemnym kolorem. Po osiągnięciu pożądanego ciemnego odcienia Microsoft ustawia się DWMWA_CLOAK
na FALSE
, odsłaniając okno z oczekiwanym ciemnym obrazem zamiast nagłego białego błysku.
Chociaż niektórzy autorzy wyrazili obawy dotyczące potencjalnych sytuacji wyścigu — w których procesor GPU może renderować zawartość strony podczas aktualizacji okna na ciemnym tle — testy firmy Microsoft nie wykazały takich problemów, co sugeruje, że po wdrożeniu poprawki przejście będzie płynne.
Patrząc w przyszłość, jest prawdopodobne, że Google i Microsoft udoskonalą sposób, w jaki Chromium zarządza oknami najwyższego poziomu. Przyszłe rozwiązania mogą obejmować implementację metod takich jak WS_EX_NOREDIRECTIONBITMAP
lub nowsze interfejsy API systemu Windows (np. DWM_SYSTEMBACKDROP_TYPE
), aby całkowicie zapobiec białemu błyskowi.
Na razie jednak wprowadzona przez Davisa metoda maskowania zostanie wykorzystana, eliminując efekt białego błysku zarówno w systemie Windows 10, jak i Windows 11. Można się spodziewać, że te usprawnienia zostaną wkrótce udostępnione użytkownikom przeglądarek Chrome i Edge.
Dodatkowe informacje
1. Jaka jest przyczyna problemu z białym miganiem w przeglądarkach Chrome i Edge?
Problem z białym miganiem występuje, ponieważ system Windows domyślnie ustawia białe tło za każdym razem, gdy tworzone jest nowe okno, co kontrastuje z ustawieniami motywu ciemnego przeglądarki.
2. Jakie są implikacje metody maskowania zaproponowanej przez Microsoft?
Metoda maskowania jest tymczasowym obejściem, które ukrywa okno, dopóki ciemne tło nie będzie mogło być prawidłowo wyświetlane. Zapobiega to pojawianiu się białego błysku podczas przejść między oknami.
3. Czy przyszłe aktualizacje całkowicie wyeliminują biały błysk?
Chociaż obecna metoda maskowania rozwiązuje problem białego błysku, przyszłe aktualizacje mogą obejmować bardziej zintegrowane rozwiązania w przeglądarce Chromium i systemie Windows, co ostatecznie pozwoli na skuteczniejsze rozwiązanie podstawowych problemów.
Dodaj komentarz