程序设计中的Profile工具(代码)
一: 何时profile?
profile代码只是在需要的时候才出现,可以肯定的是发布给最终用户的程序是不应该包含profile代码的,所以采用一个宏FSE_BUILD_PROFILE来标示当前需要profile代码.
#if defined(DEBUG)
#define FSE_BUILD_PROFILE
#elseif defined(RELEASE)
#define FSE_BUILD_PROFILE
#else //RETAIL, final release
#undef FSE_BUILD_PROFILE
#endif
二: profile 什么?
profile主要是为测试出程序的性能及瓶颈所在,为最后的optimize提供基础.所以可以发现主要需要提供三个方面的内容: 内存使用量, 时间使用量, 函数调用次数.
对于profile需要监视总体的数据量(如总内存量)和每个渲染桢的相关数据(可能是多个桢的平均值) .
三: 接口设计及简单实现思路
(一) 桢相关profile
-
Enable( BOOL enable);
-
BegineFrame();
-
EndFrame();
(二) 统计相关profile
1) IncreaceStats();
2) DecreaceStats();
3) ResetStats();
(三) 函数调用相关profile
1) IncreaceCallCount();
2) IncreaceCallTime();
(三) 内存监控
通过统计所有的new/malloc和delete/free得到所有的内存分配情况.
(四) 通过跟踪过程执行前后的时间差就可以得到过程执行的时间性能.
(五) 在函数执行前后增加特定的static变量,每次程序执行时进行相关统计(如调用计数).注:由于相关冗余较大,尽量减少使用量,只对于关键函数进行相关处理.
具体详细代码稍候上传,欢迎指正,提高性能和使用性。