Android 從2020年開始在推廣這個東西
去年推出 1.0 並且在前幾天, 推出了 2.0 …
但他到底是什麼 !?
先來看介紹影片:
好, 我其實建議你不要看…. 因為實在有夠尷尬
主打亮點是 只要 adb shell 有通 你就能用…. 但真的有這麼強嘛 ?
先來看他的motivation, 本身應該是 Android 想要弄一個統一的 Vulkan Game dev環境 推廣他的 Vulkan is the future
這個環境有兩個環節
-
- API level tracing
- 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 |
GLES 則是得透過 ANGLE 再轉成 Vulkan on-top AGI (這個號稱是 2.0的亮點)
這條路AGI可以幫你入珠某個版本的ANGLE
2.0 的另一個亮點是支援 frame-based 的分析
但很有趣的…他真的支援 frame-based:
藍框的部份是可以選 capturing trigger option
共計有:
-
- Manual – 手動再按 start
- Beginning – tool init完直接capture
- Time – Tool init 完之後若干 seconds capture
- Frame – tool可以統計 frame數, 這個設定就是抓開始後的第n張frame
但不要忘了紅框部份: 只限一張
最後一個 capturing mode: System Profile 就相對完整, 最多只能錄 600 秒
可以錄到平台相關的 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詭異的限制:
-
- Unsupported device 不給用
- GAPID 明明就 support multiple frame
- 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 通常會有下面的需求
-
- 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 (嚴格到不可思議) - 只能針對 debuggable app 錄 trace
這個對於 app developer 不會是問題
但對platform debug會是問題
可解的方式是 root device
因為 debuggable是安全控管需求, 非傳統認知performance取向的差異
ANGLE support 也是基於 debuggable, 非 root 根本什麼都不能做 - 無法對 GLES做 debug
這點很可惜, 畢竟原本 GAPID 是可以的
- trace playback
結論
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