时间优化是Kanzi应用中最常见的优化项,定位启动时间则是启动优化过程中最为重要的一环。通常,Kanzi工程的优化方法是不断的把工程模块进行删除细化,每删除一个模块,需测试一次,重复以上步骤直到完成。但是,定位一个点往往需要重复几次甚至十几次,这种方法对于小工程尚可,当工程量很大时,就需要花费很长的时间。今天我们将要介绍的方法不管是大工程还是小工程,只需轻松几步,一次就能定位到所有的模块,这种方法就是在3.6.3版本中引入的Resource Profiling功能。下面就来看看,如何应用这个功能。
Step 1:把dumpProfiling()的代码添加到你的主程序中;
伪代码如下:
void dumpProfiling()
{
//获取资源分析数据;资源包括各种节点、图片、模型、shader等等。
getResourceManager()->getResourceProfiler();
//把数据输出到文件“resource_profiling.json”里,
kanzi::ofstream out("resource_profiling.json");
//获取主消息队列的分析数据
getDomain()->getMainLoopTaskProfilerRegistry();
//获取启动的分析数据
getStartupProfilerRegistry();
//获取自定义的分析数据
kzProfilingGetDefaultRegistry();
//把以上三种数据一起输出到文件“application_profiling.json”里
kanzi::ofstream out("application_profiling.json");
}
Step 2:添加一个计时器用于触发这个功能;
Step 3:把以上工程编译好后在目标平台上运行,此时会生成两个文件—application_profiling.json 和 resource_profiling.json;
Step 4:把这两个文件拷贝到profiling.py文件目录下,运行profiling.py文件,生成一个tracing.json文件;
profiling.py文件的作用:把application_profiling.json 和 resource_profiling. json里面的数据重新排版,生成tracing.json文件。(tracing.json文件是可用于Chrome浏览器上,并能够被“开发者工具”解析、绘制成图表的文件。)
Step 5:打开Chrome浏览器,通过快捷键Shift+Ctrl+i打开“开发者工具”,在performance选项卡下,点击鼠标右键,导入tracing.json文件,你将看到以下的内容:
上图展示了从程序运行到所有执行过的代码所消耗的时间的详细信息。
以Kanzi Engine下的Scroll_view工程为例,通过上述步骤,我们得出了上图中的测试结果。

在Summary里可以看到这个执行总耗时的详细数据;同时,在Event Log里,也可以看到每个模块的耗时情况及执行逻辑,如下表:
在这个例子里,我们可以看到模板StreetNameButton耗时较长,需要282.5ms。
一般来讲,在实际项目中我们定位到的耗时较长的点,通常是Kanzi中的相关节点,如加载一些较大的图片或模型,或是状态机中有大量图片,又或是使用了复杂的shader效果导致的。通过以上方法,我们可以快速定位性能瓶颈,从而可以针对性地进行优化了。
如此方便快捷的Kanzi性能优化利器,大家还在犹豫什么,赶紧用起来吧!
注:文中提到关于dumpProfiling()的函数及文件profiling.py因篇幅原因未能展示,如读者有需求,可联系我司进行免费提供,感谢您的支持!
相关精彩推荐:
帧缓存(FrameBuffer)与Kanzi Render Pass

