P14-02: Record warp performance measurements

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Takeshi
2026-10-20 11:24:51 +09:00
co-authored by Claude Opus 5.5
parent cca5457454
commit 728e5e612f
2 changed files with 37 additions and 0 deletions
@@ -0,0 +1,4 @@
P14_02_WARP_PERF={"links_0":0,"links_4":6,"tick_day_ms_avg_warps_0":1015.712,"tick_day_ms_avg_warps_4":1810.931}
# Per-minute tick (60 minutes after 4 facilities built at x=0,3,6,9 FRONT, same seed):
# guest_elevator x4: 1304 us/tick; mana_warp x4 (6 links): 1202 us/tick; guest_corridor x4: 1033 us/tick.
# _synchronize_warps alone: 43 us/call with 4 warps. No-warp day: 1015.7 ms (P06-01 candidate 1014, base 1008).
@@ -0,0 +1,33 @@
extends SceneTree
## P14-02 A07 warp tick cost: the same 1440-minute run with 0 or 4 warps
## (6 linked pairs) built on ground-supported columns. Not rendering/Windows.
func _initialize() -> void:
call_deferred("_run")
func _run() -> void:
var out := {}
for warps: int in [0, 4]:
var samples: Array = []
for trial: int in 3:
var clock: Variant = load("res://autoload/game_clock.gd").new()
var state: Variant = load("res://autoload/game_state.gd").new()
var rt: Variant = load("res://autoload/simulation_runtime.gd").new()
clock.reset(1, 6, 0); state.reset(); rt.initialize(clock, state, 9909 + trial); clock.set_paused(true)
rt.submit_command(&"change_resources", {&"deltas": {&"gold": 20000, &"materials": 200}}, &"player", &"", 0, clock.absolute_minute, &"perf.fund")
for i: int in warps:
var built: CommandResult = rt.submit_command(&"build_facility", {&"definition_id": &"mana_warp", &"origin": Vector3i(i * 3, 0, 0)}, &"player", &"", 0, clock.absolute_minute, StringName("perf.w%d" % i))
if not built.is_success():
push_error("warp build failed: " + built.message)
clock.advance_minutes(370)
var start := Time.get_ticks_usec()
clock.advance_minutes(1440)
samples.append((Time.get_ticks_usec() - start) / 1000.0)
out["links_%d" % warps] = rt.path_service.get_connector_ids_with_prefix("warp.connector:").size()
rt.free(); clock.free(); state.free()
var total := 0.0
for v: float in samples: total += v
out["tick_day_ms_avg_warps_%d" % warps] = total / samples.size()
print("P14_02_WARP_PERF=" + JSON.stringify(out))
quit(0)