عیب یابی AGI

این مبحث نحوه رفع مشکلات رایج هنگام استفاده از Android GPU Inspector (AGI) را شرح می دهد.

بازنشانی تنظیمات AGI

AGI تنظیمات خود را در فایل ~/.agic ذخیره می کند. با حذف این فایل، تمام تنظیمات AGI، از جمله فهرست ردیابی‌های اخیراً باز شده و نتایج تأیید اعتبار دستگاه، حذف می‌شود.

AGI در برخی از دستگاه ها خراب می شود

لطفاً مطمئن شوید که راه‌اندازی شما همه الزامات را برآورده می‌کند.

موارد زیر نیز می تواند کمک کند:

  • هر برنامه ای را که ممکن است از طریق ADB با دستگاه تعامل داشته باشد، مانند Android Studio متوقف کنید.

  • برای جلوگیری از مشکلاتی که هنگام خاموش شدن صفحه دستگاه به دلیل حالت خواب، به وجود می آیند، گزینه Stay awake (در زیر گزینه های برنامه نویس در اندروید) را فعال کنید.

نمایه‌گر سیستم فعالیت GPU را برای بازی‌های OpenGL ES گزارش نمی‌کند

در حال حاضر، تنها شمارنده‌های GPU هنگامی که یک برنامه OpenGL ES را ردیابی می‌کنید، پشتیبانی می‌شوند. اطلاعات فعالیت GPU برای برنامه های OpenGL ES در حال توسعه فعال است.

در برخی از بازی های Vulkan، نمایه ساز فریم با مشکل مواجه می شود

اولین چیزی که باید بررسی کنید این است که بازی شما از Vulkan به درستی استفاده می کند. از لایه اعتبار سنجی Vulkan استفاده کنید و مطمئن شوید که بازی شما هیچ خطایی یا هشداری ایجاد نمی کند.

اگر خطای اعتبارسنجی Vulkan وجود داشته باشد، انتظار نمی رود که نمایه ساز قاب AGI کار کند.

شکست بازی هنگام ایجاد ردی از نمایه ساز فریم

اگر بازی بدون AGI با موفقیت اجرا شود اما در هنگام ایجاد ردیابی نمایه فریم اجرا نشود، ممکن است بازی در طول دنباله راه‌اندازی خود فرآیند متفاوتی را انجام دهد. در این صورت، باید نام فرآیندی را برای ردیابی در قسمت "Process name" در گزینه های 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 در گفتگوی گزینه trace انجام دهید.

شکست بازی پس از استفاده از 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 برای ترجمه OpenGL ES به Vulkan به ANGLE متکی است. اگر بازی شما زمانی که آن را از طریق AGI راه اندازی می کنید متفاوت به نظر می رسد (مثلاً برخی از رنگ ها آن چیزی نیستند که انتظار دارید)، احتمالاً یک اشکال در AGI یا ANGLE است. با امتحان کردن موارد زیر می توانید به ما در درک بهتر علت اصلی مشکل کمک کنید.

بازی‌های Vulkan: ردیابی با تمام برنامه‌های افزودنی Vulkan پشتیبانی می‌شود

گزینه Include Unknown Extensions Tracing کنترل می کند که آیا AGI باید افزونه های Vulkan را که پشتیبانی نمی کند شامل شود یا خیر. ( لیستی از برنامه های افزودنی پشتیبانی شده را مرور کنید.)

اگر برنامه شما از افزونه‌ای استفاده می‌کند که توسط AGI پشتیبانی نمی‌شود، ممکن است هنگام پخش مجدد ردیابی با رفتار نامطلوبی از جمله خطاهای ظریف یا خرابی‌ها مواجه شوید.

سعی کنید این گزینه را فعال کنید، سپس یک قاب نمایه ساز دیگر را راه اندازی کنید. اگر بازی همانطور که انتظار می رود با فعال بودن گزینه نمایش داده شود، بازی ممکن است به افزونه Vulkan که توسط AGI پشتیبانی نمی شود متکی باشد.

بازی‌های OpenGL ES: فقط با ANGLE اجرا شوند

می توانید بازی OpenGL ES خود را با ANGLE اما بدون AGI اجرا کنید تا ببینید آیا رندر اشتباه ناشی از مشکل در ANGLE است.

اگر قبلاً سعی کرده اید یک نمایه فریم از بازی OpenGL ES خود ایجاد کنید، AGI قبلاً ANGLE را روی دستگاه شما نصب کرده است. بسته ANGLE مورد استفاده توسط AGI 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 را گزارش کنید.