Google optimalizoval Chrome. Ušetřil paměť, zkrátil odezvu, snížil počet pádů | logo: Google / koláž: Petr Urban / Živě.cz

logo: Google / koláž: Petr Urban / Živě.cz

Google optimalizoval Chrome. Ušetřil paměť, zkrátil odezvu, snížil počet pádů

Google ukázal, jak lze šetřit systémovými prostředky. Vývojový tým jeho prohlížeče se zaměřil na situace, kdy je okno zakryté, tedy z uživatelského pohledu není vidět. Podařilo se zrychlit spuštění Chromu o 8,5–25,8 %, zatížení videopaměti snížilo o 3,1 %. Prvotní odezva, kdy můžete začít interagovat s (načítanou) stránkou, se zkrátila o 3 %.

Dále se o 6,7 % rychleji se vykreslí první části obsahu a počet pádů při vykreslování klesl o 4,5 %. Tyto změny nabídl Chrome 86 z loňského října a uvedená data pocházející z uživatelských instalací potvrzují, že šel vývoj správným směrem.

Vývojový tým omezil aktivitu stránek na pozadí, mj. nejsou vykreslovány. Dále zjistil, že 20 % oken patřících Chromu zcela zakrývají jiná okna. Zde se zrodila myšlenka, že by mělo být výhodné, když se omezování aplikuje rovněž na celá okna překrytá jinými prvky. Právě to se podařilo díky třem rokům prací na projektu Native Window Occlusion.

Detekce zahalení

Prohlížeč se ovšem musel naučit, jak odhalit, že nad ním visí jiné okno, které on sám nevytvořil – Windows takovou informaci programům neposkytují. Omezení nesprávného okna, která reálně viditelné je, by mělo fatální důsledky, protože byste místo stránky hleděli jen na bílou plochu. Situaci komplikují faktory jako více obrazovek, virtuální plochy nebo skrytá okna.

Druhým klíčovým krokem je provedení operace, aby prohlížeč potřebné informace získal. Aby se neprodloužila odezva programu, detekce probíhá v samostatném vlákně. Předem ignoruje minimalizovaná okna, okna na virtuálních plochách označí za překrytá. Dále vypočítá virtuální obdélník obsahující celou zobrazovací plochu, který nic nezakrývá.

Výpočet se opakuje a trojúhelník se nejdříve nachází nad všemi okny a následně se postupně vypočítává pod všemi okny, přičemž některá z nich – např. průsvitná – jsou ignorována. Program pak odečítá plochy oken od prvního neviditelného obdélníku, o kterém ví, že zachycuje nezakrytý prostor.

Patří-li okno Chromu, tak prohlížeč kontroluje, zda jeho část překrývá nezakrytou plochu virtuálního obdélníku. Pokud ji nepřekrývá, znamená to, že je okno zakryté, takže je možné jej omezit a šetřit tak systémové prostředky. Proces postupně prověří všechna okna prohlížeče.

Kdy provádět detekci viditelnosti oken?

Neustále propočítávání viditelnosti by znamenalo plýtvání. V tomto ohledu je situace jednodušší, protože Windows poskytuje informace o manipulaci s okny, takže Chrome může propočet provést pouze ve chvíli, když se změní stav oken na ploše.

Obráceně by stejně tak nemělo smysl překročit určitou hranici ve zjišťování stavu. Google proto omezil přepočítávání stavu tak, aby k němu nedocházelo častěji než jednou za 16 milisekund. To je doba zobrazení jednoho snímku při 60 fps.

Úspora paměti nebo snížení počtu pádů patří k očekávatelným výsledkům. Méně srozumitelně působí zrychlené spouštění. Je to opět dané tím, že pokud Chrome obnovuje více oken v maximalizovaném stavu, nejméně jedno bude pravděpodobně zakryté. Díky popsanému nastavení už tedy prohlížeč věnuje plnou pozornost tomu, aby zobrazil okno v popředí.

Zdroje: Chromium Blog

Určitě si přečtěte

Články odjinud