os.clock() → minetest.get_us_time()

....how did I miss that :P
This commit is contained in:
Starbeamrainbowlabs 2020-06-26 20:46:35 +01:00
parent 5aec4d756c
commit 0afbba4deb
Signed by: sbrl
GPG Key ID: 1BE5172E637709C2
16 changed files with 82 additions and 62 deletions

View File

@ -17,7 +17,7 @@ local function printspace(space, w, h)
end
local function generate_maze(seed, width, height, path_length, path_width)
start_time = os.clock()
start_time = worldeditadditions.get_ms_time()
if not path_length then path_length = 2 end
if not path_width then path_width = 1 end
@ -112,7 +112,7 @@ local function generate_maze(seed, width, height, path_length, path_width)
end
end
local end_time = os.clock()
local end_time = worldeditadditions.get_ms_time()
return world, (end_time - start_time) * 1000
end

View File

@ -19,7 +19,7 @@ function printspace3d(space, w, h, d)
end
-- Initialise the world
start_time = os.clock()
start_time = worldeditadditions.get_ms_time()
local function generate_maze3d(seed, width, height, depth, path_length, path_width, path_depth)

View File

@ -9,3 +9,19 @@ function worldeditadditions.hypotenuse(x1, y1, x2, y2)
local ySquare = math.pow(y1 - y2, 2);
return math.sqrt(xSquare + ySquare);
end
function worldeditadditions.average(list)
if #list == 0 then return 0 end
local sum = 0
for i,value in ipairs(list) do
sum = sum + value
end
return sum / #list
end
--- Returns the minetest.get_us_time() in ms
-- @return float
function worldeditadditions.get_ms_time()
return minetest.get_us_time() / 1000
end

View File

@ -46,14 +46,14 @@ worldedit.register_command("bonemeal", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name]) / 2
end,
func = function(name, strength, chance)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local success, nodes_bonemealed, candidates = worldeditadditions.bonemeal(worldedit.pos1[name], worldedit.pos2[name], strength, chance)
if not success then
-- nodes_bonemealed is an error message here because success == false
return success, nodes_bonemealed
end
local percentage = worldeditadditions.round((nodes_bonemealed / candidates)*100, 2)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //bonemeal at "..worldeditadditions.vector.tostring(worldedit.pos1[name]).." - "..worldeditadditions.vector.tostring(worldedit.pos2[name])..", bonemealing " .. nodes_bonemealed.." nodes (out of "..candidates.." nodes) at strength "..strength.." in "..time_taken.."s")
return true, nodes_bonemealed.." out of "..candidates.." (~"..percentage.."%) candidates bonemealed in "..time_taken.."s"

View File

@ -50,7 +50,7 @@ worldedit.register_command("convolve", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name])
end,
func = function(name, kernel_name, kernel_width, kernel_height, sigma)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
print("[exec] kernel_width", kernel_width, "kernel_height", kernel_height)
local success, kernel = worldeditadditions.get_conv_kernel(kernel_name, kernel_width, kernel_height, sigma)
@ -65,7 +65,7 @@ worldedit.register_command("convolve", {
kernel, kernel_size
)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name.." used //convolve at "..worldeditadditions.vector.tostring(worldedit.pos1[name]).." - "..worldeditadditions.vector.tostring(worldedit.pos2[name])..", adding "..stats.added.." nodes and removing "..stats.removed.." nodes in "..time_taken.."s")

View File

@ -17,14 +17,14 @@ worldedit.register_command("count", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name])
end,
func = function(name)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local success, counts, total = worldeditadditions.count(worldedit.pos1[name], worldedit.pos2[name], target_node)
local result = worldeditadditions.make_ascii_table(counts).."\n"..
string.rep("=", 6 + #tostring(total) + 6).."\n"..
"Total "..total.." nodes\n"
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name.." used //count at "..worldeditadditions.vector.tostring(worldedit.pos1[name]).." - "..worldeditadditions.vector.tostring(worldedit.pos2[name])..", counting "..total.." nodes in "..time_taken.."s")

View File

@ -43,9 +43,9 @@ worldedit.register_command("ellipsoid", {
return math.ceil(4/3 * math.pi * radius.x * radius.y * radius.z)
end,
func = function(name, target_node, radius)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local replaced = worldeditadditions.ellipsoid(worldedit.pos1[name], radius, target_node, false)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //ellipsoid at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. replaced .. " nodes in " .. time_taken .. "s")
return true, replaced .. " nodes replaced in " .. time_taken .. "s"
@ -66,9 +66,9 @@ worldedit.register_command("hollowellipsoid", {
return math.ceil(4/3 * math.pi * radius.x * radius.y * radius.z)
end,
func = function(name, target_node, radius)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local replaced = worldeditadditions.ellipsoid(worldedit.pos1[name], radius, target_node, true)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //hollowellipsoid at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. replaced .. " nodes in " .. time_taken .. "s")
return true, replaced .. " nodes replaced in " .. time_taken .. "s"

View File

@ -35,9 +35,9 @@ worldedit.register_command("floodfill", {
return math.ceil(((4 * math.pi * (tonumber(radius) ^ 3)) / 3) / 2)
end,
func = function(name, replace_node, radius)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local nodes_replaced = worldeditadditions.floodfill(worldedit.pos1[name], radius, replace_node)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
if nodes_replaced == false then
return false, "Error: The search node is the same as the replace node."

View File

@ -23,9 +23,9 @@ worldedit.register_command("layers", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name])
end,
func = function(name, node_list)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local changes = worldeditadditions.layers(worldedit.pos1[name], worldedit.pos2[name], node_list)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //layers at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. changes.replaced .. " nodes and skipping " .. changes.skipped_columns .. " columns in " .. time_taken .. "s")
return true, changes.replaced .. " nodes replaced and " .. changes.skipped_columns .. " columns skipped in " .. time_taken .. "s"

View File

@ -72,9 +72,9 @@ worldedit.register_command("maze", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name])
end,
func = function(name, replace_node, seed, path_length, path_width)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local replaced = worldeditadditions.maze2d(worldedit.pos1[name], worldedit.pos2[name], replace_node, seed, path_length, path_width)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //maze at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. " - "..worldeditadditions.vector.tostring(worldedit.pos2[name])..", replacing " .. replaced .. " nodes in " .. time_taken .. "s")
return true, replaced .. " nodes replaced in " .. time_taken .. "s"
@ -102,9 +102,9 @@ worldedit.register_command("maze3d", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name])
end,
func = function(name, replace_node, seed, path_length, path_width, path_depth)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local replaced = worldeditadditions.maze3d(worldedit.pos1[name], worldedit.pos2[name], replace_node, seed, path_length, path_width, path_depth)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //maze3d at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. " - "..worldeditadditions.vector.tostring(worldedit.pos2[name])..", replacing " .. replaced .. " nodes in " .. time_taken .. "s")

View File

@ -20,9 +20,9 @@ worldedit.register_command("overlay", {
return (pos2.x - pos1.x) * (pos2.y - pos1.y)
end,
func = function(name, node_list)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local changes = worldeditadditions.overlay(worldedit.pos1[name], worldedit.pos2[name], node_list)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //overlay at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. changes.updated .. " nodes and skipping " .. changes.skipped_columns .. " columns in " .. time_taken .. "s")
return true, changes.updated .. " nodes replaced and " .. changes.skipped_columns .. " columns skipped in " .. time_taken .. "s"

View File

@ -64,7 +64,7 @@ worldedit.register_command("replacemix", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name])
end,
func = function(name, target_node, target_node_chance, replace_nodes)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local success, changed, candidates, distribution = worldeditadditions.replacemix(
worldedit.pos1[name], worldedit.pos2[name],
@ -83,7 +83,7 @@ worldedit.register_command("replacemix", {
changed
)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //replacemix at "..worldeditadditions.vector.tostring(worldedit.pos1[name]).." - "..worldeditadditions.vector.tostring(worldedit.pos2[name])..", replacing " .. changed.." nodes (out of "..nodes_total.." nodes) in "..time_taken.."s")

View File

@ -1,5 +1,8 @@
local wea = worldeditadditions
-- Test command:
-- //multi //fp set1 1330 60 5455 //fp set2 1355 35 5430 //subdivide 10 10 10 fixlight //y
local function will_trigger_saferegion(name, cmd_name, args)
if not worldedit.registered_commands[cmd_name] then return nil, "Error: That worldedit command could not be found (perhaps it hasn't been upgraded to worldedit.register_command() yet?)" end
local def = worldedit.registered_commands[cmd_name]
@ -22,7 +25,7 @@ worldedit.register_command("subdivide", {
privs = { worldedit = true },
require_pos = 2,
parse = function(params_text)
local parts = worldeditadditions.split(params_text, "%s+", false)
local parts = wea.split(params_text, "%s+", false)
if #parts < 4 then
return false, "Error: Not enough arguments (try /help /subdivide)."
@ -55,7 +58,7 @@ worldedit.register_command("subdivide", {
return worldedit.volume(worldedit.pos1[name], worldedit.pos2[name])
end,
func = function(name, chunk_size, cmd_name, args)
local time_total = os.clock()
local time_total = worldeditadditions.get_ms_time()
local pos1, pos2 = worldedit.sort_pos(worldedit.pos1[name], worldedit.pos2[name])
local volume = worldedit.volume(pos1, pos2)
@ -68,12 +71,13 @@ worldedit.register_command("subdivide", {
chunk_size.y = chunk_size.y - 1 -- WorldEdit regions are inclusive
chunk_size.z = chunk_size.z - 1 -- WorldEdit regions are inclusive
worldedit.player_notify(name, worldeditadditions.vector.tostring(pos1).." - "..worldeditadditions.vector.tostring(pos2).." chunk size: "..worldeditadditions.vector.tostring(chunk_size))
worldedit.player_notify(name, wea.vector.tostring(pos1).." - "..wea.vector.tostring(pos2).." chunk size: "..wea.vector.tostring(chunk_size))
local i = 1
local chunks_total = math.ceil((pos2.x - pos1.x) / chunk_size.x)
* math.ceil((pos2.y - pos1.y) / chunk_size.y)
* math.ceil((pos2.z - pos1.z) / chunk_size.z)
local time_last_msg = worldeditadditions.get_ms_time()
local time_chunks = {}
for z = pos2.z, pos1.z, -(chunk_size.z + 1) do
for y = pos2.y, pos1.y, -(chunk_size.y + 1) do
@ -84,36 +88,36 @@ worldedit.register_command("subdivide", {
y = y - chunk_size.y,
z = z - chunk_size.z
}
print("c1", worldeditadditions.vector.tostring(c_pos1), "c2", worldeditadditions.vector.tostring(c_pos2), "volume", worldedit.volume(c_pos1, c_pos2))
if c_pos1.x < pos1.x then
print("clamping c1.x", c_pos1.x, "to", pos1.x)
c_pos1.x = pos1.x
end
if c_pos1.y < pos1.y then
print("clamping c1.y", c_pos1.y, "to", pos1.y)
c_pos1.y = pos1.y
end
if c_pos1.z < pos1.z then
print("clamping c1.z", c_pos1.z, "to", pos1.z)
c_pos1.z = pos1.z
end
-- print("c1", wea.vector.tostring(c_pos1), "c2", wea.vector.tostring(c_pos2), "volume", worldedit.volume(c_pos1, c_pos2))
if c_pos1.x < pos1.x then c_pos1.x = pos1.x end
if c_pos1.y < pos1.y then c_pos1.y = pos1.y end
if c_pos1.z < pos1.z then c_pos1.z = pos1.z end
local time_this = os.clock()
local time_this = worldeditadditions.get_ms_time()
worldedit.pos1[name] = c_pos1
worldedit.pos2[name] = c_pos2
cmd.func(name, args)
if will_trigger_saferegion(name, cmd_name, args) then
minetest.chatcommands["/y"].func()
end
time_this = os.clock() - time_this
time_this = worldeditadditions.get_ms_time() - time_this
table.insert(time_chunks, time_this)
worldedit.player_notify(name,
"[ //subdivide "..cmd_name.." "..args.." ] "
..i.." / "..chunks_total.." (~"
..string.format("%.2f", (i / chunks_total) * 100).."%) complete | "..
worldeditadditions.vector.tostring(c_pos1).." - "..
worldeditadditions.vector.tostring(c_pos2).."("..worldedit.volume(c_pos1, c_pos2).." nodes)"
)
local time_average = wea.average(time_chunks)
local eta = (chunks_total - i) * time_average
if worldeditadditions.get_ms_time() - time_last_msg > 5 * 1000 then
worldedit.player_notify(name,
"[ //subdivide "..cmd_name.." "..args.." ] "
..i.." / "..chunks_total.." (~"
..string.format("%.2f", (i / chunks_total) * 100).."%) complete | "
.."this chunk: "..wea.human_time(time_this)
.."("..worldedit.volume(c_pos1, c_pos2).." nodes)"
..", average: "..wea.human_time(time_average)
..", ETA: ~"..wea.human_time(eta)
)
time_last_msg = worldeditadditions.get_ms_time()
end
i = i + 1
end
@ -121,10 +125,10 @@ worldedit.register_command("subdivide", {
end
worldedit.pos1[name] = pos1
worldedit.pos2[name] = pos2
time_total = os.clock() - time_total
time_total = worldeditadditions.get_ms_time() - time_total
minetest.log("action", name.." used //subdivide at "..worldeditadditions.vector.tostring(pos1).." - "..worldeditadditions.vector.tostring(pos2)..", with "..i.." chunks and "..worldedit.volume(pos1, pos2).." total nodes in "..time_total.."s")
minetest.log("action", name.." used //subdivide at "..wea.vector.tostring(pos1).." - "..wea.vector.tostring(pos2)..", with "..i.." chunks and "..worldedit.volume(pos1, pos2).." total nodes in "..time_total.."s")
return true, "/subdivide complete"
end
})

View File

@ -41,9 +41,9 @@ worldedit.register_command("torus", {
return math.ceil(2 * math.pi*math.pi * major_radius * minor_radius*minor_radius)
end,
func = function(name, target_node, major_radius, minor_radius)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local replaced = worldeditadditions.torus(worldedit.pos1[name], major_radius, minor_radius, target_node, false)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //torus at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. replaced .. " nodes in " .. time_taken .. "s")
return true, replaced .. " nodes replaced in " .. time_taken .. "s"
@ -64,9 +64,9 @@ worldedit.register_command("hollowtorus", {
return math.ceil(2 * math.pi*math.pi * major_radius * minor_radius*minor_radius)
end,
func = function(name, target_node, major_radius, minor_radius)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local replaced = worldeditadditions.torus(worldedit.pos1[name], major_radius, minor_radius, target_node, true)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //hollowtorus at " .. worldeditadditions.vector.tostring(worldedit.pos1[name]) .. ", replacing " .. replaced .. " nodes in " .. time_taken .. "s")
return true, replaced .. " nodes replaced in " .. time_taken .. "s"

View File

@ -24,9 +24,9 @@ worldedit.register_command("walls", {
return worldedit.volume(pos1, pos2) - worldedit.volume(pos1, pos3)
end,
func = function(name, target_node)
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local success, replaced = worldeditadditions.walls(worldedit.pos1[name], worldedit.pos2[name], target_node)
local time_taken = os.clock() - start_time
local time_taken = worldeditadditions.get_ms_time() - start_time
minetest.log("action", name .. " used //walls from "..worldeditadditions.vector.tostring(worldedit.pos1[name]).." to "..worldeditadditions.vector.tostring(worldedit.pos1[name])..", replacing " .. replaced .. " nodes in " .. time_taken .. "s")
return true, replaced .. " nodes replaced in " .. time_taken .. "s"

View File

@ -38,12 +38,12 @@ minetest.register_chatcommand("/multi", {
func = function(name, params_text)
local i = 1 -- For feedback only
local master_start_time = os.clock()
local master_start_time = worldeditadditions.get_ms_time()
local times = {}
-- Things start at 1, not 0 in Lua :-(
for command in explode(" /", string.sub(params_text, 2)) do
local start_time = os.clock()
local start_time = worldeditadditions.get_ms_time()
local found, _, command_name, args = command:find("^([^%s]+)%s(.+)$")
if not found then command_name = command end
command_name = trim(command_name)
@ -61,11 +61,11 @@ minetest.register_chatcommand("/multi", {
minetest.log("action", name.." runs "..command)
cmd.func(name, args)
times[#times + 1] = (os.clock() - start_time) * 1000
times[#times + 1] = (worldeditadditions.get_ms_time() - start_time) * 1000
i = i + 1
end
local total_time = (os.clock() - master_start_time) * 1000
local total_time = (worldeditadditions.get_ms_time() - master_start_time) * 1000
local done_message = {}
table.insert(done_message,
string.format("Executed %d commands in %s (",