From 3d44e63f23b5a699b415f79ac787be87b89453b3 Mon Sep 17 00:00:00 2001 From: Nicholas Hayashi Date: Fri, 6 Aug 2021 19:55:59 -0400 Subject: [PATCH] memory management sort of --- src/memory.lua | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/memory.lua diff --git a/src/memory.lua b/src/memory.lua new file mode 100644 index 0000000..b02883b --- /dev/null +++ b/src/memory.lua @@ -0,0 +1,24 @@ + +local garbage_collector_cycle_timing_history = {} +local garbage_collector_average_cycle_time = 0 +function run_garbage_collector_cycle() + local time, result = fprofile(collectgarbage, "collect") + + table.insert(garbage_collector_cycle_timing_history, time) + -- re-calc average gc timing + local total = 0 + for _,v in pairs(garbage_collector_cycle_timing_history) do + total = total + v + end + garbage_collector_average_cycle_time = total / #garbage_collector_cycle_timing_history +end + +function check_if_can_collect_garbage_for_free(frame_start_time, min_goal_fps) + -- often this will be polled at the end of a frame to see if we're running fast or slow, + -- and if we have some time to kill before the start of the next frame, we could maybe run gc. + -- + if (am.current_time() - frame_start_time) < (1 / min_fps + garbage_collector_average_cycle_time) then + run_garbage_collector_cycle() + end +end +