美文网首页
DOOM-3-BFG-master\neo\idlib\Time

DOOM-3-BFG-master\neo\idlib\Time

作者: 乌笛 | 来源:发表于2020-08-24 12:48 被阅读0次

    idTimer

    性能用定时器,和常规Unity不太相同,这个定时器并不是作为游戏中的业务逻辑定时器使用的,从实现角度来看,主要是性能分析工具的一部分。

    该Timer内部维护了一个状态机,并未通过状态机模式实现,而是很直接了当的内部状态变量复制。

    定时器实现了运算符重载,目前尚未看到具体使用的地方。主要功能是在定时器未运行状态(未运行和停止后)进行时间的累加和比较。

    idTimerReport

    格式化字符串打印相关输出内容。

    InitBaseClockTicks

    很神奇的初始化操作,里面循环了 1000 次定时器。doom3 这个项目比较老,定时器使用的并不是系统的api实现的,其使用了 x86 汇编指令集中的 rdtsc 指令,查询当前cpu运行的次数,然后再查询系统相关文件,读取cpu频率,再反向计算出当前时间距离开机后的时间。从以上实现方式来看,循环1000次应该是为了消除定时器上下文的一些cpu切换影响。rdtsc 在多核心机器运行时,可能会因为指令集核心切换等内容影响,导致最终的时间与实际时间不能对齐。

    至于为什么要循环1000次这么多,有没有可能10次或者100次就能达到需求。或者有没有其他更好的消除多核心对该指令影响的方法,这里就不再细化研究了。一方面我们现在的主流性能分析并不需要如此精细的数量,采用系统时间可以满足我们的精度需求;另一方面汇编指令相关与多核心并行工作的内容可以再读两本书了,还是把精力集中到主线上来,不必追求细枝末节,而失去对全局的把控。

    相关文章

      网友评论

          本文标题:DOOM-3-BFG-master\neo\idlib\Time

          本文链接:https://www.haomeiwen.com/subject/lotnjktx.html