Camera有很多涉及算法的场景,而且每个场景里面buffer的创建与释放也总是有着跟随其算法的特定规律,在这些过程中总会不可避免的出现一些内存泄漏的相关问题需要我们进行分析,本文及以后的几篇文章就对这些算法流程及memory变化定位问题堆栈的方法以及节点进行一些分析,以便以后继续追踪问题与完善技术。
一、不同算法的memory消费监控
1.普通的拍照模式
每次拍照会增加5M的Memory,占用较大memory会进行一些释放
2.加载HDR算法
每次拍照会增加10M左右Memory,增加到一定程度会释放。正常流程下,java堆栈增加10M,native堆栈增加1.5M左右memory。
3.双摄虚化模式
每一次会增加大概10M左右的memory,java堆栈增加10M左右,native堆栈增加0.5M左右。
4.单摄虚化模式
mode初始化占用108M memory,每次拍照占用3M memory,最大占用120M左右的memeory之后会释放。
5.AI 108M超清算法模式
Mode初始化阶段memory占用为152M,每次拍照会分为算法处理的不同几个阶段,memeory占用最高为490M左右,拍照完成后对Memory进行对比分析,第一次拍照完成后为196.7M,第二次拍照完成后为204.6M,第三次拍照完成后为204.7,后面的几次拍照完成后memeory并没有增加。
6.全景模式
Mode初始化阶段占用375M memeory,每次拍照会占用memeory最高可达700M,之后会进行释放。
7.美颜模式
每一次波动的波动和波峰间native堆栈信息基本不变,java堆栈会增加40M左右的消耗。
总结
本章仅仅是对不同算法场景下的memory进行监控,但是对于判断是否发生内存泄漏等问题,仅仅是靠memory的监控机制是不好下确定的定论,之后仍会用3-4篇左右的文章去借用memory、系统的dump信息以及meminfo等信息对泄漏的场景以及内存异常的场景的具体定位进行分析与处理。