Я пытаюсь использовать «тактовое время», чтобы отслеживать время в моей игре 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.