эмуляция синхронизации по TSC нагло попизжена из унриала, а потом идут рассказы о том, что в zxmak2 синхронизация выполняется точнее...
если внимательнее посмотреть, то там вообще нет TSC, идея засыпать действительно подсмотрена в unreal (о чем кстати даже в коменте к изменению сказано), но ты смотришь код синхронизации по времени. А смотреть нужно WaitFrame в RenderVideo.cs, где синхра по видео.
Там во первых тоже вместо TSC используется системный таймер, у которого частота не скачет.
А во вторых системный таймер используется только для отслеживания пропуска vblank.
Для синхронизации же, в качестве таймера используется развертка дисплея.
И нужно принять во внимание, что ZXMAK2 в отличие от унриала, умудряется в одном потоке вместе с вызовом Present, прокачивать и оконные месиджи полноценного UI, обрабатывая клики, менюшки и т.п.
Обработка таких сообщений естественно может заблочить Present, поэтому для чистоты эксперимента кликать по окну эмулятора во время замеров не нужно, а лучше вообще даблкликнуть по нему, чтобы захватить мышу
и zxmak2 действительно стабильнее держит синхру, убедиться в этом можно на интре в ZXTIME#15. В unreal каждые 5-10 секунд происходит смена кадров и цвета меняются, а в zxmak2, хоть пол часа держи - смены кадров нет, стабильно держит
Если в zxmak2 включить синхру по Time, то эффект тот-же что и в unreal.
И кстати синхра была доработана после того той версии что ты тестил, она стала еще стабильнее. Хотя я все еще не удовлетворен, стабильность синхронизации еще можно улучшить, но тут уже дело идет на грани возможностей планировщика потоков винды, поэтому все сильно зависит от мелких деталей
В unreal кстати тоже можно улучшить стабильность, заменив TSC на системный таймер, в unreal это значительно проще, т.к. ему не нужно прокачивать очередь сообщений полноценного ui. А вот в zxmak2 сложнее, у него полноценная очередь сообщений ui прокачивается и нужно все затачивать под то, чтобы очередь и Present не мешали друг другу.