系统睡眠时,pp::Core::GetTimeTicks()与pp::InputEvent::GetTimeStamp(

pp::Core::GetTimeTicks() getting out of sync with pp::InputEvent::GetTimeStamp() on system sleep

本文关键字:pp GetTimeStamp InputEvent GetTimeTicks Core 系统      更新时间:2023-10-16

我正试图在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()似乎一直在运行。输入事件的时间戳早于核心时钟系统休眠的时间量。

这样就不能同时使用两个时钟计时。一种解决方法是在运行模拟以响应输入事件时使用核心时钟,但这可能会导致按键和屏幕上的操作之间的延迟更高。另一种解决方法是简单地不运行模拟以响应输入事件。尽管如此,我还是想弄清这个难题的真相。

这是实现中的错误吗?这是文档中的一个错误吗?文档中似乎说这些时间应该同步?还是我读错了文件?


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

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

但是输入事件正在返回墙上的时钟时间。这实际上是正确的,因为pepper输入事件应该与DOM事件匹配,并且DOM输入事件自1970年以来被指定为时间(墙上的时钟时间(。

行为是正确的,但是GetTimeStamp的返回类型应该是PP_Time。我会把这个归档。