Quantcast

Improve latency measurement by using the correct events for timestamps.

Johnny C. Lam [07-19-13 - 05:33]
Improve latency measurement by using the correct events for timestamps.

git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@981 d5049fe3-3747-40f7-a4b5-f36d6801af5f
Filename
OvaleFuture.lua
diff --git a/OvaleFuture.lua b/OvaleFuture.lua
index 7128c42..0af0bbe 100644
--- a/OvaleFuture.lua
+++ b/OvaleFuture.lua
@@ -166,6 +166,21 @@ local function AddSpellToQueue(spellId, lineId, startTime, endTime, channeled, a

 	tinsert(self_activeSpellcast, spellcast)

+	-- Update latency measurement.  API_GetTime() only updates on frame refresh (OnUpdate) so
+	-- this latency measurement has a lower bound of the 1/FPS, where FPS is the current frame
+	-- rate.
+	if self_sentSpellcast[lineId] then
+		local latency = Ovale.now - self_sentSpellcast[lineId]
+		local castTime = endTime - startTime
+		if castTime > 0 and latency > castTime then
+			latency = castTime
+		end
+		if latency > 0 then
+			self.latency = latency
+		end
+		self_sentSpellcast[lineId] = nil
+	end
+
 	ScoreSpell(spellId)
 	Ovale.refreshNeeded["player"] = true
 end
@@ -328,6 +343,8 @@ function OvaleFuture:UNIT_SPELLCAST_SENT(event, unit, spell, rank, target, lineI
 			self_lastTarget = OVALE_UNKNOWN_GUID
 		end
 		TracePrintf(spell, "%s: %f %s on %s, lineId=%d", event, Ovale.now, spell, self_lastTarget, lineId)
+
+		-- Note starting time for latency calculation.
 		self_sentSpellcast[lineId] = Ovale.now
 	end
 end
@@ -367,17 +384,6 @@ function OvaleFuture:UNIT_SPELLCAST_SUCCEEDED(event, unit, name, rank, lineId, s
 		if not API_UnitChannelInfo("player") then
 			AddSpellToQueue(spellId, lineId, Ovale.now, Ovale.now, false, true)
 		end
-
-		-- Update latency measurement.  API_GetTime() only updates on frame refresh (OnUpdate) so
-		-- this latency measurement has a lower bound of the 1/FPS, where FPS is the current frame
-		-- rate.
-		if self_sentSpellcast[lineId] then
-			local latency = Ovale.now - self_sentSpellcast[lineId]
-			if latency > 0 then
-				self.latency = latency
-			end
-			self_sentSpellcast[lineId] = nil
-		end
 	end
 end