aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs66
1 files changed, 22 insertions, 44 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 6812914..e55acfe 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -790,37 +790,13 @@ namespace OpenSim.Region.Framework.Scenes
790 /// </summary> 790 /// </summary>
791 public void SendPrimUpdates() 791 public void SendPrimUpdates()
792 { 792 {
793 m_perfMonMS = EnvironmentTickCount(); 793 m_perfMonMS = Util.EnvironmentTickCount();
794 794
795 m_sceneViewer.SendPrimUpdates(); 795 m_sceneViewer.SendPrimUpdates();
796 796
797 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 797 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
798 } 798 }
799 799
800 /// <summary>
801 /// Environment.TickCount is an int but it counts all 32 bits so it goes positive
802 /// and negative every 24.9 days. This trims down TickCount so it doesn't wrap
803 /// for the callers.
804 /// This trims it to a 12 day interval so don't let your frame time get too long.
805 /// </summary>
806 /// <returns></returns>
807 const Int32 EnvironmentTickCountMask = 0x3fffffff;
808 private static Int32 EnvironmentTickCount() {
809 return Environment.TickCount & EnvironmentTickCountMask;
810 }
811
812 /// <summary>
813 /// Environment.TickCount is an int but it counts all 32 bits so it goes positive
814 /// and negative every 24.9 days. Subtracts the passed value (previously fetched by
815 /// 'EnvironmentTickCount()') and accounts for any wrapping.
816 /// </summary>
817 /// <returns>subtraction of passed prevValue from current Environment.TickCount</returns>
818 private static Int32 EnvironmentTickCountSubtract(Int32 prevValue) {
819 Int32 diff = EnvironmentTickCount() - prevValue;
820 return (diff >= 0) ? diff : (diff + EnvironmentTickCountMask + 1);
821 }
822
823
824 #region Status Methods 800 #region Status Methods
825 801
826 /// <summary> 802 /// <summary>
@@ -1209,7 +1185,7 @@ namespace OpenSim.Region.Framework.Scenes
1209 // return; 1185 // return;
1210 //} 1186 //}
1211 1187
1212 m_perfMonMS = EnvironmentTickCount(); 1188 m_perfMonMS = Util.EnvironmentTickCount();
1213 1189
1214 ++m_movementUpdateCount; 1190 ++m_movementUpdateCount;
1215 if (m_movementUpdateCount < 1) 1191 if (m_movementUpdateCount < 1)
@@ -1539,7 +1515,7 @@ namespace OpenSim.Region.Framework.Scenes
1539 1515
1540 m_scene.EventManager.TriggerOnClientMovement(this); 1516 m_scene.EventManager.TriggerOnClientMovement(this);
1541 1517
1542 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 1518 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
1543 } 1519 }
1544 1520
1545 public void DoAutoPilot(uint not_used, Vector3 Pos, IClientAPI remote_client) 1521 public void DoAutoPilot(uint not_used, Vector3 Pos, IClientAPI remote_client)
@@ -2057,7 +2033,7 @@ namespace OpenSim.Region.Framework.Scenes
2057 return; 2033 return;
2058 } 2034 }
2059 2035
2060 m_perfMonMS = EnvironmentTickCount(); 2036 m_perfMonMS = Util.EnvironmentTickCount();
2061 2037
2062 Rotation = rotation; 2038 Rotation = rotation;
2063 Vector3 direc = vec * rotation; 2039 Vector3 direc = vec * rotation;
@@ -2099,7 +2075,7 @@ namespace OpenSim.Region.Framework.Scenes
2099 // TODO: Add the force instead of only setting it to support multiple forces per frame? 2075 // TODO: Add the force instead of only setting it to support multiple forces per frame?
2100 m_forceToApply = direc; 2076 m_forceToApply = direc;
2101 m_isNudging = Nudging; 2077 m_isNudging = Nudging;
2102 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCount() - m_perfMonMS); 2078 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
2103 } 2079 }
2104 2080
2105 #endregion 2081 #endregion
@@ -2168,7 +2144,7 @@ namespace OpenSim.Region.Framework.Scenes
2168 // server. 2144 // server.
2169 if (remoteClient.IsActive) 2145 if (remoteClient.IsActive)
2170 { 2146 {
2171 m_perfMonMS = EnvironmentTickCount(); 2147 m_perfMonMS = Util.EnvironmentTickCount();
2172 2148
2173 PhysicsActor actor = m_physicsActor; 2149 PhysicsActor actor = m_physicsActor;
2174 Vector3 velocity = (actor != null) ? actor.Velocity : Vector3.Zero; 2150 Vector3 velocity = (actor != null) ? actor.Velocity : Vector3.Zero;
@@ -2181,7 +2157,7 @@ namespace OpenSim.Region.Framework.Scenes
2181 remoteClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, 2157 remoteClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
2182 pos, velocity, Vector3.Zero, m_bodyRot, CollisionPlane, m_uuid, null, GetUpdatePriority(remoteClient))); 2158 pos, velocity, Vector3.Zero, m_bodyRot, CollisionPlane, m_uuid, null, GetUpdatePriority(remoteClient)));
2183 2159
2184 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 2160 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
2185 m_scene.StatsReporter.AddAgentUpdates(1); 2161 m_scene.StatsReporter.AddAgentUpdates(1);
2186 } 2162 }
2187 } 2163 }
@@ -2191,11 +2167,11 @@ namespace OpenSim.Region.Framework.Scenes
2191 /// </summary> 2167 /// </summary>
2192 public void SendTerseUpdateToAllClients() 2168 public void SendTerseUpdateToAllClients()
2193 { 2169 {
2194 m_perfMonMS = EnvironmentTickCount(); 2170 m_perfMonMS = Util.EnvironmentTickCount();
2195 2171
2196 m_scene.ForEachClient(SendTerseUpdateToClient); 2172 m_scene.ForEachClient(SendTerseUpdateToClient);
2197 2173
2198 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 2174 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
2199 } 2175 }
2200 2176
2201 public void SendCoarseLocations() 2177 public void SendCoarseLocations()
@@ -2215,7 +2191,7 @@ namespace OpenSim.Region.Framework.Scenes
2215 2191
2216 public void SendCoarseLocationsDefault(UUID sceneId, ScenePresence p) 2192 public void SendCoarseLocationsDefault(UUID sceneId, ScenePresence p)
2217 { 2193 {
2218 m_perfMonMS = EnvironmentTickCount(); 2194 m_perfMonMS = Util.EnvironmentTickCount();
2219 2195
2220 List<Vector3> CoarseLocations = new List<Vector3>(); 2196 List<Vector3> CoarseLocations = new List<Vector3>();
2221 List<UUID> AvatarUUIDs = new List<UUID>(); 2197 List<UUID> AvatarUUIDs = new List<UUID>();
@@ -2251,7 +2227,7 @@ namespace OpenSim.Region.Framework.Scenes
2251 2227
2252 m_controllingClient.SendCoarseLocationUpdate(AvatarUUIDs, CoarseLocations); 2228 m_controllingClient.SendCoarseLocationUpdate(AvatarUUIDs, CoarseLocations);
2253 2229
2254 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 2230 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
2255 } 2231 }
2256 2232
2257 public void CoarseLocationChange() 2233 public void CoarseLocationChange()
@@ -2288,7 +2264,7 @@ namespace OpenSim.Region.Framework.Scenes
2288 /// </summary> 2264 /// </summary>
2289 public void SendInitialFullUpdateToAllClients() 2265 public void SendInitialFullUpdateToAllClients()
2290 { 2266 {
2291 m_perfMonMS = EnvironmentTickCount(); 2267 m_perfMonMS = Util.EnvironmentTickCount();
2292 2268
2293 ScenePresence[] avatars = m_scene.GetScenePresences(); 2269 ScenePresence[] avatars = m_scene.GetScenePresences();
2294 2270
@@ -2314,14 +2290,14 @@ namespace OpenSim.Region.Framework.Scenes
2314 } 2290 }
2315 2291
2316 m_scene.StatsReporter.AddAgentUpdates(avatars.Length); 2292 m_scene.StatsReporter.AddAgentUpdates(avatars.Length);
2317 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 2293 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
2318 2294
2319 //Animator.SendAnimPack(); 2295 //Animator.SendAnimPack();
2320 } 2296 }
2321 2297
2322 public void SendFullUpdateToAllClients() 2298 public void SendFullUpdateToAllClients()
2323 { 2299 {
2324 m_perfMonMS = EnvironmentTickCount(); 2300 m_perfMonMS = Util.EnvironmentTickCount();
2325 2301
2326 // only send update from root agents to other clients; children are only "listening posts" 2302 // only send update from root agents to other clients; children are only "listening posts"
2327 List<ScenePresence> avatars = m_scene.GetAvatars(); 2303 List<ScenePresence> avatars = m_scene.GetAvatars();
@@ -2331,7 +2307,7 @@ namespace OpenSim.Region.Framework.Scenes
2331 2307
2332 } 2308 }
2333 m_scene.StatsReporter.AddAgentUpdates(avatars.Count); 2309 m_scene.StatsReporter.AddAgentUpdates(avatars.Count);
2334 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 2310 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
2335 2311
2336 Animator.SendAnimPack(); 2312 Animator.SendAnimPack();
2337 } 2313 }
@@ -2373,7 +2349,7 @@ namespace OpenSim.Region.Framework.Scenes
2373 /// </summary> 2349 /// </summary>
2374 public void SendAppearanceToAllOtherAgents() 2350 public void SendAppearanceToAllOtherAgents()
2375 { 2351 {
2376 m_perfMonMS = EnvironmentTickCount(); 2352 m_perfMonMS = Util.EnvironmentTickCount();
2377 2353
2378 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 2354 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
2379 { 2355 {
@@ -2382,8 +2358,8 @@ namespace OpenSim.Region.Framework.Scenes
2382 SendAppearanceToOtherAgent(scenePresence); 2358 SendAppearanceToOtherAgent(scenePresence);
2383 } 2359 }
2384 }); 2360 });
2385 2361
2386 m_scene.StatsReporter.AddAgentTime(EnvironmentTickCountSubtract(m_perfMonMS)); 2362 m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
2387 } 2363 }
2388 2364
2389 /// <summary> 2365 /// <summary>
@@ -3200,11 +3176,13 @@ namespace OpenSim.Region.Framework.Scenes
3200 3176
3201 // I don't get it but mono crashes when you try to dispose of this timer, 3177 // I don't get it but mono crashes when you try to dispose of this timer,
3202 // unsetting the elapsed callback should be enough to allow for cleanup however. 3178 // unsetting the elapsed callback should be enough to allow for cleanup however.
3203 //m_reprioritizationTimer.Dispose(); 3179 // m_reprioritizationTimer.Dispose();
3204 3180
3205 m_sceneViewer.Close(); 3181 m_sceneViewer.Close();
3206 3182
3207 RemoveFromPhysicalScene(); 3183 RemoveFromPhysicalScene();
3184 m_animator.Close();
3185 m_animator = null;
3208 } 3186 }
3209 3187
3210 public ScenePresence() 3188 public ScenePresence()