From 4338f4e1d7c841ba447eb2d7481daaa009182bc7 Mon Sep 17 00:00:00 2001
From: Teravus Ovares (Dan Olivares)
Date: Sun, 29 Nov 2009 05:06:25 -0500
Subject: * Patch from Misterblue to fix Environment.TickCount for statistics
purposes. Resolves the wrap-around of the 32 bit uint. * Teravus moved the
Environment methods to the Util class
---
OpenSim/Framework/Util.cs | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Framework')
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 87ba5a8..a459f8d 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1389,6 +1389,30 @@ namespace OpenSim.Framework
return null;
}
- #endregion FireAndForget Threading Pattern
+ #endregion FireAndForget Threading Pattern
+ ///
+ /// Environment.TickCount is an int but it counts all 32 bits so it goes positive
+ /// and negative every 24.9 days. This trims down TickCount so it doesn't wrap
+ /// for the callers.
+ /// This trims it to a 12 day interval so don't let your frame time get too long.
+ ///
+ ///
+ public static Int32 EnvironmentTickCount()
+ {
+ return Environment.TickCount & EnvironmentTickCountMask;
+ }
+ const Int32 EnvironmentTickCountMask = 0x3fffffff;
+
+ ///
+ /// Environment.TickCount is an int but it counts all 32 bits so it goes positive
+ /// and negative every 24.9 days. Subtracts the passed value (previously fetched by
+ /// 'EnvironmentTickCount()') and accounts for any wrapping.
+ ///
+ /// subtraction of passed prevValue from current Environment.TickCount
+ public static Int32 EnvironmentTickCountSubtract(Int32 prevValue)
+ {
+ Int32 diff = EnvironmentTickCount() - prevValue;
+ return (diff >= 0) ? diff : (diff + EnvironmentTickCountMask + 1);
+ }
}
}
--
cgit v1.1