extends RefCounted class_name MemoryCollector func collect() -> float: var meminfo := _read_meminfo() if meminfo.is_empty(): return 0.0 var total := meminfo.get("MemTotal", 0) var available := meminfo.get("MemAvailable", 0) if total == 0: return 0.0 return 100.0 * (1.0 - float(available) / float(total)) func _read_meminfo() -> Dictionary: var file := FileAccess.open("/proc/meminfo", FileAccess.READ) if file == null: return {} var result: Dictionary = {} while not file.eof_reached(): var line: String = file.get_line().strip_edges() if line.is_empty(): continue var parts := line.split(":", false) if parts.size() < 2: continue var key := parts[0].strip_edges() var val_str := parts[1].strip_edges().split(" ", false)[0] result[key] = val_str.to_int() return result