SystemUI Graphics内存分析
来源:飞书 docx(obj_token: Su4HdNmzAouERLxnV2jcnsxEntg)
说明:本文档共 7 张图片,均因飞书侧 403 无法下载;正文以”图片描述”引用块保留原图说明,便于后续人工补图。文档末尾附带 1 个 zip 附件(解析工具),同样因 403 无法拉取,已记录 token。
一 数据来源
Graphics内存的分析数据是由内存工具采集来的,工具指导可参考:内存日志采集和解析工具使用指导,需要采集showmap及gfxinfo数据,供后续解析;
二 数据解析
使用下方提供的解析工具,解析showmap与gfxinfo,使用说明可通过help方式获得,解析完成后可以获取详细分类数据,参考其中GL_DEV,EGL,GL及Graphics数据,进行横向对比;数据具体来源如下:
(1)GL_DEV:通过汇总showmap中含有关键字”kgsl-3d0”的对象内存信息获取;
(2)EGL:通过汇总showmap中含有memtrack(EGL)关键字的对象获取,但一般为空;如果从showmap中获取失败,会继续从gfxinfo中解析GraphicBufferAllocator的大小,将该值认为是EGL的pss与rss;(pss与rss一致)
(3)GL:情况与EGL类似,showmap中汇总的是memtrack(GL);gfxinfo中解析的是Total GPU memory;
例如使用工具解析完P1、VIVOX200U、Magic8Pro的数据汇总后,对比如下:
| category | P1 | VIVOX200U | Magic8Pro |
|---|---|---|---|
| SystemUI Graphics内存对比(单位:KB) | |||
| GL_DEV | 2000 | 752 | 3100 |
| EGL | 6468 | 22287 | 4352 |
| GL | 11676 | 6433 | 8969 |
| Graphics(total) | 20144 | 29472 | 16421 |
表格来源:飞书 sheet OXrBsL8RVhahzTt5UL6c6LG3nhc(工作表 Www5uo)
从对比数据中可以明确,Graphics内存上,P1是优于VIVO;但是比Magic8Pro差,差距有3723KB;
下一步就要依据gfxinfo进行进一步的拆解;
三 问题分析
1. GL_DEV
该部分代表的是GPU驱动部分的数据,数据是从showmap的获取的,采用的是kgsl的内存映射信息,可供分析的信息有限。这部分的问题定位可以查看gfxinfo中的CPU memory进行比对,如下:
📷 图片描述:图片展示了P1、VIVO、Magic8Pro三个版本在CPU memory方面的数据对比。P1的Glyph Cache为832.00 bytes,Glyph Count为2,Total CPU memory usage为832 bytes;VIVO的Glyph Cache为11.78 KB,Glyph Count为10,Total CPU memory usage为12059 bytes;Magic8Pro的Glyph Cache为7.16 MB,Glyph Count为180,Total CPU memory usage为7504592 bytes。该图片与文档中对字体加载缓存问题的分析相关,用于直观呈现不同版本在字体缓存方面的内存使用情况。| token:
WYwobf9eYoh8D8xax4VcWC0Cnjd
该部分表示的是字体加载缓存,优化后的版本状态,字体加载部分P1优于竞品;对比P1优化前的版本数据,如下:
📷 图片描述:图片展示的是P1优化前版本的字体缓存相关数据。其中,CPU Caches部分突出显示了Glyph Cache的大小为1.80 MB,包含1个条目,Glyph Count为128。该图片与文档中”2.EGL”部分上下文相关,用于对比分析P1的字体缓存情况,发现P1对字体进行全量加载,内存使用较大,可进行优化。| token:
Dbh9bXn6LovjHHxCJe4cnplnnRf
P1的字体缓存在2M左右,联合业务侧进一部分拆解分析发现,P1对字体是进行全量加载,没有按需加载,所以内存使用较大,可进行优化;
2. EGL
该部分代表的是图形相关的中间层,可以查看gfxinfo中的GraphicBufferAllocator信息,如下
📷 图片描述:图片展示了P1的GraphicBufferAllocator缓冲区信息。其中,Buffer ID为0x0000000000000000的Buffer,宽高均为228.0 KB,Stride为48,Layers为12,Format为0x10000000,Usage为0x100000000,Requstor为Navigation栏(BLAST Consumer)0。此外,还列出了Imported buffer的详细信息,如Buffer ID、宽高、Stride、Layers、Format、Usage、Requstor等。该图片与文档中对P1在EGL部分内存开销分析的内容相关,用于展示具体内存分配情况。| token:
C1WebW3tMo9tthxT3I0cMbRKn8e
📷 图片描述:图片展示了VIVO系统中GraphicBufferAllocator的缓冲区分配情况。列出了Handle、Size、W(Stride)x H、Layers、Format、Usage、Requester等信息,如Wallpaper#0、VRI(StatusBar#3)等缓冲区的大小、格式、使用情况等。底部显示Total allocated by GraphicBufferAllocator( (estimate)为22287.00 KB,Total imported by gralloc为22608.00 KB。该图片与文档中对EGL部分的分析相关,用于说明VIVO在图形相关中间层的内存使用情况,对比P1等版本进行优化分析。| token:
CpjBb1iBYoicD9xwc9KcHBWwnWe
📷 图片描述:图片展示的是MagicOS Pro的GraphBufferAllocator信息。画面中列出了多个Buffer的详细数据,包括Buffer ID、Size、Stride、Width、Height、Layers、Format、Usage、Requester等信息。其中,Buffer ID为0x00000000的Buffer,Size为35.85 KB,Width为61,Height为240,Format为0x1,Requester为ImageReader@63140f12c21616c266431。该图片与文档中对EGL部分的分析相关,用于对比P1与VIVO等竞品在图形相关中间层的内存开销情况。| token:
RNggbaLeOog55kx3UwWcay1rnWf
P1的内存比VIVO明显小很多,展开数据可以发现,VIVO在这里引入了两个壁纸buffer(Wallpaper),这部分带来了20196KB的开销,剔除这部分后,P1的表现比VIVO、Magic都差;对比分析,P1的SatusBar有两类(SatusBar和SatusBar1),且数量也多,业务进一步排查后明确:
(1)P1采用的是双状态栏,相关开销多了一倍,可以优化成单状态栏;
(2)对比VIVO,状态栏图标规格是1200x144的,VIVO是1080x123,存在优化空间;(更改量较大,涉及产品设计,暂时不考虑);
(3)数据场景采用的是全面屏手势,但是导航栏也被加载了(NavigationBar0);
3. GL
该部分代表的图形库的开销,可以通过gfxinfo中GPU memory信息进行比对,如下:
📷 图片描述:图片展示了P1、VIVO、Magic3Pro三款手机在GPU memory方面的数据对比。左侧P1的GPU memory使用情况,Surface占用82.87 MB,Texture占用4.67 MB等;中间VIVO的GPU memory使用情况,Surface占用82.41 MB,Texture占用6.06 MB等;右侧Magic3Pro的GPU memory使用情况,Surface占用82.41 MB,Texture占用6.06 MB等。该图片与上下文紧密相关,用于直观呈现三款手机在GPU memory方面的具体数值,辅助分析和对比。| token:
QZ7KbkuP6oUf7XxCIPYcq1KgnYf
P1的有详细信息,其它竞品只有分类汇总的信息,从分类项中可以明确:
(1)P1中的RenderTarget明显大于其它竞品,有6.29MB;
(2)通过展开的详细信息,发现存在2048x2048这种大规格资源处理,不太符合业务逻辑;联合图形领域抓帧分析,发现该资源是TextAtlas,由图形为了加速渲染自己打包的字体渲染合集,通过viov抓帧,也发现类似情况;但是该资源图是否可以降低规格,值得探讨尝试;
📷 图片描述:图片展示的是Texture Viewer界面,用于分析应用的图形内存。界面左侧显示纹理内容,呈现黑色背景上红色像素块的纹理图,右侧是纹理的灰度图。下方有”Inputs”和”Outputs”标签页,当前显示”Outputs”标签页,内容为黑色背景上显示”16:10”等信息。该图与文档中应用graphics内存分析上下文相关,直观呈现了纹理内容,辅助分析应用图形内存情况。| token:
EcFfbAL1Lo2eTUxxFDcch7sDnZd
🍰 如上即应用graphics内存分析的初步手段,当前的分析手段还较为粗糙,分析方法及相关工具还在进一步演进;同时也欢迎相关专家进行指导&探讨;
附件:Graphics内存解析工具(zip)(token: ZxsobaK1OoUe1ux8qCPcTA2Pn8d,mime: application/x-zip-compressed;飞书侧 403,未能下载到本地,待人工补齐)