Что такое EGL и GL mtrack в дампе памяти Android
В настоящее время я работаю над гибридным приложением, которое демонстрирует некоторые особенности использования памяти, которые я пытаюсь отлаживать. Как только приложение запускается, кажется, что он сразу использует около 250 МБ памяти, что кажется чрезмерно заданным, что все, что мы загрузили в этот момент, - это экран входа в систему. Я искал несколько инструментов профилирования памяти для Android (профайлер Xamarin и профилировщик андроидов, поставляемый с SDK), но все они показывают относительно низкую загрузку кучи (~ 10-15 МБ, которую я пытаюсь спуститься). Я запустил "adb shell dumpsys meminfo APPNAME -d" и получил следующую трассировку:
** MEMINFO in pid 24925 [APPNAME] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 19439 19396 0 0 28672 22915 5756
Dalvik Heap 15441 14992 0 0 37319 36837 482
Dalvik Other 542 368 0 0
Stack 432 432 0 0
Ashmem 17388 16508 880 0
Gfx dev 40538 34504 0 0
Other dev 4 0 4 0
.so mmap 6211 224 3080 0
.apk mmap 10531 0 10232 0
.ttf mmap 453 0 260 0
.dex mmap 1263 0 980 0
.oat mmap 635 0 152 0
.art mmap 707 516 24 0
Other mmap 452 4 52 0
EGL mtrack 63508 63508 0 0
GL mtrack 79116 79116 0 0
Unknown 21756 21756 0 0
TOTAL 278416 251324 15664 0 65991 59752 6238
Я пытался понять, что это означает, используя документацию, представленную по адресу: https://developer.android.com/tools/debugging/debugging-memory.html, но на этой странице нет никакой информации о самые большие виновники: Gfx dev, EGL mtrack, GL mtrack и Unknown. Есть ли какая-то документация о том, что представляют собой эти категории или почему они будут расти настолько большими?
Спасибо
Ответы
Ответ 1
EGL и GL показывают здесь память, потребляемую в основном графическим слоем. Я уверен, что вы запускаете adb shell dumpsys meminfo
на устройстве Android lollipop. На самом деле инструмент/команда dumpsys meminfo был изменен в lollipop для вычисления и отображения графической памяти.
В старой версии (KitKat или более ранней) вы не можете найти информацию EGL и GL, хотя графика использует память в KitKat или более старых версиях.
Это мы можем попросить Google обновить их документацию, чтобы объяснить новые компоненты памяти. Вкратце можно сказать, что это ошибка в документации Android. Они должны обновить его в соответствии с последней реализацией утилиты/команды adb shell dumpsys meminfo
.
Рекомендации:
EGL - http://en.wikipedia.org/wiki/EGL_(API)
GL - http://en.wikipedia.org/wiki/OpenGL
Ответ 2
GL mtrack - это использование памяти GL с драйверами. Это прежде всего сумма размеров текстур GL, буферов команд GL, фиксированных глобальных накладных расходов RAM и т.д.
EGL mtrack - использование памяти gralloc. Это прежде всего сумма SurfaceView/TextureView.