Android Q+ kan använda Vulkan Graphics API för att rendera användargränssnittet

Skia, Googles grafikmotor med öppen källkod, har en Vulkan Graphics API-backend. Denna backend kan användas för att rendera användargränssnittet i Android Q eller senare.

Nästa stora version av Android, Android 9, kommer att släppas nästa månad för flera enheter. Till skillnad från Android Oreo där de viktigaste förbättringarna mestadels låg under huven, erbjuder Android P fler användarvänliga funktioner som det förnyade användargränssnittet, navigeringsgester och Digital Wellbeing samtidigt som du fortsätter arbetet med Project Diskant. Men bakom kulisserna har Google förnyat hur grafikåtergivning fungerar på Android. I Android Oreo började Google testa en OpenGL hårdvaruaccelererad backend till Skia-grafikmotorn som färdigställdes i Android P. Google slutar dock inte där, eftersom företaget planerar att implementera Vulkan backend av Skia-grafikmotorn som kommer att landa i Android Q eller en senare version.

Bevisen för detta kommer från en kommentar inlämnad av en Google-ingenjör på Chromium Gerrit med öppen källkod. Kommentaren hänvisar till en buggrapport om den kommande implementeringen av Vulkan Graphics API för webbläsaren Google Chrome på Android. Kommentaren säger att någon gång i framtiden "kommer det att finnas ett krav" på att ha Vulkan API stöd för Android WebView när "[Android] ramverket kommer att börja använda Vulkan för HWUI."


Grafikåtergivning i Android

För bakgrundskunskap är Skia en öppen källkod, 2D-grafikmotor som används i Google Chrome, Chrome OS, Android, Flutter och andra större projekt. Skia är en grafikrenderingsmotor som används i tidiga versioner av Android för att rendera Se och Duk (klasserna som används för att bygga och rita användargränssnittet i de flesta appar.) Android 3.0 Honeycomb ersatte delvis Skia med HWUI, ett bibliotek som konverterar Canvas-kommandon till hårdvaruaccelererade OpenGL-kommandon, även om 2D Skia-grafikbiblioteket fortfarande användes i vissa områden som väg rasterisering. Parallellt skapade Google även en OpenGL-backend för Skia. Resultatet är att vissa grafikanrop skulle göras till Skia-biblioteket medan andra skulle gå till OpenGL-backend. För att rensa upp i grafikarkitekturen beslutade Google att HWUI nu ska prata med Skia, som själv pratar med sin hårdvaruaccelererade OpenGL-backend, för att göra UI-rendering. Resultatet är att grafikanrop för UI-ramverket kommer att följa en väg och inte två.

En del av er kanske kommer ihåg ett utvecklaralternativ som heter "Set GPU Renderer" i tidiga utvecklarförhandsvisningar av Android 8.0 Oreo. Detta utvecklaralternativ tillät dig att tvinga HWUI att använda Skia och dess hårdvaruaccelererade OpenGL-backend som GPU-renderare för UI-ramverket. Utvecklaralternativet togs bort eftersom detta beteende nu är standard.

"Set GPU Renderer" utvecklaralternativ i Android O Developer Previews

Nästa steg av Google för att förbättra grafikrenderingen är att byta från en OpenGL hårdvaruaccelererad backend till en Vulkan hårdvaruaccelererad backend. Det är inte alls ett oväntat drag och är en logisk utveckling, men det är trevligt att se att det jobbar på att förbättra grafikåtergivningen på Android. Även om flytten inte kommer att fixa alla källor till fördröjning på Android, bör det minska bildrenderingstiderna genom att minska bearbetningen som görs av CPU: n. Med tanke på att detta i hög grad är ett pågående arbete (det är oavslutat i Android P), förväntar vi oss att det lanseras med Android Q eller en annan framtida Android-version.


En förhandsvisning av att använda Vulkan Graphics API för att rendera användargränssnittet

Det är faktiskt möjligt att testa Vulkan-backend för Skia på Android P nu. Det finns en felsökningsparameter som du kan ställa in för att tvinga Android att använda Skia Vulkans pipeline. Starta helt enkelt om efter att ha lagt till följande rad i /system/build.prop:

debug.hwui.renderer=skiavk

Att lägga till den här raden på en enhet som kör Android Oreo kommer att resultera i en krasch, så vi rekommenderar det inte. Medan din enhet kommer att starta upp med den här flaggan på Android P, är den ganska buggig för tillfället. Google Pixel Launcher misslyckas för det mesta med att återge några bakgrunder, animerade videor i inställningarna kan inte laddas, och det finns flera grafiska fel med statusfältet och meddelanden. Förutom det verkar de flesta appar, även YouTube-videor och spel som Doodle Jump, laddas bra.

Stort tack till XDA Recognized Developer luca020400 för deras hjälp med att skriva den här artikeln, för att tillhandahålla skärmbilder som visar den demonterade libhwui.so-koden och för att tillhandahålla felsökningsflaggan för att testa Vulkan-backend.


Källa 1: Talkin’ Treble: How Android-ingenjörer vinner kriget mot fragmentering [ArsTechnica]

Källa 2: Android Graphics Pipeline: From Button to Framebuffer [inovex blogg]

Källa 3: Skias webbsida [Google]

Källa 4: Kommentarer av Romain Guy, Android Graphics & Kotlin @ Google [Reddit]