数据采集

游戏中使用控制台命令来采集脚本函数性能数据

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脚本函数性能工具的更多相关文章

  1. 手把手教你掌握——性能工具Jmeter之参数化(含安装教程 )

    本节大纲 Jmeter 发送get/post请求 Jmeter 之文件参数化-TXT/Csv Jmeter之文件参数化-断言 JMeter简介 Apache JMeter是一款基于JAVA的压力测试T ...

  2. Linux性能优化 第八章 实用工具:性能工具助手

    8.1性能工具助手 Linux有丰富的工具,这些工具组合来使用会更加强大.性能工具也一样,单独使用虽然也没有问题,但是和其他的工具组合起来就能显著提高有效性和易用性. 8.1.1 自动执行和记录命令 ...

  3. Linux性能优化 第五章 性能工具:特定进程内存

    5.1 Linux内存子系统 在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的.在顶层,操作系统决定如何利用交换内存和物理内存.它决定应用程序的哪一块地址空间将被放 ...

  4. Linux性能优化 第三章 性能工具:系统内存

    3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...

  5. 善用性能工具进行SQL整体优化

    SQL优化是一个复杂的工程,首先要讲究从整体到局部.今天我们首先学习关于数据库整体优化都有哪些性能工具,接着分析这些工具的特点,并结合案例进行探索,最后再进行总结和思考. 总体学习思路如下图所示: 都 ...

  6. unity中三种调用其他脚本函数的方法

    第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名()第二种,GameObject.Find("脚本所在的物体的名字").SendMessage(" ...

  7. Linux性能工具介绍

    l  Linux性能工具介绍 p  CPU高 p  磁盘I/O p  网络 p  内存 p  应用程序跟踪 l  操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l  应用程序的性能问题/功能问 ...

  8. Linux 性能工具 - sar学习

    简介 sar是一款在linux下的性能工具,可以观察到CPU,内存,IO,运行队列,每秒上下文切换等信息. 软件工具安装 #Ubuntu sudo apt-get install sysstat # ...

  9. unity中调用其他脚本函数的方法(小白之路)

    第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用-- 第二种,GameObject.Find("脚本所在物体名").SendMessage(& ...

随机推荐

  1. [Swift]LeetCode300. 最长上升子序列 | Longest Increasing Subsequence

    Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...

  2. [Swift]LeetCode454. 四数相加 II | 4Sum II

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l)there are such th ...

  3. 接口平台经常报server internal error(500)错误

    查询日志,发现连接mysql报错,web页面显示server internal error(500) 解决方法:重启mysql服务器 systemctl start mysqld #安装mysql # ...

  4. Vue中实现一个无限加载列表

    参考 https://www.jianshu.com/p/0a3aebd63a14 一个需要判断的地方就是加载中再次触发滚动的时候,不要获取数据. <!DOCTYPE html> < ...

  5. C# 当中 LINQ 的常规用法(Lambda 方式)

    仅以本篇博文记录 LINQ 相关操作的基本知识,原型参考自 MSDN 相关知识,中间加以自己的理解与 DEMO. 1. IEnuemrable<T>.Select() Select 方法比 ...

  6. Python内置函数(26)——globals

    英文文档: globals() Return a dictionary representing the current global symbol table. This is always the ...

  7. 使用ML.NET和Azure Function进行机器学习 - 第1部分

    介绍 一提到机器学习,总是让人望而生畏.幸运的是,Azure正在想方设法让开发人员更容易进入机器学习.ML.NET是Microsoft Research专为.NET开发人员开发的机器学习框架,因此您可 ...

  8. asp.net core 系列 14 错误处理

    一.概述 本文介绍处理 ASP.NET Core 应用中常见错误的一些方法.主要是关于:开发环境异常页:非开发环境配置自定义异常处理页:配置状态代码页(没有正文响应,http状态400~599的). ...

  9. git - 管理项目(SourceTree的使用)

    Git 相关命令操作全 1.SourceTree 是什么? SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作.同时它也是M ...

  10. 产品研发团队如何融合OKR与Scrum敏捷开发?

    「 OKR 」现在非常的火爆,很多公司都在使用,不仅国外的 Google.英特尔等大公司在用,国内的一线知名互联网企业今日头条和一些创业团队也都在使用. 那为什么「 OKR 」这么受欢迎呢,因为把它可 ...