Android 内存转储中的 EGL 和 GL mtrack 是什么

What is EGL and GL mtrack in Android Memory Dump

我目前正在开发一个混合应用程序,该应用程序显示出一些我正在尝试调试的特殊内存使用情况。应用程序一启动,它似乎立即使用了将近 250MB 的内存,考虑到我们此时加载的只是登录屏幕,这似乎过分了。我一直在寻找 Android 的一些内存分析工具(Xamarin 分析器和 SDK 附带的 android 分析器),但它们都显示出相对较低的堆使用率(~10-15MB,我正试图放下)。我 运行 "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,和未知。是否有关于这些类别是什么或为什么它们会变得如此庞大的文档?

谢谢

EGL 和 GL 基本上显示了图形层消耗的内存。我确定您是 Android 棒棒糖设备上的 运行 adb shell dumpsys meminfo 命令。实际上lollipop中修改了dumpsys meminfo tool/command来计算和显示显存。

在旧版本(KitKat 或更旧版本)中,您找不到 EGL 和 GL 信息,尽管图形在 KitKat 或更旧版本中也消耗内存。

这是我们可以请求 Google 更新他们的文档来解释新的内存组件。简而言之,您可以说这是 Android 文档中的错误。他们应该根据 adb shell dumpsys meminfo tool/command.

的最新实施更新它

参考文献:

EGL - http://en.wikipedia.org/wiki/EGL_(API)

GL - http://en.wikipedia.org/wiki/OpenGL

GL mtrack 是驱动程序报告的 GL 内存使用情况。它主要是 GL 纹理大小、GL 命令缓冲区、固定全局驱动程序 RAM 开销等的总和。

EGL mtrack 是 gralloc 内存使用情况。它主要是 SurfaceView/TextureView.

的总和