basic ECS spawner
This commit is contained in:
56
addons/gecs/tests/performance/perf_helpers.gd
Normal file
56
addons/gecs/tests/performance/perf_helpers.gd
Normal file
@@ -0,0 +1,56 @@
|
||||
## Simple performance timing helpers for GECS
|
||||
## Records results to JSONL files (one JSON per line, one file per test)
|
||||
class_name PerfHelpers
|
||||
|
||||
|
||||
## Time a callable and return milliseconds
|
||||
static func time_it(callable: Callable) -> float:
|
||||
var start_time = Time.get_ticks_usec()
|
||||
callable.call()
|
||||
var end_time = Time.get_ticks_usec()
|
||||
return (end_time - start_time) / 1000.0 # Return milliseconds
|
||||
|
||||
|
||||
## Record performance result to test-specific JSONL file
|
||||
static func record_result(test_name: String, scale: int, time_ms: float) -> void:
|
||||
var result = {
|
||||
"timestamp": Time.get_datetime_string_from_system(),
|
||||
"test": test_name,
|
||||
"scale": scale,
|
||||
"time_ms": time_ms,
|
||||
"godot_version": Engine.get_version_info().string
|
||||
}
|
||||
|
||||
# Ensure perf directory exists
|
||||
var dir = DirAccess.open("res://")
|
||||
if dir:
|
||||
if not dir.dir_exists("reports"):
|
||||
dir.make_dir("reports")
|
||||
if not dir.dir_exists("reports/perf"):
|
||||
dir.make_dir("reports/perf")
|
||||
|
||||
# Append to test-specific JSONL file (one JSON per line)
|
||||
var filepath = "res://reports/perf/%s.jsonl" % test_name
|
||||
# Check if file exists, if not create it with WRITE, otherwise open with READ_WRITE
|
||||
var file_exists = FileAccess.file_exists(filepath)
|
||||
var file = FileAccess.open(filepath, FileAccess.READ_WRITE if file_exists else FileAccess.WRITE)
|
||||
|
||||
if file:
|
||||
if file_exists:
|
||||
file.seek_end()
|
||||
file.store_line(JSON.stringify(result))
|
||||
file.close()
|
||||
else:
|
||||
push_error("Failed to open performance log file: %s (Error: %s)" % [filepath, error_string(FileAccess.get_open_error())])
|
||||
|
||||
# Print result for console visibility
|
||||
prints("📊 %s (scale=%d): %.2f ms" % [test_name, scale, time_ms])
|
||||
|
||||
|
||||
## Optional: Assert performance threshold (simple version)
|
||||
static func assert_threshold(time_ms: float, max_ms: float, message: String = "") -> void:
|
||||
if time_ms > max_ms:
|
||||
var error = "Performance threshold exceeded: %.2f ms > %.2f ms" % [time_ms, max_ms]
|
||||
if not message.is_empty():
|
||||
error = "%s - %s" % [message, error]
|
||||
assert(false, error)
|
||||
Reference in New Issue
Block a user