AGI 문제 해결

이 주제에서는 Android GPU 검사기(AGI)를 사용할 때 발생하는 일반적인 문제를 해결하는 방법을 설명합니다.

AGI 설정 재설정

AGI는 ~/.agic 파일에 설정을 저장합니다. 이 파일을 삭제하면 최근에 연 트레이스 목록과 기기 유효성 검사 결과를 포함한 모든 AGI 설정이 삭제됩니다.

일부 기기에서 AGI가 실패함

설정이 모든 요구사항을 충족하는지 확인하세요.

다음 사항도 도움이 될 수 있습니다.

  • Android 스튜디오와 같이 ADB를 통해 기기와 상호작용할 수 있는 모든 프로그램을 중지합니다.

  • 수면 모드로 인해 기기 화면이 꺼질 때 발생하는 문제를 방지하려면 Android의 개발자 옵션에서 Stay awake 옵션을 사용 설정합니다.

시스템 프로파일러가 OpenGL ES 게임의 GPU 활동을 보고하지 않음

현재는 OpenGL ES 애플리케이션을 추적할 때 GPU 카운터만 지원됩니다. OpenGL ES 애플리케이션의 GPU 활동 정보는 현재 개발 중입니다.

일부 Vulkan 게임에서 프레임 프로파일러가 실패함

가장 먼저 확인해야 할 사항은 게임이 Vulkan을 올바르게 사용하는지 확인하는 것입니다. Vulkan 유효성 검사 계층을 사용하여 게임에서 오류나 경고가 발생하지 않는지 확인합니다.

Vulkan 유효성 검사 오류가 있으면 AGI 프레임 프로파일러가 작동하지 않습니다.

프레임 프로파일러 트레이스 생성 시 게임 실패

게임이 AGI 없이 성공적으로 실행되지만 프레임 프로필 트레이스를 만들 때 실행되지 않으면 게임이 시작 시퀀스 중에 다른 프로세스를 포크할 수 있습니다. 이 경우 trace 옵션의 '프로세스 이름' 필드에 추적할 프로세스의 이름을 지정해야 합니다.

이 문제를 파악하려면 트레이스를 만드는 동안 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의 버그일 수 있습니다. 다음을 시도하면 Google에서 문제의 근본 원인을 더 잘 파악하는 데 도움이 될 수 있습니다.

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

이러한 설정에서 게임이 다르게 보인다면 AGI가 아닌 ANGLE의 버그일 수 있습니다. 이러한 설정에서는 게임이 올바르게 보이지만 AGI 트레이스를 만드는 동안 다르게 보인다면 AGI의 버그일 수 있습니다.

GitHub 문제를 만들어 AGI 버그를 신고할 수 있습니다.