Test vram
This commit is contained in:
101
res:/measure_vram.gd
Normal file
101
res:/measure_vram.gd
Normal file
@@ -0,0 +1,101 @@
|
||||
extends Node
|
||||
|
||||
## VRAM/Texture Memory Measurement Tool
|
||||
## Add this as an autoload to measure memory usage at startup
|
||||
|
||||
var measurements := {}
|
||||
var start_time := 0.0
|
||||
|
||||
func _ready():
|
||||
start_time = Time.get_ticks_msec()
|
||||
|
||||
# Initial measurement (before anything loads)
|
||||
_record_measurement("initial")
|
||||
|
||||
# Wait for scene tree to be ready
|
||||
await get_tree().process_frame
|
||||
_record_measurement("after_tree_ready")
|
||||
|
||||
# Wait for main scene to fully load
|
||||
await get_tree().process_frame
|
||||
_record_measurement("after_main_scene_loaded")
|
||||
|
||||
# Give textures time to upload to GPU
|
||||
await get_tree().process_frame
|
||||
await get_tree().process_frame
|
||||
_record_measurement("after_gpu_upload")
|
||||
|
||||
# Print final report
|
||||
await get_tree().process_frame
|
||||
_print_report()
|
||||
|
||||
func _record_measurement(label: String):
|
||||
var elapsed_ms = Time.get_ticks_msec() - start_time
|
||||
var tex_mem = Performance.get_monitor(Performance.VIEWER_TEXTURE_MEMORY)
|
||||
var obj_count = Performance.get_monitor(Performance.OBJECT_COUNT)
|
||||
var node_count = Performance.get_monitor(Performance.OBJECT_NODE_COUNT)
|
||||
|
||||
measurements[label] = {
|
||||
"elapsed_ms": elapsed_ms,
|
||||
"texture_memory_bytes": tex_mem,
|
||||
"texture_memory_mb": tex_mem / (1024.0 * 1024.0),
|
||||
"object_count": obj_count,
|
||||
"node_count": node_count
|
||||
}
|
||||
|
||||
print("[%.2f ms] %s: VRAM=%.2f MB, Objects=%d, Nodes=%d" % [
|
||||
elapsed_ms / 1000.0,
|
||||
label,
|
||||
tex_mem / (1024.0 * 1024.0),
|
||||
obj_count,
|
||||
node_count
|
||||
])
|
||||
|
||||
func _print_report():
|
||||
print("\n" + "=" * 60)
|
||||
print("VRAM USAGE REPORT")
|
||||
print("=" * 60)
|
||||
|
||||
var total_elapsed = Time.get_ticks_msec() - start_time
|
||||
|
||||
for label in measurements:
|
||||
var m = measurements[label]
|
||||
print("\n[%s]" % label)
|
||||
print(" Elapsed: %.3f s" % (m.elapsed_ms / 1000.0))
|
||||
print(" Texture Memory: %.2f MB (%.2f KB)" % [m.texture_memory_mb, m.texture_memory_bytes / 1024.0])
|
||||
print(" Object Count: %d" % m.object_count)
|
||||
print(" Node Count: %d" % m.node_count)
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("TOTAL STARTUP TIME: %.3f s" % (total_elapsed / 1000.0))
|
||||
print("=" * 60)
|
||||
|
||||
# Save to file if we have write access
|
||||
var file_path = "user://vram_measurement_%s.txt" % Time.get_datetime_string_from_system(false, true).replace(":", "-")
|
||||
var file = FileAccess.open(file_path, FileAccess.WRITE)
|
||||
if file:
|
||||
file.store_string("VRAM Measurement Report\n")
|
||||
file.store_string("Generated: %s\n\n" % Time.get_datetime_string_from_system())
|
||||
for label in measurements:
|
||||
var m = measurements[label]
|
||||
file.store_string("[%s]\n" % label)
|
||||
file.store_string(" Elapsed: %.3f s\n" % (m.elapsed_ms / 1000.0))
|
||||
file.store_string(" Texture Memory: %.2f MB\n" % m.texture_memory_mb)
|
||||
file.store_string(" Object Count: %d\n" % m.object_count)
|
||||
file.store_string(" Node Count: %d\n\n" % m.node_count)
|
||||
file.close()
|
||||
print("\nReport saved to: %s" % file_path)
|
||||
|
||||
## Call this manually at any point to get current VRAM usage
|
||||
func get_current_vram_mb() -> float:
|
||||
return Performance.get_monitor(Performance.VIEWER_TEXTURE_MEMORY) / (1024.0 * 1024.0)
|
||||
|
||||
## Get detailed breakdown
|
||||
func get_memory_stats() -> Dictionary:
|
||||
return {
|
||||
"texture_memory_mb": get_current_vram_mb(),
|
||||
"object_count": Performance.get_monitor(Performance.OBJECT_COUNT),
|
||||
"node_count": Performance.get_monitor(Performance.OBJECT_NODE_COUNT),
|
||||
"physics_objects_2d": Performance.get_monitor(Performance.PHYSICS_2D_OBJECT_COUNT),
|
||||
"physics_objects_3d": Performance.get_monitor(Performance.PHYSICS_3D_OBJECT_COUNT),
|
||||
}
|
||||
Reference in New Issue
Block a user