JustArchi, uno sviluppatore di ROM attivo su XDA, ha scoperto un piccolo trucco che potrebbe rendere le ROM molto più veloci rispetto a quanto sono ora. Si parla di un fattore di sei volte, decisamente non trascurabile! Il segreto starebbe nei flag di compilazione delle ROM.

Cosa significa questo? Una ROM viene sempre compilata prima di poter essere utilizzabile sullo smartphone o sul tablet; questo significa che viene tradotta da un linguaggio comprensibile all’uomo (tipicamente il C/C++) in un linguaggio comprensibile alla macchina (il cosiddetto “linguaggio macchina”, per l’appunto) fatto di zeri e di uni per creare i file oggetto o eseguibili insieme alle librerie e a tutte le altre componenti di una ROM.

Il processo di compilazione può essere alterato dai cosiddetti flag, ovvero da delle opzioni tramite le quali è possibile dare dei comandi precisi al compilatore (il programma che traduce in linguaggio macchina) per influenzare il suo comportamento.

In questo caso, JustArchi ha scoperto che cambiare i flag di compilazione normalmente utilizzati porta ad un drastico aumento delle performance. Questo è dovuto al fatto che esistono tre flag di compilazione per l’ottimizzazione:

  • -Os: il flag più conservativo riguardo le dimensioni, premia le dimensioni del file oggetto più dell’ottimizzazione e della velocità;
  • -O2: più veloce di Os, O2 è tipicamente impiegato per compilare il kernel e premia l’ottimizzazione rispetto alla dimensione finale del file oggetto;
  • -O3: il più veloce di tutti, aumenta lo spazio occupato dai file compilati.

Esiste anche -Ofast, che però non può essere utilizzato perché non rispetta gli standard IEEE e non può quindi essere utilizzato in Android per problemi di compatibilità (ad esempio con SQLite).

In alcune ROM il kernel è compilato con flag O2, mentre buona parte del resto del sistema viene compilata con flag Os. Il kernel costituisce circa il 10% di Android, dunque va da sé che i miglioramenti possono essere modesti.

Perché però si compila ancora con flag Os anziché utilizzare O2 od O3? La risposta sta nelle dimensioni. Quando Android è stato pensato e successivamente lanciato, gli smartphone avevano pochi MB di memoria RAM e pochi di più di memoria interna. Mantenere le dimensioni contenute era quindi un obbligo dettato da esigenze stringenti; ora che i dispositivi hanno 16GB di memoria interna e uno o due GB di memoria RAM, il problema non si sente nemmeno più.

La differenza tra O2 e O3 è di pochi MB sull’intera ROM e di circa 7.5KB in più per ogni file compilato con O3. Una quantità decisamente risibile anche sugli smartphone di fascia più bassa.

JustArchi ha quindi effettuato un po’ di prove per verificare che effettivamente ci fosse un miglioramento di prestazioni e pare che ci sia un deciso aumento. Alcuni piccoli benchmark di compilazione su Android premiano decisamente O2 e ancora di più O3.

Lo sviluppatore ha deciso di sottoporre agli utenti di XDA due ROM (quasi) perfettamente identiche chiamate Mysterious Build 1 e Mysterious Build 2 invitando a provarle entrambe ed a riportare la propria esperienza. La numero 1 è stata compilata con O3, la seconda con Os. Gli utenti non sapevano di questa differenza, eppure 9 su 10 hanno affermato che la prima è più veloce.

Anche se servono ancora prove su prove prima di poter dire che effettivamente il flag O3 sia una sorta di panacea per migliorare le prestazioni, indubbiamente questo è un sentiero percorribile che potrebbe portare a migliori prestazioni per i nostri dispositivi in maniera totalmente gratuita.

Via