UWA代码堆栈,和代码性能瓶颈说“不”!

UWA代码堆栈,和代码性能瓶颈说“不”!

我们都知道在逻辑代码中,一些主函数很可能包含了成百上千行的子逻辑代码,要在这些子逻辑代码中层层定位、反复测试会耗去开发者本身就弥足珍贵的时间。

然而,今后的UWA测评中,我们让项目中逻辑代码的性能瓶颈一览无余。同时,该工具免费开放给所有开发者。


在这之前,UWA在逻辑代码方面,可以反馈性能占用最为耗时的Top10函数运行效率,并配合运行截图快速了解它们的性能瓶颈,如下图所示。
请输入图片描述

我们都知道,这些函数中很可能包含了成百甚至上千行逻辑代码。比如,我们发现一些项目的逻辑代码都是通过类似“GameMain.Update”这样的主函数来作为逻辑代码的整体入口的,成百的子函数、上万行代码都是通过它来进行调用。正因如此,今天我们推出“代码性能堆栈”这一新功能,帮助大家对耗时瓶颈进行快速定位和优化,以此来解决以上问题。
2.png
可以看出,我们将性能开销最大(CPU占用和堆内存分配)的Top10函数进行进一步拆分,并通过以下三种模式分析和定位其中的性能瓶颈,以帮助大家更加直观地定位性能瓶颈。


总体堆栈信息

总体堆栈信息是指将项目运行过程中的所有帧的相同函数/子函数开销进行统计,并按照总体占比进行排序。同时,我们对于重要的引擎性能参数进行统计和分析,主要包括Instantiate实例化操作、GameObject的Active和Deactive操作等等。这样,研发团队可直接通过总体堆栈信息就可以了解到逻辑代码的性能瓶颈。
UWA Tech Doc


场景堆栈信息

UWA不仅可以让您查看函数在整体运行期间的性能瓶颈,同时还可以让您查看它在指定场景的性能开销。您只需在模式中选择“所选帧场景的堆栈信息”,并且点击图表中想要查看的场景,即可查看该函数在该场景中的性能堆栈。

UWA Tech Doc


帧堆栈信息

当然,您肯定也希望能想看某一帧的代码性能瓶颈。为此,您只需选择“选定帧数堆栈信息”,在图表中点击您想查看的帧数,即可查看该函数在该帧的性能分配情况。结合项目的运行截图,让您对代码的运行效率了如指掌!

UWA Tech Doc


结合UWA API

最后,我们建议您使用UWA API中的 PushSample / PopSample功能 来自定义拆分和分析您关注的代码段。出于性能的准确性考虑,UWA并没有针对所有子函数进行性能分析,因为大量的打点操作会带来不必要的性能开销。正因如此,我们建议研发团队通过UWA API来更加灵活地对代码段进行拆分、更加准确地分析代码的性能开销。
请输入图片描述
以上则是UWA新功能——代码性能堆栈的简单介绍,希望通过该工具可以减少开发者反复测试定位问题的时间,从而将更多的精力集中在解决问题而不是发现问题上。当然,该功能是否省心还是由使用者说了算。欢迎大家在uwa官网(www.uwa4d.com)体验该功能,我们期待着大家的验证。