AGI 疑难解答

本主题介绍了如何解决使用 Android GPU Inspector (AGI) 时的常见问题。

重置 AGI 设置

AGI 将其设置存储在 ~/.agic 文件中。删除此文件会删除所有 AGI 设置,包括最近打开的跟踪列表和设备验证结果。

AGI 在某些设备上失败

请确保您的设置满足所有要求

以下方法也有帮助

  • 停止任何可能通过 ADB 与设备交互的程序,例如 Android Studio。

  • 启用“保持唤醒”选项(在 Android 的开发者选项下),以防止设备屏幕因睡眠模式而关闭导致的问题。

系统分析器不报告 OpenGL ES 游戏的 GPU 活动

目前,跟踪 OpenGL ES 应用时仅支持 GPU 计数器。OpenGL ES 应用的 GPU 活动信息正在积极开发中。

帧分析器在某些 Vulkan 游戏上失败

首先要验证的是您的游戏是否正确使用了 Vulkan。使用 Vulkan 验证层,并确保您的游戏没有引发任何错误或警告。

如果存在任何 Vulkan 验证错误,则 AGI 帧分析器预计将无法工作。

创建帧分析器跟踪时游戏失败

如果游戏在没有 AGI 的情况下成功运行,但在创建帧配置文件跟踪时失败,则游戏在启动序列期间可能正在派生不同的进程。在这种情况下,您需要在跟踪选项的“进程名称”字段中指定要跟踪的进程名称。

要识别此问题,您可以在创建跟踪时检查 logcat 输出,并验证是否有不同的进程正在启动

# Clear the logcat output
adb logcat -c

## Use AGI to attempt to create a frame profile trace

Look at the logcat output to identify the processes that are running AGI. 

adb logcat | grep "this process name"
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame
I GAPID   : gapii [gapii/cc/spy.cpp:109] this process name: com.example.mygame:GameProcess

大多数游戏只有一个进程,上面的示例显示了具有多个进程的游戏预期会发生什么。

游戏在名为 com.example.mygame 的主进程中启动,然后派生一个名为 com.example.mygame:GameProcess 的新进程。如果实际的游戏渲染发生在第二个进程中,则您必须告诉 AGI 这是您要跟踪的进程。您可以通过在跟踪选项对话框的 Process name 字段中输入进程名称来做到这一点。

使用 AGI 后游戏失败

如果跟踪未能正常终止,AGI 可能会使某些 Android 设置处于可能中断后续应用运行的状态。这些设置是

  • 与 Vulkan 层相关的设置

    • enable_gpu_debug_layers

    • gpu_debug_app

    • gpu_debug_layers

    • gpu_debug_layer_app

  • 与 ANGLE 相关的设置

    • angle_debug_package

    • angle_gl_driver_selection_values

    • angle_gl_driver_selection_pkgs

如果您的应用在使用 AGI 后出现任何问题,您可以尝试使用以下 adb 命令清除这些设置

# Vulkan layers
adb shell settings delete global enable_gpu_debug_layers
adb shell settings delete global gpu_debug_app
adb shell settings delete global gpu_debug_layers
adb shell settings delete global gpu_debug_layer_app
# ANGLE
adb shell settings delete global angle_debug_package
adb shell settings delete global angle_gl_driver_selection_values
adb shell settings delete global angle_gl_driver_selection_pkgs

通过 AGI 启动游戏并创建帧配置文件跟踪时,您的游戏看起来有所不同

为了创建帧配置文件跟踪,AGI 会拦截游戏发出的图形 API 调用,这可能会影响游戏渲染。

AGI 捕获 Vulkan 调用。对于 OpenGL ES 游戏,AGI 依赖 ANGLE 将 OpenGL ES 转换为 Vulkan。如果通过 AGI 启动游戏时,您的游戏看起来不同(例如,某些颜色与您预期的不同),这可能是 AGI 或 ANGLE 中的错误。您可以通过尝试以下方法帮助我们更好地了解问题的根本原因。

Vulkan 游戏:使用所有支持的 Vulkan 扩展进行跟踪

“**包含未知扩展**”跟踪选项控制 AGI 是否应包含其不支持的 Vulkan 扩展。(浏览支持的扩展列表。)

如果您的应用使用了 AGI 不支持的扩展,则在重放跟踪时可能会遇到意外行为,包括细微错误或崩溃。

尝试启用此选项,然后启动另一个帧分析器跟踪。如果启用此选项后游戏显示正常,则游戏可能依赖于 AGI 不支持的 Vulkan 扩展。

OpenGL ES 游戏:仅使用 ANGLE 运行

您可以仅使用 ANGLE 而不使用 AGI 运行您的 OpenGL ES 游戏,以查看错误的渲染是否来自 ANGLE 中的问题。

如果您已经尝试创建 OpenGL ES 游戏的帧配置文件跟踪,那么 AGI 已经在您的设备上安装了 ANGLE。AGI 使用的 ANGLE 软件包名为 org.chromium.angle.agi

要强制您的游戏在 ANGLE 上运行,请使用以下命令

# Make sure that the AGI capture layer will be ignored
adb shell settings delete global enable_gpu_debug_layers
# Force the package com.example.mygame to use ANGLE
adb shell settings put global angle_debug_package org.chromium.angle.agi
adb shell settings put global angle_gl_driver_selection_values angle
adb shell settings put global angle_gl_driver_selection_pkgs com.example.mygame

如果使用这些设置后游戏看起来不同,则可能是 ANGLE 中的错误,而不是 AGI。如果使用这些设置后游戏看起来正确,但在创建 AGI 跟踪时看起来不同,则可能是 AGI 中的错误。

您可以通过创建 GitHub 问题来报告 AGI 错误。