Что такое 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.