67 lines
1.8 KiB
Lua
67 lines
1.8 KiB
Lua
local ffi
|
|
|
|
-- there's no ffi in Lua, only in LuaJIT
|
|
-- when Freeminer is run with Lua the profiler is not available because we can't access precise timer
|
|
if not pcall(function() ffi = require("ffi") end) then
|
|
return
|
|
end
|
|
|
|
ffi.cdef[[
|
|
unsigned int get_time_us();
|
|
]]
|
|
|
|
local modpath = core.get_builtin_path()..DIR_DELIM
|
|
|
|
package.path = package.path .. ";" .. modpath .. "/?.lua"
|
|
ProFi = require 'ProFi'
|
|
|
|
local function get_time_precise()
|
|
return ffi.C.get_time_us() / 1000000
|
|
end
|
|
|
|
ProFi:setGetTimeMethod(get_time_precise)
|
|
|
|
local started = false
|
|
|
|
local function start_profiler()
|
|
ProFi:start()
|
|
started = true
|
|
end
|
|
|
|
if freeminer.setting_getbool("profiler_autostart") then
|
|
start_profiler()
|
|
freeminer.after(3, function()
|
|
freeminer.chat_send_all("The profiler was started. If you don't want this, set " .. freeminer.colorize("61ad6d", "profiler_autostart")
|
|
.. " to false in " .. freeminer.colorize("61ad6d", "freeminer.conf"))
|
|
end)
|
|
end
|
|
|
|
freeminer.register_chatcommand("profiler_stop", {
|
|
description = "stop the profiler and write report",
|
|
privs = {server=true},
|
|
func = function(name)
|
|
if not started then
|
|
freeminer.chat_send_player(name, "Profiler has not been started. You can start it using " .. freeminer.colorize("00ffff", "/profiler_start"))
|
|
return
|
|
end
|
|
|
|
ProFi:stop()
|
|
ProFi:writeReport("profile.txt")
|
|
|
|
freeminer.chat_send_player(name, "Profiler is stopped.")
|
|
end,
|
|
})
|
|
|
|
freeminer.register_chatcommand("profiler_start", {
|
|
description = "start the profiler",
|
|
privs = {server=true},
|
|
func = function(name)
|
|
if started then
|
|
freeminer.chat_send_player(name, "Profiler is already running.")
|
|
return
|
|
end
|
|
start_profiler()
|
|
freeminer.chat_send_player(name, "Profiler is started.")
|
|
end
|
|
})
|