Timeline中frame mode帧模式中idle占据大片位置

今天用Chrome DevTool中Timeline的帧模式查看网页的性能,发现一个让我很迷惑的问题,如下:

Timeline面板

我们知道,上图中的柱状体代表了每一帧所用的时间,高度越大,时间越长(其中30/60fps的基准线分别对应着33.3ms和16.6ms),而其中的透明部分,则代表刷新周期中空闲的部分(idle)。

透明的部分是空闲

我的疑惑是,透明的idle部分,为什么不能利用起来渲染下一帧呢?从分析结果可知,这些透明的部分占据了绝大部分,以至于大部分时间fps均在30以下。

思考良久都无法解释这个现象,于是打算去stackoverflow提问,发现已经有人提问过这个问题:http://stackoverflow.com/questions/23166435/large-idle-bars-in-chrome-dev-tools-frames-timeline

采纳的答案如下

Drawing shapes to a canvas is apparently computationally expensive, and must fall under “activity that was not instrumented by DevTools.” I solved my performance issue by first drawing shapes to an offscreen canvas cache, then using drawImage to copy back to the main canvas.

大意是canvas的渲染是很复杂的过程,这个过程不能被DevTool完整地检测到。

显然这个回答也不够确切,如果有朋友对这个问题有了解,可留言与我交流。

你好!对于UnityTimeline的ProcessFrame函数丢失PlayerData的问题,可能有几种原因导致。首先,请确保你已经正确设置了Timeline轨道和相关的播放器组件。另外,也要检查Timeline是否有正确的关键和剪辑,并且确保它们与PlayerData的属性和变量进行了正确的绑定。 如果你仍然遇到问题,可以尝试以下解决方法: 1. 检查PlayerData的序列化:确认PlayerData类的所有属性和变量都被正确地标记为可序列化(Serializable)。这样Timeline才能正确地保存和恢复它们的状态。 2. 检查PlayerData的引用:确保在Timeline使用PlayerData时,使用的是正确的引用。如果你在运行时动态创建了PlayerData实例,要确保Timeline使用的是相同的实例,或者在每次创建实例时更新Timeline的引用。 3. 检查Timeline的设置:打开Timeline窗口,确保你正确设置了播放器组件和轨道。确保播放器组件与你的场景和对象正确关联,并且轨道的剪辑和关键与PlayerData的属性和变量正确绑定。 4. 检查事件调用:如果你在Timeline使用了事件,确保事件调用时传递了正确的PlayerData实例。你可以在事件调用之前添加一些调试输出,确认PlayerData的值是否正确传递。 5. 检查代码逻辑:如果你在Timeline的ProcessFrame函数手动操作PlayerData,确保你的代码逻辑正确,并且没有导致PlayerData丢失或被重置的问题。 希望这些解决方法能够帮助你解决问题!如果问题仍然存在,请提供更多的细节和代码,以便我们能够更深入地了解并给予帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值