Uno degli obiettivi che Google ha fissato con Android 4.0 Ice Cream Sandwich è porre una maggiore attenzione all’interfaccia utente: il primo, chiaro segno di questa intenzione è stato l’introduzione del tema Holo, assieme ad un look and feel generale molto più omogeneo e curato. Con Android 4.1 Jelly Bean, Google fa il passo successivo e promette di portare un’esperienza fluida e omogenea grazie a Project Butter. Tale nome, che suona strano pensando alla traduzione letterale “progetto burro”, è dovuto al fatto che in inglese si dice “smooth as butter” (“liscio come il burro”) per indicare un’eccezionale fluidità – finora le interfacce di iOS e Windows Phone 7 sono state le uniche a ricevere questo tipo di commento per la loro fluidità eccezionale. Se volessimo dare una traduzione meno letterale, “smooth as butter” potrebbe essere “liscio come l’olio”, intendendo con ciò che le animazioni scorrono molto fluidamente e “liscie come l’olio” (per l’appunto) in contrapposizione ad animazioni con lag, scatti e rallentamenti.

Come è possibile, però, velocizzare l’interfaccia di Android e renderla fluida? Durante la presentazione ufficiale Google non ha voluto dare proprio tutti i dettagli, ma ha lasciato intuire molto chiaramente di cosa si tratti. Grazie a Project Butter CPU e GPU lavoreranno in parallelo, invece che in contrasto l’una con l’altra, e questo cambiamento avrà un grande impatto sulle prestazioni sia percepite che reali: l’interfaccia girerà a 60fps su tutti i dispositivi con hardware sufficientemente potente (ovvero, si presume, dal Galaxy S II in poi). Gli elementi grafici passano attraverso il processo di triple buffering, il VSync e l’aumento della reattività del touch per consentire di mantenere sia lo scorrimento che le animazioni fluidi.

Pensiamo al buffering degli elementi grafici come al riempimento di una piscina da giardino, di quelle non interrate. La piscina è il contenitore che devo riempire, ma non ho un tubo da giardinaggio lungo abbastanza per farlo e devo riempire la piscina con dei secchi. Se ho un solo secchio, dovrò aprire il rubinetto per riempire il secchio e poi chiuderlo. Una volta svuotato il secchio, posso nuovamente riempirlo e ripetere l’operazione finchè la piscina è piena. Questo è il single buffering. Se ho due secchi, allora posso riempirne uno mentre svuoto l’altro, in maniera tale da non chiudere mai il rubinetto e avere un apporto costante di acqua alla piscina; questo è il double buffering. Se un’altra persona mi aiuta posso avere 3 secchi, ed in questo caso posso parlare di triple buffering. È molto semplice vedere che un apporto continuo di dati rende più fluida l’esperienza utente, perchè la GPU non deve aspettare che arrivino i pacchetti di dati “a ondate” per elaborarli, ma li elabora in continuazione.


Il secondo metodo per aumentare la fluidità è l’introduzione del VSync. Se la GPU invia l’immagine Y al display mentre questo sta mostrando l’immagine X, si possono verificare problemi di tearing – ovvero, ci sono interferenze e l’immagine appare in generale molto degradata nella qualità. Un modo per evitare questo è costringere la GPU a mandare una nuova immagine solo quando il display può mostrarla senza causare problemi, ovvero sincronizzando l’invio delle immagini alla frequenza di aggiornamento del display. Se il display si aggiorna 60 volte al secondo (60 Hz), allora la GPU dovrà inviare 60 immagini al secondo. In questo modo le immagini sono fluide e continue, senza scatti o lag.

Il terzo metodo prevede un aumento della velocità di risposta del touch, così da ridurre al minimo il tempo che intercorre tra l’input dell’utente e l’elaborazione da parte del dispositivo. La tecnica per ottenere questo risultato prevede che il processore sia operante alla massima frequenza sin dal primo momento in cui l’utente tocca lo schermo, così da poter garantire la risposta più rapida possibile.

Il risultato di tutto questo è una velocità ed una fluidità dell’interfaccia grafica incredibile, come già mostrato in questo video.