Android Q+ は、Vulkan Graphics API を使用して UI をレンダリングする場合があります

Google のオープンソース グラフィック エンジンである Skia には、Vulkan Graphics API バックエンドがあります。 このバックエンドは、Android Q 以降で UI をレンダリングするために利用される場合があります。

Android の次のメジャー バージョンである Android 9 は、複数のデバイス向けに来月リリースされる予定です。 主な改良点が主に内部的なものであった Android Oreo とは異なり、Android P はより多くのユーザー向け機能を提供します プロジェクトの作業を継続しながら、刷新されたユーザー インターフェイス、ナビゲーション ジェスチャー、デジタル ウェルビーイングなど 高音。 しかし、Google は舞台裏で、Android でのグラフィック レンダリングの仕組みを刷新しました。 Android Oreo で、Google は Android P で完成した Skia グラフィックス エンジンへの OpenGL ハードウェア アクセラレーション バックエンドのテストを開始しました。 しかし、Google はそこで止まるわけではなく、 Vulkan バックエンド Skia グラフィック エンジンのバージョンで、Android Q 以降のリリースに搭載される予定です。

この証拠は次の資料から得られます。 コメント オープンソースの Chromium Gerrit に関して Google エンジニアによって提出されました。 このコメントは、Android 上の Google Chrome ブラウザ向けの Vulkan Graphics API の今後の実装に関するバグ レポートに言及しています。 コメントには、将来的には Vulkan API が「必要になる」と記載されています。 「[Android] フレームワークが Vulkan の使用を開始するときの Android WebView のサポート」 ホイ。」


Android でのグラフィック レンダリング

背景知識として、Skia は、Google Chrome、Chrome OS、Android、Flutter、およびその他の主要プロジェクトで使用されているオープンソースの 2D グラフィック エンジンです。 Skia は、Android の初期バージョンでレンダリングに使用されるグラフィック レンダリング エンジンです。

ビュー そして キャンバス (ほとんどのアプリで UI を構築および描画するために使用されるクラス。) Android 3.0 Honeycomb は、Skia を部分的に変換するライブラリである HWUI に置き換えました。 Canvas コマンドをハードウェア アクセラレーションされた OpenGL コマンドに変換しました。ただし、パスなどの一部の領域では 2D Skia グラフィック ライブラリが引き続き使用されていました。 ラスタライズ。 並行して、Google は Skia 用の OpenGL バックエンドも作成しました。 その結果、一部のグラフィックス呼び出しは Skia ライブラリに対して行われ、その他は OpenGL バックエンドに行われることになります。 グラフィックス アーキテクチャをクリーンアップするために、Google は HWUI が Skia と通信し、Skia 自体がハードウェア アクセラレーションの OpenGL バックエンドと通信して UI レンダリングを行うことにしました。 その結果、UI フレームワークのグラフィックス呼び出しは 2 つではなく 1 つのパスをたどることになります。

Android 8.0 Oreo の初期の開発者プレビューにあった「GPU レンダラーの設定」という開発者向けオプションを覚えている人もいるかもしれません。 この開発者向けオプションを使用すると、HWUI で Skia とそのハードウェア アクセラレーションによる OpenGL バックエンドを UI フレームワークの GPU レンダラーとして使用するように強制できます。 この動作がデフォルトになったため、開発者向けオプションは削除されました。

Android O 開発者プレビューの「GPU レンダラーの設定」開発者向けオプション

グラフィックス レンダリングを改善するための Google の次の動きは、OpenGL ハードウェア アクセラレーション バックエンドから Vulkan ハードウェア アクセラレーション バックエンドに切り替えることです。 これは全く予想外の動きではなく、論理的な進歩ですが、Android でのグラフィック レンダリングの改善に向けた取り組みが行われているのは嬉しいことです。 この動きによって Android のラグの原因がすべて解決されるわけではありませんが、CPU による処理が削減されるため、フレームのレンダリング時間が短縮されるはずです。 これは非常に進行中の作業であることを考えると (Android P では未完成です)、Android Q または将来の別の Android リリースでリリースされると予想されます。


Vulkan Graphics API を使用して UI をレンダリングするプレビュー

実際、Android P で Skia の Vulkan バックエンドをテストできるようになりました。 Android に Skia Vulkan パイプラインの使用を強制するために設定できるデバッグ パラメーターがあります。 次の行を /system/build.prop に追加した後、再起動するだけです。

debug.hwui.renderer=skiavk

Android Oreo を実行しているデバイスにこの行を追加するとクラッシュが発生するため、お勧めしません。 Android P ではデバイスはこのフラグで起動しますが、現時点ではかなりバグがあります。 Google Pixel Launcher はほとんどの場合、背景のレンダリングに失敗し、設定のアニメーションビデオの読み込みに失敗し、ステータス バーと通知にいくつかのグラフィカルな不具合があります。 それ以外では、ほとんどのアプリ、さらには YouTube ビデオや Doodle Jump などのゲームも問題なく読み込まれるようです。

XDA 認定開発者に感謝します ルカ020400 この記事の執筆にご協力いただき、逆アセンブルされた libhwui.so コードを示すスクリーンショットを提供していただき、Vulkan バックエンドをテストするためのデバッグ フラグを提供していただきました。


出典 1: Talkin' Treble: Android エンジニアは断片化との戦いにどのように勝利しているか [アルステクニカ]

ソース 2: Android グラフィックス パイプライン: ボタンからフレームバッファまで [イノベックスブログ]

出典 3: Skia Web ページ [グーグル]

ソース 4: Romain Guy、Android グラフィックス、Kotlin @ Google によるコメント [レディット]