UserInterface: poll the network stream on the 60 Hz update clock
40250 runs CPythonApplication::Process every 16/17 ms and only skips the render when late, so GamePhase gets its three-packets-a-poll budget 60 times a second. The host polled once per rendered frame: at 30 fps idle (or a slow phone) mob move packets queued behind character add/del bursts for up to a second and mobs stopped, then jumped. Poll once per elapsed 60 Hz tick. Real-server A/B: move push gap p50 138-178 -> 70-92 ms, p90 580-785 -> 358-403 ms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
3aa4c482e9
commit
8ec8f1a445
@@ -684,6 +684,14 @@
|
||||
"tests": [
|
||||
"project/app_flow_lifecycle_test.gd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"reference": "CPythonApplication::Process on the 60 Hz s_uiNextFrameTime update clock; a late frame skips only the render (s_bFrameSkip), so CPythonNetworkStream::Process runs every 16/17 ms",
|
||||
"implementation": "src/platform/UserInterface/PythonApplication.cpp CPythonApplication::Process: one host frame polls the stream once per elapsed 60 Hz tick (catch-up capped at 500 ms)",
|
||||
"invariant": "GamePhase packet budget (3 packets a poll below 8 KB pending) must be 180/s regardless of render rate; at 30 fps idle it was 90/s and mob move packets queued behind character add/del bursts",
|
||||
"tests": [
|
||||
"real server 192.168.21.203 chase probe A/B 2026-09-30: GC_MOVE push gap p50 138-178 -> 70-92 ms, p90 580-785 -> 358-403 ms"
|
||||
]
|
||||
}
|
||||
],
|
||||
"evidence": {
|
||||
|
||||
Reference in New Issue
Block a user