74a12a4a42
- calcolo tempo esecuzione migliorato (TimeLib e riferimenti) - idTempGroup ora è scritto nel Part per evitare di ricercarlo ogni volta
123 lines
3.4 KiB
Lua
123 lines
3.4 KiB
Lua
-- BeamLib.lua by Egalware s.r.l. 2025/11/24
|
|
-- Libreria calcolo tempo automatismo
|
|
|
|
|
|
-- Tabella per definizione modulo
|
|
local TimeLib = {}
|
|
|
|
|
|
EgtOutLog( ' TimeLib started', 1)
|
|
|
|
|
|
TimeLib.__index = TimeLib
|
|
|
|
function TimeLib.new()
|
|
local TimeLibInstance = setmetatable({}, TimeLib)
|
|
TimeLibInstance.dStartTime = os.clock()
|
|
TimeLibInstance.Measurements = {}
|
|
return TimeLibInstance
|
|
end
|
|
|
|
-- reset entire timer
|
|
function TimeLib:start()
|
|
self.dStartTime = os.clock()
|
|
self.Measurements = {}
|
|
end
|
|
|
|
-- start elapsed measurement for a specific name
|
|
function TimeLib:startElapsed(sName)
|
|
local sMeasurementName = sName or "Default"
|
|
local dNow = os.clock()
|
|
|
|
if not self.Measurements[sMeasurementName] then
|
|
self.Measurements[sMeasurementName] = {
|
|
dStart = dNow,
|
|
dLast = 0,
|
|
dCumulative = 0,
|
|
dRecent = 0,
|
|
nCount = 0
|
|
}
|
|
else
|
|
self.Measurements[sMeasurementName].dStart = dNow
|
|
end
|
|
end
|
|
|
|
-- stop elapsed measurement (increments count and updates cumulative)
|
|
function TimeLib:stopElapsed(sName)
|
|
local sMeasurementName = sName or "Default"
|
|
local dNow = os.clock()
|
|
local Measurement = self.Measurements[sMeasurementName]
|
|
|
|
if Measurement and Measurement.dStart then
|
|
local dDuration = dNow - Measurement.dStart
|
|
Measurement.dRecent = dDuration
|
|
Measurement.dCumulative = Measurement.dCumulative + dDuration
|
|
Measurement.dLast = dNow
|
|
Measurement.nCount = Measurement.nCount + 1
|
|
Measurement.dStart = nil
|
|
else
|
|
-- if stop called without start, initialize with zero
|
|
self.Measurements[sMeasurementName] = {
|
|
dStart = nil,
|
|
dLast = dNow,
|
|
dCumulative = 0,
|
|
dRecent = 0,
|
|
nCount = 0
|
|
}
|
|
end
|
|
end
|
|
|
|
-- reset elapsed for a specific measurement
|
|
function TimeLib:resetElapsed(sName)
|
|
local sMeasurementName = sName or "Default"
|
|
self.Measurements[sMeasurementName] = nil
|
|
end
|
|
|
|
-- return elapsed times: total, cumulative, recent, count
|
|
function TimeLib:getElapsed(sName)
|
|
local dTotal = os.clock() - self.dStartTime
|
|
local sMeasurementName = sName or "Default"
|
|
local Measurement = self.Measurements[sMeasurementName]
|
|
|
|
if Measurement then
|
|
return dTotal, Measurement.dCumulative, Measurement.dRecent, Measurement.nCount
|
|
else
|
|
return dTotal, nil, nil, 0
|
|
end
|
|
end
|
|
|
|
-- log elapsed times for one measurement
|
|
function TimeLib:logElapsed(sName)
|
|
local dTotal, dCumulative, dRecent, nCount = self:getElapsed(sName)
|
|
local sMeasurementName = sName or "Default"
|
|
|
|
if dCumulative then
|
|
EgtOutLog(string.format(
|
|
"%s(#%d): recent %.3f, cumulative %.3f, total %.3f",
|
|
sMeasurementName, nCount, dRecent, dCumulative, dTotal))
|
|
else
|
|
EgtOutLog(string.format("Total %.3f (no '%s' measurement started)",
|
|
dTotal, sMeasurementName))
|
|
end
|
|
end
|
|
|
|
-- log elapsed times for all measurements
|
|
function TimeLib:logAllElapsed()
|
|
local dTotal = os.clock() - self.dStartTime
|
|
if next(self.Measurements) == nil then
|
|
EgtOutLog(string.format("Total %.3f (no measurements started)", dTotal))
|
|
return
|
|
end
|
|
|
|
for sMeasurementName, Measurement in pairs(self.Measurements) do
|
|
local dCumulative = Measurement.dCumulative
|
|
local dRecent = Measurement.dRecent
|
|
local nCount = Measurement.nCount
|
|
EgtOutLog(string.format(
|
|
"%s(#%d): recent %.3f, cumulative %.3f, total %.3f",
|
|
sMeasurementName, nCount, dRecent, dCumulative, dTotal))
|
|
end
|
|
end
|
|
|
|
return TimeLib
|