Сбор показателей загрузки ассетов
Используйте AsyncReadManagerMetrics класс, чтобы отслеживать производительность загрузки ассетов и чтения файлов во время выполнения. Он записывает данные обо всех операциях чтения файлов, которыми управляет AsyncReadManager.
Unity использует AsyncReadManager читать большинство файлов во время выполнения, включая AssetBundles, AddressablesВы также можете загружать файлы из скриптов, используя AsyncReadManager.Read.
Вы можете использовать AsyncReadManagerMetrics для выполнения следующих действий:
- Запуск и остановка сбора показателей.
- Получение и анализ записанных данных показателей.
- Фильтруйте и обобщайте данные, чтобы облегчить анализ.
Эти сведения могут помочь выявить проблемы с загрузкой ресурсов и измерить влияние изменений на производительность.
Требования к разработке
AsyncReadManagerMetrics класс доступен только в сборках для разработки. Для совместимости оборачивайте вызовы AsyncReadManagerMetrics APIs в #if директива препроцессора с использованием ENABLE_PROFILER символ. Для более старых версий Unity, используйте UNITY_2020_2_OR_NEWER символ, чтобы удалить метрический код. Например:
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
AsyncReadManagerMetrics.StartCollectingMetrics();
#endif
Включить сбор показателей
Включите сбор показателей перед записью данных. Это можно сделать одним из следующих способов:
- Вызывайте
AsyncReadManagerMetrics.StartCollectingMetricsв вашем скрипте. - Передайте аргумент командной строки
-enable-file-read-metricsпри запуске приложения.
Чтобы собирать показатели в режиме воспроизведения, передайте аргумент -enable-file-read-metrics при запуске Unity Editor. Однако редактор загружает некоторые категории ассетов, такие как текстуры, и не перезагружает их при переходе в режим воспроизведения. Для получения полных показателей ввода/вывода файлов необходимо собирать данные из разработочного сборочного файла приложения.
Получение метрических данных
Используйте GetMetrics для получения собранных показателей из AsyncReadManagerMetrics. Укажите AsyncReadManagerMetrics.Flags, чтобы определить, следует ли очищать показатели после их получения. Очистка показателей удаляет завершенные (включая отмененые и неудачные) чтения, но сохраняет очередные или текущие операции. Чтобы получить доступ к показателям незавершенных операций, вызовите GetMetrics снова после их завершения. Регулярно очищая показатели, можно избежать повторного чтения одних и тех же данных, а также уменьшить нагрузку системы на данные.
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
AsyncReadManagerRequestMetric[] metrics
= AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
#endif
Данные показателей включают следующие контекстные данные:
AssetLoadingSubsystem, инициировавший чтение. Если недоступно, по умолчаниюOther.AssetName. Если недоступно, по умолчанию пусто.AssetTypeID. Если недоступно, по умолчанию нулевой.
Ниже приведен список поддерживаемых ассетов TypeIDs:
| TypeID | Тип названия |
|---|---|
| 28 | Texture2D |
| 117 | Texture3D |
| 89 | CubeMap |
| 43 | Сетка |
Для других TypeIDs, которые могут появиться, см. Справочник по идентификаторам классов YAML.
Получить сводные данные
Получить сводку показателей AsyncReadManager можно с помощью следующих методов:
GetCurrentSummaryMetrics: Возвращает сводку всех показателей, собранных после последней очистки хранилища показателей.GetSummaryOfMetrics: Возвращает резюме метрик в массивеAsyncReadManagerRequestMetric, который можно получить, вызвавGetMetrics.
Например:
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
AsyncReadManagerSummaryMetrics summaryOfMetrics
= AsyncReadManagerMetrics.GetCurrentSummaryMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
#endif
Или:
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
AsyncReadManagerRequestMetric[] metrics
= AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
AsyncReadManagerSummaryMetrics summaryOfMetrics
= AsyncReadManagerMetrics.GetSummaryOfMetrics(metrics);
#endif
Сводные статистические данные включают:
- Средняя пропускная способность
- Средний размер чтения
- Тип ассета с самым длительным временем загрузки
- Число просмотров
- Число запросов
- Общее число прочитанных байт
Полный список сводных показателей см. в AsyncReadManagerSummaryMetrics.
По умолчанию сводная статистика включает все операции чтения, в том числе те, которые находятся в очереди или в процессе выполнения. Вы можете использовать фильтр, чтобы ограничить сводную статистику только теми операциями, которые вас интересуют. Например, вы можете использовать фильтр, чтобы ограничить сводную статистику завершенными операциями чтения для ассетов текстуры.
Примечание: Для расчета сводных данных требуются ресурсы обработки. Чтобы избежать влияния на измерения, сначала собирайте показатели, а затем суммируйте их после завершения операций.
Использование сводных фильтров
Используйте AsyncReadManagerMetricsFilters для фильтрации сводных данных. Вы можете фильтровать по следующим параметрам:
- Тип ассета: По YAML ID.
- Обработка состояния: Например, в очереди, чтение или завершено.
- Читать тип: Например, async или sync.
- Priority: Например, высокая или низкая.
- Подсистема:
AssetLoadingSubsystem.
Для одного и того же фильтра можно установить несколько категорий. Операция чтения должна соответствовать всем категориям, чтобы метрики этой операции были включены в сводку. Например, можно указать значения как для ProcessingState, так и для Subsystem фильтра, чтобы свести воедино только операции в указанных состояниях обработки, инициированные указанными подсистемами.
Также можно указать несколько значений для категории. В этом случае операция чтения может соответствовать любому значению, указанному для категории, чтобы ее метрики были включены в сводку. Например, фильтрация по обоим параметрам может быть выполнена по умолчанию. mesh и texture включает операции по обоим видам ассетов.