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 +