UDK脚本函数性能工具
数据采集
游戏中使用控制台命令来采集脚本函数性能数据
ProfileGame Start // 开始捕获性能数据
ProfileGame Stop // 停止捕获并保存数据文件,并保存到[GameName]\Profiling\T-YYYY.MM.DD-hh.mm.ss.gprof文件中
ProfileGame 15 // 开始捕获一个时长为15s的性能数据到[GameName]\Profiling\T-YYYY.MM.DD-hh.mm.ss.gprof文件中
基本概念
Time Threshold(时间阈值):用来过滤,只显示大于时间阈值的数据
Incl(包含时间):包括了子函数执行时间的总执行时间
excl(独占时间):不包括子函数执行时间的函数体执行时间,函数执行本身花费的时间
GameplayProfiler简介
使用GameplayProfiler工具进行数据可视化分析 udn中文 udn英文
① GameplayProfiler使用C#编写,依赖一个名为MSChart的.net表格控件。因此,在运行该工具前,需要安装该组件
② GameplayProfiler.exe可执行程序在Binaries目录下可以找到,其源码在Development\Tools\GameplayProfiler目录中
GameplayProfiler说明:
① 通过FileOpen按钮来打开一个gprof格式的性能数据文件。如下图:T-2018.07.03-19.21.15.gprof
曲线图可以拖拽放大,放大后可以看到这个文件记录了0~1123帧的性能数据
② 绿线表示每帧花费的时间,蓝线表示每帧执行脚本花费的时间 -- 注:单位为ms
通过这两条线可以看出:是否所有的帧时间峰值(瞬卡)和脚本或游戏性更新有关
③ 下面例子中,选择第772帧,并将Time Threshold(时间阈值)设置为0.18ms(即:只显示大于0.18ms的数据)
注:在文本框中输入0.18,回车会变成0.2(文本框设置了0.1的最小精度,工具bug导致),但实际上还是应用了0.18的阈值
frame actor/ class call graph
列出某帧中所有Actor对象的脚本函数执行时间超过Time Threshold的调用栈(降序)


① 左边按照Actor所在关卡进行归类,前面的数值为incl(包含时间,单位ms)
② 右边按照Actor类型进行归类,前面的数值为incl(包含时间,单位ms),后面的3 excl, 69 incl表示时间阈值设置为0时,直接Child节点个数为3,所有Child节点个数为69
frame function summary
列出某帧中incl(包含时间)超过Time Threshold的脚本函数(降序)


① calls:当前帧调用的次数
incl. per call = incl. / calls,单位ms
excl. per call = excl. / calls,单位ms
② 点击对应列可以对数据进行升序降序排列
frame class hierarchy
按照继承树列出某帧中incl(包含时间)超过Time Threshold的Actor实例、ActorComponent实例、Function(降序)


① 各个实例对象前面的数值为incl(包含时间,单位ms)
frame function call graph
列出某帧中脚本函数累计执行时间的调用栈(降序) -- 不进行Time Threshold过滤


① 各个实例对象前面的数值为incl(包含时间),单位ms
aggr. function summary(aggregate function summary,合计函数概要)
整段性能数据(所有帧)的脚本函数执行时间统计信息(降序) -- 不进行Time Threshold过滤


① incl.为整段性能数据(所有帧)包含时间之和
max incl.为整段性能数据(所有帧)中包含时间为最大的一帧的数值
excl.整段性能数据(所有帧)独占时间之和
max excl.为整段性能数据(所有帧)中独占时间为最大的一帧的数值
calls为整段性能数据(所有帧)函数调用次数之和
avg calls / frame 平均每帧函数调用次数
incl. per frame 平均每帧函数的包含时间
excl. per frame 平均每帧函数的独占时间
② 点击对应列可以对数据进行升序降序排列
③ 上图红色和深红色曲线分别为选中3个函数:UTGame.TGHUD.PostRender、UTGame.TGPlayerController.ReplicateMove、TGADBase.TGADBaseHUD.TraceActorEX的每帧的incl.(包含时间)和excl.(独占时间)数据
aggr. function call graph(aggregate function call graph,合计函数调用栈)
整段性能数据(所有帧)的脚本函数执行时间的调用栈(降序) -- 不进行Time Threshold过滤


① 脚本函数前面的数值为累计incl(包含时间 单位ms)和调用次数
② 上图红色和深红色曲线分别为Engine.PlayerController.PlayerTick的每帧的incl.(包含时间)和excl.(独占时间)数据
UDK脚本函数性能工具的更多相关文章
- 手把手教你掌握——性能工具Jmeter之参数化(含安装教程 )
本节大纲 Jmeter 发送get/post请求 Jmeter 之文件参数化-TXT/Csv Jmeter之文件参数化-断言 JMeter简介 Apache JMeter是一款基于JAVA的压力测试T ...
- Linux性能优化 第八章 实用工具:性能工具助手
8.1性能工具助手 Linux有丰富的工具,这些工具组合来使用会更加强大.性能工具也一样,单独使用虽然也没有问题,但是和其他的工具组合起来就能显著提高有效性和易用性. 8.1.1 自动执行和记录命令 ...
- Linux性能优化 第五章 性能工具:特定进程内存
5.1 Linux内存子系统 在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的.在顶层,操作系统决定如何利用交换内存和物理内存.它决定应用程序的哪一块地址空间将被放 ...
- Linux性能优化 第三章 性能工具:系统内存
3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...
- 善用性能工具进行SQL整体优化
SQL优化是一个复杂的工程,首先要讲究从整体到局部.今天我们首先学习关于数据库整体优化都有哪些性能工具,接着分析这些工具的特点,并结合案例进行探索,最后再进行总结和思考. 总体学习思路如下图所示: 都 ...
- unity中三种调用其他脚本函数的方法
第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名()第二种,GameObject.Find("脚本所在的物体的名字").SendMessage(" ...
- Linux性能工具介绍
l Linux性能工具介绍 p CPU高 p 磁盘I/O p 网络 p 内存 p 应用程序跟踪 l 操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l 应用程序的性能问题/功能问 ...
- Linux 性能工具 - sar学习
简介 sar是一款在linux下的性能工具,可以观察到CPU,内存,IO,运行队列,每秒上下文切换等信息. 软件工具安装 #Ubuntu sudo apt-get install sysstat # ...
- unity中调用其他脚本函数的方法(小白之路)
第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名().很不实用-- 第二种,GameObject.Find("脚本所在物体名").SendMessage(& ...
随机推荐
- [Swift]LeetCode839. 相似字符串组 | Similar String Groups
Two strings X and Y are similar if we can swap two letters (in different positions) of X, so that it ...
- Docker for windows : 安装linux
一.Linux 1.拉取镜像 docker pull hub.c..com/library/oraclelinux:latest 2.创建linux容器 C:\Users\K-Jso>docke ...
- (转)iOS学习——UIlabel设置行间距和字间距
在iOS开发中经常会用到UIlabel来展示一些文字性的内容,但是默认的文字排版会觉得有些挤,为了更美观也更易于阅读我们可以通过某些方法将UIlabel的行间距和字间距按照需要调节. 比如一个Labe ...
- HBase篇--HBase常用优化
一.前述 HBase优化能够让我们对调优有一定的理解,当然企业并不是所有的优化全都用,优化还要根据业务具体实施. 二.具体优化 1.表的设计 1.1 预分区 默认情况下,在创建HBase表的时候会自 ...
- Java核心技术及面试指南 多线程部分的基本面试题总结以及答案
7.1.5 (1) 如果某个类已经继承(extends)了一个类,那么让这个类具有多线程的特性? implements runnable类或通过线程池 7.1.5 (2)启动一个线程是用run()还 ...
- qt 多语化
最近项目使用的qt版本升级,导致了界面乱码问题,因此最后决定利用qt的多语化机制,来解决乱码问题,首先感谢这两篇文字的帮助,在此加上作者链接:Qt之多语化和Qt多国语言的实现与切换(国际化) ...
- 设计模式的征途—4.抽象工厂(Abstract Factory)模式
上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...
- Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy
1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...
- Numpy 基础学习
numpy.array() 功能:创建一个数据 vector = numpy.array([1,2,3,4]) matrix = numpy.array([1,2,3,4],[11,12,13,14] ...
- Servlet+Tomcat总结
Tomcat的缺省端口是多少,怎么修改 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml ...