cocos creator 3.8如何在代码中打印drawcall,fps

news/2025/3/15 1:20:01/

​Profiler 模块

新版的cocos creator3D已经把dc,fps统一放到这个Profiler模块里了,在源码的位置是:
Web路径:engine/cocos/profiler/profiler.ts
原生路径:engine/native/cocos/profiler/Profiler.cp

Profiler 是 Cocos Creator 3D 引擎内置的性能分析工具,主要用于实时监控游戏运行时的核心指标,包括:

  • 核心状态:FPS、帧耗时、GPU 类型、多线程状态等。
  • 对象统计:渲染节点数量、对象实例数量及其峰值。
  • ​内存统计:内存分配总量、对象计数及峰值。
  • 性能统计:各代码块(如渲染、逻辑)的耗时分布及调用频率。

profiler.stats

我们核心状态信息都在这个profiler.stats里,如果项目需要再界面上显示dc,fps等信息,可以在这里获取
在这里插入图片描述

stats 字段全解析

statsIProfilerState 类型的对象,用于存储引擎运行时的核心性能指标。以下是其所有字段的详细含义:


1. fps(帧率)

作用:实时显示每秒渲染的帧数(Frames Per Second)。
理想值:≥ 60(流畅),30 ≤ FPS < 60(可接受),< 30(卡顿)。
监控点:游戏整体性能的核心指标,反映设备负载和代码效率。
数据来源:通过 PerfCounter 每帧计算时间差统计。


2. draws(绘制调用次数)

作用:统计每帧的 Draw Call 数量。
优化关键:Draw Call 过多会显著降低渲染性能(尤其在移动端)。
合理范围:移动端建议 ≤ 100,PC 端可放宽至 200~300。
数据来源:通过 device.numDrawCalls 获取 GPU 提交的绘制指令次数。


3. frame(帧时间)

作用:统计每帧的总耗时(毫秒)。
计算公式帧时间 = 1000 / FPS
性能瓶颈:若帧时间波动大(如突增至 50ms),需定位耗时操作。
数据来源:记录从 beforeUpdateafterPresent 的完整帧生命周期时间。


4. instances(实例化数量)

作用:统计每帧的 GPU Instancing 实例化对象数量。
优化手段:高 instances 值表明有效利用了实例化技术,降低 Draw Call。
合理值:根据场景复杂度动态调整,无固定上限。
数据来源:通过 device.numInstances 获取实例化渲染的提交次数。


5. tricount(三角形数量)

作用:统计每帧渲染的 三角形总数
性能影响:三角形过多会导致顶点处理负载过高(尤其移动端)。
合理值:移动端建议 ≤ 10 万/帧,PC 端可适当放宽。
数据来源:通过 device.numTris 获取 GPU 处理的三角形总数。


6. logic(逻辑耗时)

作用:统计游戏逻辑(update 生命周期)的耗时(毫秒)。
优化重点:若 logic 耗时高,需检查脚本中的复杂计算或循环。
合理范围:建议 ≤ 5ms/帧。
数据来源:记录 beforeUpdateafterUpdate 的时间差。


7. physics(物理耗时)

作用:统计物理引擎计算(碰撞检测、刚体模拟)的耗时(毫秒)。
优化手段:简化碰撞体形状、减少物理对象数量。
合理范围:建议 ≤ 5ms/帧。
数据来源:记录 beforePhysicsafterPhysics 的时间差。


8. render(渲染耗时)

作用:统计渲染管线(场景裁剪、材质提交、Draw Call 执行)的耗时(毫秒)。
优化关键:高 render 值需优化材质复杂度、减少渲染对象。
合理范围:建议 ≤ 10ms/帧。
数据来源:记录 beforeDrawafterRender 的时间差。


9. present(呈现耗时)

作用:统计将帧缓冲区提交到屏幕的耗时(毫秒)。
平台差异:移动端受垂直同步(VSync)影响较大。
异常值:若 present 突增,可能因分辨率过高或 GPU 负载过载。
数据来源:记录 afterRenderafterPresent 的时间差。


10. textureMemory(纹理内存)

作用:统计显存中 纹理资源 占用的内存总量(单位:MB)。
优化手段:使用压缩纹理格式(如 ASTC、PVRTC),及时释放未用纹理。
合理值:根据设备显存容量动态控制。
数据来源:通过 device.memoryStatus.textureSize 获取。


11. bufferMemory(缓冲区内存)

作用:统计显存中 缓冲区对象(顶点/索引/Uniform 缓冲区)占用的内存总量(单位:MB)。
优化手段:减少动态缓冲区更新频率,合并小缓冲区。
数据来源:通过 device.memoryStatus.bufferSize 获取。


关键代码逻辑

数据更新机制

afterPresent 方法中,通过以下代码更新统计值:

// 更新 Draw Call、Instance、三角形数量
this._profilerStats.draws.counter.value = device.numDrawCalls;
this._profilerStats.instances.counter.value = device.numInstances;
this._profilerStats.tricount.counter.value = device.numTris;// 更新显存占用
this._profilerStats.bufferMemory.counter.value = device.memoryStatus.bufferSize / (1024 * 1024);
this._profilerStats.textureMemory.counter.value = device.memoryStatus.textureSize / (1024 * 1024);
性能数据渲染

通过 generateNode 方法创建 MeshRendererMaterial,将性能数据绘制到屏幕:

// 创建专用材质和网格
this._meshRenderer.material = _material; // 使用内置 shader 'util/profiler'
this._meshRenderer.node.layer = Layers.Enum.PROFILER; // 指定渲染层级

应用场景与优化建议

  1. 卡顿排查:若 fps 骤降,结合 logic/render 耗时定位瓶颈。
  2. 内存泄漏:监控 textureMemory 是否持续增长,及时释放未引用资源。
  3. 渲染优化:高 draws 时启用合批(Batching)或实例化(Instancing)。
  4. 物理优化:高 physics 时简化碰撞体或降低物理更新频率。

通过 profiler.showStats() 可实时查看性能面板,深入分析引擎运行状态。


http://www.ppmy.cn/news/1579188.html

相关文章

HTML网上商城项目(sqlite3)

一.功能 二.sqlite3函数 【1】sqlite3_exec int sqlite3_exec( sqlite3* db, // 数据库连接句柄 const char* sql, // 要执行的 SQL 语句 int (*callback)(void*, int, char**, char**), // 回调函数 void* arg, …

RocketMQ开发实战篇

一、生产者开发指南 1. Java API使用详解 在使用RocketMQ进行消息生产时&#xff0c;首先需要引入相关的依赖。在Maven项目中&#xff0c;可以在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.apache.rocketmq</groupId><artifactI…

Redis 哨兵模式详解:实现高可用与自动故障转移

目录 引言 1. 什么是 Redis 哨兵模式&#xff1f; 1.1 定义 1.2 核心概念 2. Redis 哨兵模式的工作原理 2.1 监控 2.2 故障检测 2.3 故障转移 2.4 通知 3. Redis 哨兵模式的配置方法 3.1 配置文件 3.2 启动哨兵节点 4. Redis 哨兵模式的使用场景 4.1 高可用性 4.…

【Go语言圣经1.5】

目标 概念 要点&#xff08;案例&#xff09; 实现了一个简单的 HTTP 客户端程序&#xff0c;主要功能是&#xff1a; 读取命令行参数&#xff1a;程序从命令行获取一个或多个 URL。发送 HTTP GET 请求&#xff1a;使用 Go 内置的 net/http 包&#xff0c;通过 http.Get 函…

初一信息科技教程专用抓包软件1.4.2版本

tcp、udp、dns、https\http\ftp抓包&#xff0c;修订了SYN抓包&#xff0c;确保三次握手顺序 修订程序假死&#xff0c;原因是抓包太多&#xff0c;因此限制只抓取最多100个包。

云计算VS网络安全,应该怎么选?

运维是什么 运维&#xff0c;本质上是对网络、服务器、服务的生命周期各个阶段 的运营与维护&#xff0c;在成本、稳定性、效率上达成一致可接受的状态。 优势: 市场需求大:云计算的落地和应用加剧了对云计算运维人才的 需求薪资待遇:工作含金量较高&#xff0c;因而也拥有不…

vue3 使用docxtemplater 动态生成docx

模版文件docx放到vue工程public下 文件内容 vue文件 <template><div><button click"generateDocument">生成Word文档</button></div> </template><script> import PizZip from pizzip; import Docxtemplater from docx…

洛谷P10576 [蓝桥杯 2024 国 A] 儿童节快乐

设x^2n10120300500 , y^2n−10120300500&#xff0c;x>y>0 x^2-y^220,240,601,000 (x-y)(xy)20,240,601,000&#xff0c;枚举两个因数中较小的那个&#xff0c;也就是x-y&#xff0c;通过(x-y)和(xy)相加相减消元来解出x和y&#xff0c;但是通过消元解出的x和y不一定满…