AGI 问题排查

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

重置 AGI 设置

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

AGI 在某些设备上无法使用

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

以下内容也可以帮助您:

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

  • 启用 Stay awake 选项(位于 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 中的 bug。您可以通过尝试以下操作,帮助我们更好地了解问题的根本原因。

Vulkan 游戏:支持所有 Vulkan 扩展的跟踪记录

Include Unknown Extensions 跟踪选项用于控制 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 中的 bug,而不是 AGI 中的 bug。如果游戏在这些设置下看起来正确,但在创建 AGI 轨迹时看起来有所不同,那么可能是 AGI 中存在 bug。

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