minetest.get_us_time

From Minetest Developer Wiki
Jump to navigation Jump to search

Syntax

minetest.get_us_time()

Description

Returns time with microsecond precision. This does not seem to be strictly related to game time or time of day in a meaningful way, but should be useful for taking differences in time measured during a single execution of the server. For example, it can be useful for profiling mod performance.

Examples

local t0_us = minetest.get_us_time();
-- ...
local t1_us = minetest.get_us_time();
local elapsed_time_in_seconds = (t1_us - t0_us)/1000000.0;


to get time differences, minetest.get_us_time seems to works faster than os.clock:

[…]

local oclock = os.clock
local ustime = minetest.get_us_time

local function test_os_clock()
	local t1 = oclock()
	local delay = tonumber(oclock() - t1)
end

local function test_get_us_time()
	local t1 = ustime()
	local delay = (ustime() - t1) / 1000000
end

local function apply_timer_tests()
	local oclock_count = benchmark_function(test_os_clock)
	local ustime_count = benchmark_function(test_get_us_time)
	print("test_os_clock: " .. oclock_count .. " s⁻¹")
	print("test_get_us_time: " .. ustime_count .. " s⁻¹")
	print("minetest.get_us_time is " .. ustime_count / oclock_count .. " times as fast as os.clock")
end

apply_timer_tests()

minetest.register_node(":mo:timtest", {
	on_place = apply_timer_tests
})

--[[ results:

Using minetest.get_us_time for measuring (see the benchmark function):

executing when loading:

test_os_clock: 1019720 s⁻¹
test_get_us_time: 1843077.3333333 s⁻¹
minetest.get_us_time is 1.8074347206423 times as fast as os.clock


placing the node:

test_os_clock: 742641.66666667 s⁻¹
test_get_us_time: 1772569.6666667 s⁻¹
minetest.get_us_time is 2.3868438120673 times as fast as os.clock

test_os_clock: 824095 s⁻¹
test_get_us_time: 1790176.6666667 s⁻¹
minetest.get_us_time is 2.1722940518589 times as fast as os.clock

test_os_clock: 736386.33333333 s⁻¹
test_get_us_time: 1769226.6666667 s⁻¹
minetest.get_us_time is 2.4025794431275 times as fast as os.clock


Using os.clock for measuring:

executing when loading:

test_os_clock: 801913.66666667 s⁻¹
test_get_us_time: 1229572.3333333 s⁻¹
minetest.get_us_time is 1.5332976409347 times as fast as os.clock


placing the node:

test_os_clock: 326955 s⁻¹
test_get_us_time: 642647.66666667 s⁻¹
minetest.get_us_time is 1.9655538733669 times as fast as os.clock

test_os_clock: 475252 s⁻¹
test_get_us_time: 844550.33333333 s⁻¹
minetest.get_us_time is 1.7770579257601 times as fast as os.clock

test_os_clock: 296636 s⁻¹
test_get_us_time: 574708.33333333 s⁻¹
minetest.get_us_time is 1.9374193736881 times as fast as os.clock
]]

benchmark_function from Lua_Optimization_Tips#Benchmarking