pp :: Core :: GetTimeTicks()在系统睡眠时与pp :: InputEvent :: GetTimeStamp()失去同步

时间:2014-03-27 13:20:22

标签: c++ google-nativeclient ppapi

我正在尝试使用“滴答时间”跟踪我的PNaCl游戏中的时间,因为游戏时间不应受用户调整系统时钟的影响。

我想同时使用pp::Core::GetTimeTicks()pp::InputEvent::GetTimeStamp()来运行游戏模拟。逻辑如下:当输入事件发生时,运行模拟直到游戏时间与该事件的pp::InputEvent::GetTimeStamp()匹配。当渲染完成回调发生时,运行模拟直到游戏时间与pp::Core::GetTimeTicks()匹配。

这一点很有用,从pp::Core::GetTimeTicks()开始,我可以理解这个用例似乎得到了支持:

  

当将一些事件时间传递给模块时,浏览器使用此时钟(例如,使用PP_InputEvent :: time_stamp_seconds字段)。


但是,当我让计算机进入睡眠状态并再次打开时,这两个时钟似乎与计算机正在睡眠的时间不同步。当系统处于休眠状态时,pp::Core::GetTimeTicks()似乎已停止运行,而pp::InputEvent::GetTimeStamp()似乎一直在运行。输入事件在核心时钟之前加上时间戳,表示系统处于休眠状态的时间。

这使用两个时钟来保持时间。解决方法是在运行模拟时使用核心时钟以响应输入事件,但这可能会导致按键和屏幕上的操作之间的延迟更高。另一种解决方法是简单地不运行模拟以响应输​​入事件。不过,我想谈谈这个难题的底部。

这是实施中的错误吗?它是文档中的错误,似乎说这些时间应该同步吗?或者我读错了文档?


我在Linux上的Chrome 33.0.1750.152(官方版本256984)上遇到过这种情况。

1 个答案:

答案 0 :(得分:1)

这看起来像个错误。 InputEvent返回PP_TimeTicks。时间刻度应该具有您通过Core :: GetTimeTicks()看到的行为。

但是输入事件正在为您提供挂钟时间。这实际上是正确的,因为胡椒输入事件应该与DOM事件匹配,并且DOM输入事件被指定为自1970年以来的时间(挂钟时间)。

行为是正确的,但GetTimeStamp的返回类型应该是PP_Time。我会提交此文件。