Refactor simulation timing and frame processing logic for improved accuracy and performance

This commit is contained in:
Kirill
2026-10-08 00:15:23 +03:00
parent 3fcc7211ce
commit 413f2be904
4 changed files with 29 additions and 22 deletions
+2 -9
View File
@@ -243,9 +243,7 @@ godot --path Owniverse.GI --script res://tests/benchmark_civilizations.gd -- ui
Stage вызывает `evolute_frame`: транзакция получает бюджет 40 мс и уступает
следующему кадру внутри создания партий и обработки стадий. Расчёт остаётся
на главном потоке, состояние публикуется только после полного завершения.
Одна транзакция обрабатывает 0,2 реальной секунды на любой скорости. Запрошенное время хранится отдельно, поэтому отставание не превращается
в один всё более тяжёлый шаг. При предельной нагрузке время симуляции может
отставать от запрошенного; это не ограничение FPS интерфейса и не удаление событий.
Расчёт запускается после накопления 0,2 реальной секунды и обрабатывает весь ожидающий интервал. Время, поступившее во время расчёта, обрабатывается следующим циклом. При перегрузке шаг растёт; пять завершений в секунду остаются целевой частотой, а не гарантией.
Производство во время транзакции выполняется после её завершения. Запрошенное
время, активный интервал, скорость и очередь производства входят в сохранение;
@@ -292,12 +290,7 @@ Stage вызывает `evolute_frame`: транзакция получает б
1.057. Замер включает сокращение накопленного отставания сохранения;
это результат конкретного сценария на Mac, а не гарантия для Android.
Полный шаг фиксирован: 0,2 реальной секунды на всех скоростях, пять циклов
на секунду запрошенного времени. Неполный интервал накапливается. При отставании
шаг сохраняется, долг не отбрасывается. Возобновляемая транзакция сохраняет
границу из checkpoint. Бюджет кадра остаётся 40 мс. `test_frame_evolution`
проверяет расписание всех шести скоростей, сохранение долга и пять циклов
на одну секунду.
Целевая частота запуска — пять циклов в секунду. Размер шага равен всему накопленному интервалу. Checkpoint сохраняет границу активного расчёта и ожидающее реальное время. Тест проверяет все шесть скоростей, смену скорости, задержку запуска и накопление времени во время расчёта.
Дипломатический drift использует шесть взвешенных вкладов вместо матрицы
пар этик: вес = сумма вкладов + 195 × свой вклад − противоположный вклад.