Пропускная способность памяти, используемая для текстурных данных, может стать потенциальным узким местом для производительности графического процессора вашего приложения. В системном профиле AGI есть несколько счетчиков, которые могут помочь диагностировать проблемы с пропускной способностью памяти для текстур.
Счетчики Qualcomm Adreno
На устройствах с графическими процессорами Qualcomm Adreno можно отметить следующие показатели:
| Прилавок | Описание |
|---|---|
| Скорость чтения текстурной памяти (байты/секунду) | Пропускная способность данных текстуры, считываемых из внешней памяти. |
| % Текстура L1 Промах | Промах кэша L1 при загрузке текстур. |
| % Текстуры не базового уровня | Процент мипмапов, полученных при выборке текстур. |
| % Анизотропная фильтрация | Процент текселей, подвергнутых анизотропной фильтрации. |
ARM Mali counters
На устройствах с графическими процессорами ARM Mali можно отметить следующие показатели:
| Прилавок | Описание |
|---|---|
| Текстура считывает ритмы из внешней памяти. | Данные, считанные из внешней памяти текстурным блоком, усредняются по ядрам шейдера. |
| Текстура считывает ритмы из кэша L2. | Данные, считанные из кэша L2 текстурным блоком, усреднены по ядрам шейдеров. |
| [Более] |
Для расчета общей пропускной способности на основе средних значений времени чтения значение счетчика умножается на ширину шины (обычно 16 байт) и на общее количество шейдерных ядер.
Контранализ
Для измерения работы этих счетчиков необходимо измерить среднюю и пиковую пропускную способность в течение одного кадра, отображаемого на графическом процессоре, а затем выделить непрерывный блок данных об использовании графического процессора.

Мы рекомендуем среднюю пропускную способность чтения текстурной памяти не выше 1 ГБ/с и пиковую пропускную способность не выше 3 ГБ/с. Промахи кэша L1 текстур также не должны превышать 10%. Более высокие значения пропускной способности или кэша L1 могут указывать на более серьезные проблемы с текстурами, в том числе:
- Текстуры слишком большие : Большие текстуры увеличивают размер пакета, требуют больших затрат ресурсов и могут снизить эффективность кэширования.
- Текстуры не сжаты : все телефоны Android поддерживают некоторые типы сжатия текстур, будь то ETC1 или ASTC. Текстуры следует сжимать для уменьшения размера пакета и снижения пропускной способности текстур.
- Прочее : Следует рассмотреть ряд других аспектов, связанных с текстурами, включая текстуры, являющиеся степенями двойки, мипмаппинг, анизотропную фильтрацию и многое другое. Некоторые из них можно увидеть в профиле системы, как обсуждается ниже, тогда как другие могут потребовать более глубокого исследования.
Для трехмерных игр со свободной камерой следует использовать мипмаппинг для текстурных ресурсов, чтобы объекты, находящиеся на расстоянии от камеры, имели меньшую пропускную способность памяти, более высокую эффективность кэширования текстур и лучшее качество изображения. Для устройств, использующих графические процессоры Qualcomm Adreno, значения счетчика % Non-Base Level Textures ниже 10% в среднем могут указывать на неадекватный мипмаппинг.

Ещё один важный аспект — использование анизотропной фильтрации, которая описывается с помощью счётчика % Anisotropic Filtered для графических процессоров Qualcomm Adreno и показывает долю текселей, подвергнутых анизотропной фильтрации. Хотя это может улучшить качество изображения в некоторых играх, это также может быть очень затратно, и его использование следует сопоставлять с затратами на производительность графического процессора.

Лучший способ диагностировать более конкретные проблемы — это провести трассировку профиля кадра для анализа текстурных ресурсов.