Google Chrome è uno dei browser più apprezzati e utilizzati al mondo, protagonista come browser predefinito su moltissimi smartphone Android e utilizzato quotidianamente da tantissimi utenti anche su altre tipologie di dispositivi.

Il team di sviluppo ha recentemente raccontato un’esperienza riscontrata nello sviluppo e utilizzo del browser, basato sul progetto open source Chromium, per Android e iOS, scoprendo una “problematica” nella versione per il sistema operativo del robottino verde e facendo una corposa analisi, costellata da tanti passi indietro e un lungo processo di ottimizzazione, culminata con la risoluzione del problema.

Google Chrome ha migliorato l’esperienza di scrolling su Android

Tramite un post ufficiale sul blog di Chromium, progetto open source sul quale è basato Google Chrome, il team di sviluppo ha raccontato di avere recentemente migliorato l’esperienza di scorrimento sul browser nella sua versione per Android, spiegando il processo seguito per arrivare al risultato.

L’obiettivo era semplice: rendere l’interazione con il browser targato Google fluida e reattiva su tutti i dispositivi mobili, anche sui dispositivi pieghevoli. Per raggiungere questo risultato, sono stati affrontati i problemi di ritardo riscontrati su Chrome per Android rispetto a Chrome per iOS.

Durante il confronto tra le due piattaforme, è emerso che lo scorrimento su Chrome per iOS era fluido e coerente, mentre su Android non seguiva il dito con la stessa precisione.

Chromium The Fast and the Curious

Le indagini sui dati in input e output

Per cercare di venire a capo del problema, il team di sviluppo ha effettuato un’analisi delle metriche da cui è emerso che, spesso, si ricevevano input a una velocità incoerente su Google Chrome per Android.

Poiché la frequenza degli input era maggiore rispetto alla frequenza dei fotogrammi del display, di solito veniva generato almeno un fotogramma per ogni input ricevuto: questi fotogrammi andavano a causare uno spostamento incoerente del contenuto sullo schermo durante lo scorrimento a una velocità fissa.

Il problema legato alla frequenza di input diversa rispetto alla frequenza dei fotogrammi dello schermo era già stato affrontato in passato dal team di sviluppo.

Internamente, per metterci una pezza, viene utilizzato il “ricampionamento dell’input”, utile per prevedere o estrapolare la posizione del dito in un punto coerente rispetto al fotogramma che deve essere prodotto: questo dovrebbe garantire che ogni fotogramma rappresenti una quantità di tempo costante e consentire uno scorrimento fluido, indipendentemente dal rumore presente negli eventi di input.

A corredo di questo discorso, il team di sviluppo ha fornito un grafico all’interno del quale i punti blu rappresentano gli eventi di input reali, mentre i punti verdi sono gli eventi di input ricampionati. Le differenze di scorrimento risultanti si manifestano quando vengono utilizzati, per sincronizzare lo scorrimento, gli eventi di input reali anziché il ricampionamento.

Analisi di Chromium per Google Chrome

Le frazioni di secondo fanno la differenza

Nonostante vi fosse già in atto la pratica del ricampionamento, tuttavia, la problematica continuava a presentarsi con frequenza su Google Chrome per Android mentre non affliggeva i dispositivi iOS.

Il problema, di base, è che nel panorama Android vi sono smartphone di ogni fascia e livello, sia dal punto di vista delle pure prestazioni che dal punto di vista del display messo a disposizione dell’utente (che può essere a 60 Hz, a 90 Hz, a 120 Hz, a 144 Hz e via dicendo ma anche con frequenza variabile): era necessario trovare una quadra.

Il ricampionamento dell’input è stato introdotto in Chrome e Android nel 2019 per affrontare il problema legato ai dispositivi con frequenze di aggiornamento dello schermo diverse tra loro; allora, il team di sviluppo arrivò alla conclusione che il ricampionamento di tipo lineare fosse sufficiente per i principali casi d’uso.

Ciò, tuttavia, non risolveva il problema dello scorrimento lento su Google Chrome, che utilizza l’input senza buffer per motivi storici e requisiti delle specifiche web. Poiché i dispositivi hanno iniziato a utilizzare frequenze di campionamento che non si adattavano all’input, Chrome ha dovuto implementare una sua personale versione del ricampionamento che differiva da quella di Android in due aspetti fondamentali: l’uso di timestamp con diverse precisioni (millisecondi, quando servirebbe precisione nell’ordine dei nanosecondi) e il modo in cui venivano selezionati gli eventi di input per il ricampionamento. Queste differenze hanno portato a problemi di retrocompatibilità.

Per risolvere anche questi problemi, sono stati sperimentati diversi algoritmi di ricampionamento utilizzando l’automazione e la valutazione delle curve di spostamento dello schermo. Dopo una fase di messa a punto si è optato per l’implementazione di una versione particolare del “1€ filter” (utilizzato per il filtraggio del rumore, per i più curiosi qua sono presenti maggiori informazioni) che ha migliorato notevolmente l’esperienza di scorrimento su Chrome, permettendo uno scorrimento fluido e impedendo i disturbi causati dagli eventi di input incoerenti.

La novità debutterà con la versione 116 di Google Chrome per Android

Il team di sviluppo di Chromium ha sviluppato nuove metriche per migliorare ulteriormente le prestazioni del browser in futuro.

Intanto, questa novità, principalmente legata quindi all’introduzione del “1€ filter” grazie al quale è stato ridotto del 50% questo scorrimento lento o non coerente, sarà implementata all’interno di Google Chrome con la versione 116 dell’app per Android. Per aggiornare l’app (per ora alla versione 115 in forma “stabile”), vi basterà raggiungere la pagina dedicata sul Google Play Store (tramite il badge sottostante).

In conclusione, segnaliamo che con Android 14 debutterà l’API nanosecond che sarà pubblica (nell’SDK) in modo che Google Chrome e tutte le altre app che sfruttano l’input senza buffer possano richiamarla, risultando ancora più fluide (e coerenti) per l’utente durante lo scorrimento.

Potrebbero interessarti anche: Google Chrome cambia (di nuovo, ma in meglio) la frequenza degli aggiornamenti e Ecco come Google Chrome migliorerà la Nuova scheda su Android