1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
minetest.register_chatcommand("mesecons_hud", {
description = "mesecons_hud on/off",
func = function(name, params)
local enable = params == "on"
mesecons_debug.hud[name] = enable
if enable then
return true, "mesecons hud enabled"
else
return true, "mesecons hud disabled"
end
end
})
minetest.register_chatcommand("mesecons_global_stats", {
description = "shows the global mesecons stats",
func = function()
local top_ctx, top_hash
for hash, ctx in pairs(mesecons_debug.context_store) do
if not top_ctx or top_ctx.avg_micros < ctx.avg_micros then
-- store context with the most average time
top_ctx = ctx
top_hash = hash
end
end
local txt
if top_ctx then
local pos = minetest.get_position_from_hash(top_hash)
txt = "Most prominent mesecons usage at mapblock " .. minetest.pos_to_string(pos) ..
" with " .. top_ctx.penalty .. " seconds penalty and " .. top_ctx.avg_micros .. " us average use"
else
txt = "no context available"
end
return true, txt
end
})
minetest.register_chatcommand("mesecons_stats", {
description = "shows some mesecons stats for the current position",
func = function(name)
local player = minetest.get_player_by_name(name)
if not player then
return
end
local ctx = mesecons_debug.get_context(player:get_pos())
return true, "Mapblock usage: " .. ctx.avg_micros .. " us/s " ..
"(across " .. mesecons_debug.context_store_size .." mapblocks)"
end
})
minetest.register_chatcommand("mesecons_enable", {
description = "enables the mesecons globlastep",
privs = {mesecons_debug=true},
func = function()
-- flush actions, while we are on it
mesecon.queue.actions = {}
mesecons_debug.enabled = true
return true, "mesecons enabled"
end
})
minetest.register_chatcommand("mesecons_disable", {
description = "disables the mesecons globlastep",
privs = {mesecons_debug=true},
func = function()
mesecons_debug.enabled = false
return true, "mesecons disabled"
end
})
minetest.register_chatcommand("mesecons_whitelist_get", {
description = "shows the current mapblock whitelist",
privs = {mesecons_debug=true},
func = function()
local whitelist = "mesecons whitelist:\n"
local count = 0
for hash, _ in pairs(mesecons_debug.whitelist) do
whitelist = whitelist .. minetest.pos_to_string(minetest.get_position_from_hash(hash)) .. "\n"
count = count + 1
end
whitelist = whitelist .. string.format("%d mapblocks whitelisted", count)
return true, whitelist
end
})
minetest.register_chatcommand("mesecons_whitelist_add", {
description = "adds the current mapblock to the whitelist",
privs = {mesecons_debug=true},
func = function(name)
local player = minetest.get_player_by_name(name)
if not player then
return
end
local ppos = player:get_pos()
local blockpos = mesecons_debug.get_blockpos(ppos)
local hash = minetest.hash_node_position(blockpos)
mesecons_debug.whitelist[hash] = true
mesecons_debug.save_whitelist()
return true, "mapblock whitlisted"
end
})
minetest.register_chatcommand("mesecons_whitelist_remove", {
description = "removes the current mapblock from the whitelist",
privs = {mesecons_debug=true},
func = function(name)
local player = minetest.get_player_by_name(name)
if not player then
return
end
local ppos = player:get_pos()
local blockpos = mesecons_debug.get_blockpos(ppos)
local hash = minetest.hash_node_position(blockpos)
mesecons_debug.whitelist[hash] = nil
mesecons_debug.save_whitelist()
return true, "mapblock removed from whitelist"
end
})
|