diff options
author | Sven Roederer <freifunk@it-solutions.geroedel.de> | 2019-07-01 21:52:07 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2020-07-19 20:14:22 +0200 |
commit | 8b8d83e42dd3d10d82e29a8614a7b3e3e94b16c6 (patch) | |
tree | 5e4009d43428da534cb231e91c68dd4eb2b3a258 /libs/luci-lib-base/luasrc/debug.lua | |
parent | 3b2a1e9e1129e77c4ebd5e7ace35653969f2d515 (diff) |
luci-base: move some generic classes into a separate luci-base-libs package
The new package luci-base-libs provides the modules that not strictly relate
to the web-interface of luci. By separating these libs they can be used by
other packages without having to install the web-components.
This change was inspired by providing a shell-only interface for 4MB-flash
devices, by keeping as much code common with a full install.
Signed-off-by: Sven Roederer <freifunk@it-solutions.geroedel.de>
Diffstat (limited to 'libs/luci-lib-base/luasrc/debug.lua')
-rw-r--r-- | libs/luci-lib-base/luasrc/debug.lua | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/libs/luci-lib-base/luasrc/debug.lua b/libs/luci-lib-base/luasrc/debug.lua new file mode 100644 index 000000000..8ff1bb698 --- /dev/null +++ b/libs/luci-lib-base/luasrc/debug.lua @@ -0,0 +1,37 @@ +local debug = require "debug" +local io = require "io" +local collectgarbage, floor = collectgarbage, math.floor + +module "luci.debug" +__file__ = debug.getinfo(1, 'S').source:sub(2) + +-- Enables the memory tracer with given flags and returns a function to disable the tracer again +function trap_memtrace(flags, dest) + flags = flags or "clr" + local tracefile = io.open(dest or "/tmp/memtrace", "w") + local peak = 0 + + local function trap(what, line) + local info = debug.getinfo(2, "Sn") + local size = floor(collectgarbage("count")) + if size > peak then + peak = size + end + if tracefile then + tracefile:write( + "[", what, "] ", info.source, ":", (line or "?"), "\t", + (info.namewhat or ""), "\t", + (info.name or ""), "\t", + size, " (", peak, ")\n" + ) + end + end + + debug.sethook(trap, flags) + + return function() + debug.sethook() + tracefile:close() + end +end + |