Характеристики использования памяти приложением являются фундаментальным аспектом его производительности. Вы можете использовать профилировщик системы для анализа этих характеристик, просматривая доступную информацию счетчиков графического процессора.
Адрено устройства
На устройствах Adreno начните с выделения периода времени, соответствующего одному кадру графического процессора, как описано в разделе «Оценка времени обработки кадров ЦП и графического процессора» . Используйте метод, описанный на этой странице, включающий использование % использования графического процессора или аналогичный счетчик для границ времени вашего кадра, поскольку все счетчики используют один и тот же метод синхронизации и позволят более точно оценить использование памяти (по сравнению с использованием кадра). временные границы, полученные из срезов графического процессора, данные которых собираются независимо от данных счетчика).
![Дорожка использования совпадает с соответствующими счетчиками под ней.](https://developer.android.com/static/images/agi/memory_efficiency-images/image1.png?authuser=19&hl=ru)
Чтение/запись итогов
Выделив один кадр в профилировщике, начните с просмотра счетчиков общего количества прочитанных (байт/сек) и общего количества записей (байт/сек) . Эти счетчики дают хорошее общее представление о том, какой объем данных проходит через шину памяти в течение одного кадра. Сделайте все возможное, чтобы свести к минимуму объем данных, отправляемых по шине, поскольку пропускная способность памяти является основным источником разряда батареи на мобильных устройствах.
![Чтение и запись общих счетчиков](https://developer.android.com/static/images/agi/memory_efficiency-images/image2.png?authuser=19&hl=ru)
Вы также можете проверить счетчики чтения памяти вершин (байт/секунда) и чтения памяти текстуры (байт/секунда), чтобы определить часть полосы пропускания, используемую для данных вершин и текстур.
![Счетчики чтения памяти вершин и текстур](https://developer.android.com/static/images/agi/memory_efficiency-images/image3.png?authuser=19&hl=ru)
То, что вы считаете «хорошим» для этих значений, зависит от типа рабочих нагрузок, наблюдаемых в вашем приложении. Например, 2D-приложения могут использовать относительно большие (~2+ ГБ/с) объемы пропускной способности чтения текстурной памяти, но пропускная способность вершинной памяти может быть очень минимальной (~50 МБ/с). Более подробную информацию можно найти в документации по Анализу пропускной способности памяти вершин и Анализу использования пропускной способности памяти текстур .
Принести киоски
Посмотрите на счетчики % Vertex Fetch Stall , % Texture Fetch Stall и % Stall on System Memory, поскольку они дадут вам некоторые подсказки об общей производительности памяти нашего приложения. Если значения превышают примерно 5 %, это означает, что ваше приложение либо неэффективно размещает данные в памяти, либо эффективно обращается к своим данным, чтобы воспользоваться преимуществами кеша. Ознакомьтесь с разделами Анализ пропускной способности памяти вершин и Анализ использования пропускной способности памяти текстур для получения подробной информации об улучшении использования памяти для этих типов ресурсов.
![Счетчики задержек памяти](https://developer.android.com/static/images/agi/memory_efficiency-images/image4.png?authuser=19&hl=ru)
устройства Мали
На устройствах Mali сначала выделите период времени, соответствующий одному кадру графического процессора, как описано в разделе «Оценка времени обработки кадров ЦП и графического процессора» . Используйте метод, описанный на этой странице, включающий использование % использования графического процессора или аналогичный счетчик для границ времени вашего кадра, поскольку все счетчики используют один и тот же метод синхронизации и позволят более точно оценить использование памяти (по сравнению с использованием кадра). временные границы, полученные из срезов графического процессора, данные которых собираются независимо от данных счетчика).
![Дорожка использования совпадает с интересующими вас счетчиками под ней.](https://developer.android.com/static/images/agi/memory_efficiency-images/image5.png?authuser=19&hl=ru)
Вывод внешних итогов
После того, как вы выделили один кадр в Профилировщике системы , начните с просмотра счетчиков Выходных внешних байт чтения и Выходных внешних байтов записи . Эти счетчики дают хорошее общее представление о том, какой объем данных проходит через шину памяти в течение одного кадра. Сделайте все возможное, чтобы свести к минимуму объем данных, отправляемых по шине, поскольку пропускная способность памяти является основным источником разряда батареи на мобильных устройствах.
![Выход Внешние счетчики дорожек](https://developer.android.com/static/images/agi/memory_efficiency-images/image6.png?authuser=19&hl=ru)
Ввод внутренних итогов
Также есть счетчики, которые предоставляют информацию о самих тайниках. Вас интересуют счетчики «Входные внутренние циклы [чтения | записи]». Более высокие значения означают, что вы успешно обращаетесь к кешу, но делается слишком много запросов на чтение, и в результате код шейдера останавливается в ожидании доступа к памяти.
![Вход Внутренние счетчики дорожек](https://developer.android.com/static/images/agi/memory_efficiency-images/image7.png?authuser=19&hl=ru)
Принести киоски
Следующий набор счетчиков, на которые вы можете обратить внимание, — это счетчики задержки циклов предварительной выборки вершин и счетчики задержки выборки текстур, поскольку они дадут вам некоторые подсказки об общей производительности памяти нашего приложения. Если вы видите значения выше ~5%, это означает, что вы либо неэффективно размещаете наши данные в памяти, либо неэффективно получаете доступ к нашим данным, чтобы воспользоваться преимуществами кеша. Ознакомьтесь со статьями «Анализ пропускной способности памяти [Vertex|Texture]», чтобы узнать, как улучшить использование памяти для этих типов ресурсов.
![Принесите счетчики киосков](https://developer.android.com/static/images/agi/memory_efficiency-images/image8.png?authuser=19&hl=ru)