Android Graphic Inspector

Android 從2020年開始在推廣這個東西
去年推出 1.0 並且在前幾天, 推出了 2.0 …
但他到底是什麼 !?

先來看介紹影片:

好, 我其實建議你不要看…. 因為實在有夠尷尬

主打亮點是 只要 adb shell 有通 你就能用…. 但真的有這麼強嘛 ?

先來看他的motivation, 本身應該是 Android 想要弄一個統一的 Vulkan Game dev環境 推廣他的 Vulkan is the future
這個環境有兩個環節

    1. API level tracing
    2. HW counter

以目前玩起來的感覺,  應該是有做到 87%
但只限 Supported Device:

DEVICE NAME GPU NAME
Google Pixel 4 (standard and XL) Qualcomm® Adreno™ 640
Google Pixel 4a Qualcomm® Adreno™ 618
Google Pixel 4a 5G Qualcomm® Adreno™ 620
Google Pixel 5 Qualcomm® Adreno™ 620
Samsung Galaxy S10 series Qualcomm® Adreno™ 640 and Arm® Mali™ G76
Samsung Galaxy S20 series Qualcomm® Adreno™ 650 and Arm® Mali™ G77
Samsung Galaxy Note 10 series Qualcomm® Adreno™ 640 and Arm® Mali™ G76
Samsung Galaxy Note 20 series Qualcomm® Adreno™ 650 and Arm® Mali™ G77
Samsung Galaxy S21 series Qualcomm® Adreno™ 660 and Arm® Mali™ G78
OPPO Find X3 Pro Qualcomm® Adreno™ 660
OPPO Find X3 Qualcomm® Adreno™ 650
OPPO Reno 6 Pro+ Qualcomm® Adreno™ 650

只支援 Vulkan

GLES 則是得透過  ANGLE 再轉成 Vulkan on-top AGI (這個號稱是 2.0的亮點)

這條路AGI可以幫你入珠某個版本的ANGLE

2.0 的另一個亮點是支援 frame-based 的分析
但很有趣的…他真的支援 frame-based:
藍框的部份是可以選 capturing trigger option
共計有:

    1. Manual – 手動再按 start
    2. Beginning – tool init完直接capture
    3. Time – Tool init 完之後若干 seconds capture
    4. Frame – tool可以統計 frame數, 這個設定就是抓開始後的第n張frame

但不要忘了紅框部份: 只限一張

 

 

 

 

 

 

最後一個 capturing mode: System Profile 就相對完整,  最多只能錄 600 秒

filename 都叫做 perfetto

可以錄到平台相關的 counter
不過仰賴 GPU vendor provides的資訊
例如Imagination counter內容跟 PVRTune 平常會看的差不多

由於這個可以跟其他 ftrace 併在一起:
frame number 流竄於Disp subsys: APP/GPU/HWC 都很清楚

對 system調校應有一定的幫助

Unsupported Devices

AGI網站寫說: 你要的話可以要求, 然後Google會去要求 OEM support

When will AGI support my device?

We will also periodically update our supported device page with devices that support AGI. We are working with our OEM partners to add support to more devices.

Please file an issue in our GitHub repository to request support for a device. We will connect you to the OEM in question.

硬給他掛上去就會長這樣:

你課金不足 請買新的手機

完全不給用…..

Story Not Ends Here

對喔聽說 AGI OpenSource!
在下載頁面也看得到 source
甚至下載頁面本身就是 git-hub

okay 所以 gfxtrace 本來就是 GAPID 的 file-extension, 也會裝一個 GAPID一般的 apk 進手機

Build AGI

按網頁指示 Ubuntu 20.04 LTS 是可以 build-pass (AMD FX-8320 要1hr), 而且可以使用

繞過去

幾個AGI詭異的限制:

    1. Unsupported device 不給用
    2. GAPID 明明就 support multiple frame
    3. Perfetto 最多錄 600秒 (好吧 這個應該還好 lol)

有了 source code 又能 build-pass 我們就可以跟yo叔一樣繞過去

./gapic/src/main/com/google/gapid/models/Devices.java:

public DeviceValidationResult(Service.Error error, boolean passed, boolean skipped) {
this.error = error;
this.passed = passed;
this.skipped = true;
}

強制不 valid device

./gapic/src/main/com/google/gapid/views/TracerDialog.java

public static final Flag<Integer> maxFrames = Flags.value(
“max-frames”, 999, “The maximum number of frames to allow for graphics captures”, true); /*本來是1*/ 
public static final Flag<Integer> maxPerfetto = Flags.value(
“max-perfetto”, 9999 * 60, “The maximum amount of time to allow for profile captures”, true); /*本來是 10*/
public static final Flag<Boolean> enableLoadValidationLayer = Flags.value(
“load-validation-layer”, false,
“Show the option to load the Vulkan validation layer at capture time.”);

skipped mode, pixel3 就可以用了 也可以錄多張 frame. 只是沒有內建 perfetto 

 

不過也許本來就存在 config 檔, 只是我暫時沒找到

其他難用之處

如前文, 這個 tool面向是 Game developer, 其實所有類似的 tool都是 game developer, 只是順便可以拿來 debug. 但 debug 通常會有下面的需求

    1. trace playback
      目前無法跨平台, 意思是 Pixel 3上錄的就只能在 Pixel 3 上回放

      這跟本來 GAPID不太一樣
      [更新]
      多改這個以選擇 incompatible
      gapic/src/main/com/google/gapid/models/Devices.java
      replayDevices.add(d.instance);
      } else {
      incompatibleReplayDevices.add(d);
      +         replayDevices.add(d.instance);
      }
      }
      }
      搭配:

      可以 by-passed 各類 compatibility checks (嚴格到不可思議)
    2. 只能針對 debuggable app 錄 trace
      這個對於 app developer 不會是問題
      但對platform debug會是問題
      可解的方式是 root device
      因為 debuggable是安全控管需求, 非傳統認知performance取向的差異
      ANGLE support 也是基於 debuggable, 非 root 根本什麼都不能做
    3. 無法對 GLES做 debug
      這點很可惜, 畢竟原本 GAPID 是可以的

結論

Android GPU Inspector = GAPID( improve Vulkan and Vulkan only) + Perfetto

在未 root 狀態下 Perfetto 部份應該是堪用的
API level 分析應該還是回到 vendor tool

Vulkan is the future, 就讓我們看看這 transition 到底會花多久 ? (Start from Android O which is 2017

發表迴響