pp::Core::GetTimeTicks() выходит из синхронизации с pp::InputEvent::GetTimeStamp() в спящем режиме системы

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


person Magnus Hoff    schedule 27.03.2014    source источник


Ответы (1)


Это похоже на ошибку. InputEvent возвращает PP_TimeTicks. Такты времени должны вести себя так, как вы видите с помощью Core::GetTimeTicks().

Но входные события возвращают вам время настенных часов. На самом деле это правильно, так как событие ввода перца должно соответствовать событию DOM, а событие ввода DOM указано как время с 1970 года (время настенных часов).

Поведение правильное, но тип возвращаемого значения для GetTimeStamp вместо этого должен быть PP_Time. Я зарегистрирую это.

person Brett Wilson    schedule 27.03.2014