- funzioni di precollisione lama spostate in libreria apposita PreCollisionLib
- calcolo tempo esecuzione migliorato (TimeLib e riferimenti) - idTempGroup ora è scritto nel Part per evitare di ricercarlo ogni volta
This commit is contained in:
+92
-40
@@ -12,59 +12,111 @@ EgtOutLog( ' TimeLib started', 1)
|
||||
TimeLib.__index = TimeLib
|
||||
|
||||
function TimeLib.new()
|
||||
local self = setmetatable({}, TimeLib)
|
||||
self.dStartTime = os.clock()
|
||||
self.Checkpoints = {} -- each checkpoint stores first and last timestamps
|
||||
return self
|
||||
local TimeLibInstance = setmetatable({}, TimeLib)
|
||||
TimeLibInstance.dStartTime = os.clock()
|
||||
TimeLibInstance.Measurements = {}
|
||||
return TimeLibInstance
|
||||
end
|
||||
|
||||
-- reset timer
|
||||
-- reset entire timer
|
||||
function TimeLib:start()
|
||||
self.dStartTime = os.clock()
|
||||
self.Checkpoints = {}
|
||||
self.Measurements = {}
|
||||
end
|
||||
|
||||
-- setta un checkpoint con nome (default se non specificato)
|
||||
function TimeLib:setCheckpoint( sName)
|
||||
local sCpName = sName or "default"
|
||||
local dNow = os.clock()
|
||||
-- start elapsed measurement for a specific name
|
||||
function TimeLib:startElapsed(sName)
|
||||
local sMeasurementName = sName or "Default"
|
||||
local dNow = os.clock()
|
||||
|
||||
if not self.Checkpoints[sCpName] then
|
||||
self.Checkpoints[sCpName] = { dFirst = dNow, dLast = dNow }
|
||||
else
|
||||
self.Checkpoints[sCpName].dLast = dNow
|
||||
end
|
||||
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
|
||||
|
||||
-- ritorna il tempo trascorso
|
||||
-- se settato un checkpoint, ritorna anche il tempo di quel checkpoint, cumulativo (dal primo checkpoint settato con quel nome) e recente (dall'ultimo checkpoint settato)
|
||||
function TimeLib:elapsed( sCheckpointName)
|
||||
local dTotal = os.clock() - self.dStartTime
|
||||
local sCpName = sCheckpointName or "default"
|
||||
local Checkpoint = self.Checkpoints[sCpName]
|
||||
-- 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 Checkpoint then
|
||||
local dCumulative = os.clock() - Checkpoint.dFirst
|
||||
local dRecent = os.clock() - Checkpoint.dLast
|
||||
return dTotal, dCumulative, dRecent
|
||||
else
|
||||
return dTotal, nil, nil
|
||||
end
|
||||
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
|
||||
|
||||
-- log del tempo trascorso, come sopra
|
||||
function TimeLib:logElapsed( sCheckpointName)
|
||||
local dTotal, dCumulative, dRecent = self:elapsed( sCheckpointName)
|
||||
local sCpName = sCheckpointName or "default"
|
||||
-- reset elapsed for a specific measurement
|
||||
function TimeLib:resetElapsed(sName)
|
||||
local sMeasurementName = sName or "Default"
|
||||
self.Measurements[sMeasurementName] = nil
|
||||
end
|
||||
|
||||
if dCumulative then
|
||||
EgtOutLog( string.format(
|
||||
"%s time: recent %.3f, cumulative %.3f, total %.3f",
|
||||
sCpName, dRecent, dCumulative, dTotal))
|
||||
else
|
||||
EgtOutLog( string.format("Total %.3f (no checkpoint '%s' set)",
|
||||
dTotal, sCpName))
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user