
红名分析器
代价是多少,宝贝?两块五,亲爱的。两块五。(ㆆ _ ㆆ)
查看大图[color=#e06666][size=6][b]- 简介 -[/b][/size][/color]
RedProfiler 是一个 RED4ext 插件,用于测量脚本本身:每帧中每个 mod、每个文件和每个函数在 RedScript VM 内花费的毫秒数,以及每个 Cyber Engine Tweaks mod 的 Lua 的相同数据。它还会统计它们的分配量,捕捉出现峰值的帧,并指出当时正在运行的是谁。
一个钩子挂在每个脚本主体都会经过的函数上,因此覆盖是完整的,而不是采样或猜测的,而且该钩子本身每帧的开销远低于十分之一毫秒。开始一次捕获,游玩一分钟,停止它,你就会在一个窗口中看到排名列表,以及一个可以在电子表格中排序的 CSV 文件文件夹。
[i]TL;DR - 哪个 mod 在吞噬你的帧数?现在你知道了。(ㆆ _ ㆆ)[/i]
[color=#e06666][size=6][b]- 它测量什么 -[/b][/size][/color]
[list]
[][b]RedScript 时间[/b],按 mod、按文件和按函数:独占时间(函数自身的函数体)、包含时间(包括其被调用者)、调用次数、每帧调用次数、最差单次调用,以及时间在主线程和工作线程之间的分配情况。[/]
[][b]Cyber Engine Tweaks 时间[/b],按 mod、按文件和按函数,显示为一个 CET mod,可下钻到 cet: 行。不要求安装 CET;当它存在时,它的 mod 就会出现在列表中。[/]
[][b]峰值[/b]:按脚本时间排序的最差帧,每一帧都带有在其期间运行的条目。会话加载、某个 mod 的 OnAttach、工作线程上的突发:它会指出是哪一个。[/]
[][b]内存[/b]:每个函数创建的对象和数组、变动字节数、每个 CET 函数分配和释放的 Lua 字节,以及净对象:某个函数创建且仍然存活的对象。持续攀升的净值就是泄漏。CLASSES 视图对每个 RTTI 类执行相同的操作。[/]
[][b]Lua 垃圾回收器[/b]步骤及其时间,以及 Lua 堆大小。[/]
[][b]原生调用细分[/b](可选,默认关闭):某个脚本函数把时间花在哪些引擎调用上。[/]
[/list]
原版脚本也会被测量,并作为一个 mod 显示,名为 Vanilla,这样某个 mod 的成本就有可比较的对象。
[color=#e06666][size=6][b]- 使用它 -[/b][/size][/color]
默认情况下,一次捕获会自行运行,从游戏运行的那一刻到你离开的那一刻,并在停止时写入其 CSV 文件。或者在 RCF 中心的 RedProfiler 页面中绑定开始/停止热键,只捕获你关心的时刻:一场战斗、一个区域、一个菜单。
安装 [b]RedWindows[/b] 后,停靠栏会获得一个 PROFILER 按钮。该窗口每半秒更新一次,在你游玩时保持固定,并有六个页面:MODS、FILES、FUNCTIONS、SPIKES、MEMORY 和 STATUS。点击某个 mod 查看其文件,点击某个文件查看其函数,点击表头按该列排序,点击 BACK 返回上一级。复选框决定是否列出 Vanilla、RedScript mod 和 CET mod,以及每一组是否折叠成单行,以便一眼比较整个集合。过滤字段将所有内容缩小到你指定的 mod,包括 CSV 文件。
每次捕获都会落在 [b]red4ext\plugins\RedProfiler\captures\<timestamp>\[/b] 中:summary.txt、mods.csv、files.csv、functions.csv、frames.csv、spikes.csv、memory.csv、memory_classes.csv、timeline.csv,以及当存在 CET 时的 cet_mods.csv 和 cet_functions.csv,还有当原生细分开启时的 natives.csv。时间以毫秒为单位,保留三位小数。timeline.csv 是每秒一次记录每个 mod 的已创建、已销毁和存活对象;泄漏会表现为一条只上升的线。
选项位于 [b]red4ext\plugins\RedProfiler\settings.txt[/b] 和 RCF 页面中,后者编辑同一个文件:每次会话都捕获、停止时写入 CSV、峰值阈值、内存分析、原生细分、包含和折叠开关、mod 过滤器,以及窗口列出多少行。
Mod Organizer 2 用户:捕获和设置文件会出现在你的 [b]overwrite[/b] 文件夹中,就像插件在运行时写入的每个文件一样。
[color=#e06666][size=6][b]- 解读数字 -[/b][/size][/color]
独占时间是一个函数自身代码的成本。包含时间则加上它调用的一切。按独占时间排名可以找到要修复的函数;按包含时间排名可以找到要归咎的功能。每帧调用次数将有分量的函数与被调用一万次的廉价函数区分开来,而后者是更常见的问题。
脚本进行的引擎调用内花费的时间会算作该脚本的独占时间。当你需要知道是哪个调用时,原生细分选项会将其分离出来。
工作线程时间是真实的 CPU 时间,但不总是帧时间:引擎会在其他线程上运行一些脚本。主列才是拖慢帧的那一列。
[color=#e06666][size=6][b]- 它不测量什么 -[/b][/size][/color]
[list]
[]脚本 VM 之外的任何内容:引擎工作、渲染、物理、流式加载和原生插件。一个通过归档文件或 RED4ext DLL 消耗你帧数的 mod 在这里是不可见的,目前如此。[/]
[]Lua 回调在自身内部把时间花在哪里。CET 覆盖是按回调计算的,即 CET 调用进入的函数。[/]
[]哪个 mod 拥有 Lua 内存。CET 只有一个堆;分析器看到的是每个函数的分配和释放速率以及总量。[/]
[]超出类大小的对象大小。在没有脚本运行时进行的引擎分配会归到 Engine 行。[/]
[/list]
它只适用于当前版本 2.31 的游戏,以及当前 CET,在撰写本文时为 1.37.1。
[color=#e06666][size=6][b]- 说明 -[/b][/size][/color]
先前成果:[url=https://github.com/giorgioherma/GRSP-CET-CapX_correlator]GRSP correlator[/url],作者 giorgioherma,它将 RedScript 分析器与 CET Runtime Profiler 和 CapFrameX 对齐。GRSP 测量的是插桩边;此插件位于 VM 本身之上,因此按照构造,每个脚本函数都计入其中。
日志位于 red4ext\logs\redprofiler-<date>.log。它会说明每个覆盖是否启动,以及上一次捕获写入到哪里,除此之外几乎没有别的内容。请将其附在错误报告中。
[color=#e06666][size=6][b]- 更新 -[/b][/size][/color]
[i][u]1.0.0[/u][/i] - 首次发布。
[color=#e06666][size=6][b]- 要求 -[/b][/size][/color]
此 mod 要求你安装以下内容:
[url=https://www.nexusmods.com/cyberpunk2077/mods/2380]RED4ext[/url]
[url=https://www.nexusmods.com/cyberpunk2077/mods/1511]Redscript[/url]
[url=https://www.nexusmods.com/cyberpunk2077/mods/30726]Redscript Configuration Framework[/url]
可选:
[url=https://www.nexusmods.com/cyberpunk2077/mods/32370]RedWindows[/url] 2.2.0 或更新版本,用于游戏内窗口。没有它,你仍然可以获得选项页面、热键和 CSV 文件。
[url=https://www.nexusmods.com/cyberpunk2077/mods/107]Cyber Engine Tweaks[/url] 在存在时会被测量,但不是必需的。
[color=#e06666][size=6][b]- 安装 -[/b][/size][/color]
1) 安装所有依赖项。
2) 将下载的文件解压到你的主游戏目录中。
[color=#e06666][size=6][b]- 卸载 -[/b][/size][/color]
删除目录 \Cyberpunk 2077\red4ext\plugins\RedProfiler
删除目录 \Cyberpunk 2077\r6\scripts\RedProfiler
没有信息被写入你的存档,因此可以在任何时候安全移除。
[color=#e06666][size=6][b]- 鸣谢 -[/b][/size][/color]
基于 psiberx 的 [url=https://github.com/psiberx/cp2077-red-lib]RedLib[/url] 和 WopsS 的 [url=https://github.com/WopsS/RED4ext.SDK]RED4ext.SDK[/url] 构建,二者均为 MIT。Lua 侧依赖 yamashi 的 [url=https://github.com/maximegmd/CyberEngineTweaks]Cyber Engine Tweaks[/url](MIT)已经公开的关于其自身状态的信息。
感谢 RED4ext 和 Redscript 社区提供的工具和文档。
[center][size=2]DigitalVixen mod 套件的一部分。[/size][/center]
[center][size=2]你现在可以在 Discord 上找到我 [url=https://discord.gg/TRuuDSrGWJ]这里![/url][/size][/center]
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。