local profile = {}

-- bundled version of upstream jit.p until LuaJIT is updated to include
-- https://github.com/LuaJIT/LuaJIT/commit/95140c50010c0557af66dac944403a1a65dd312c
local p = require'plenary.profile.p'

---start profiling using LuaJIT profiler
---@param out name and path of log file
---@param opts table of options
---            flame (bool, default false) write log in flamegraph format
--                   (see https://github.com/jonhoo/inferno)
function profile.start(out, opts)
    out = out or "profile.log"
    opts = opts or {}
    popts = "10,i1,s,m0"
    if opts.flame then popts = popts .. ",G" end
    p.start(popts, out)
end

---stop profiling
profile.stop = p.stop

function profile.benchmark(iterations, f, ...)
  local start_time = vim.loop.hrtime()
  for _ = 1, iterations do
    f(...)
  end
  return (vim.loop.hrtime() - start_time) / 1E9
end

return profile