aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2014-07-29 18:09:11 +0100
committerJustin Clark-Casey (justincc)2014-07-29 18:09:11 +0100
commit0f87a99e54d0665824d055ce1dcf5f4240dec0bc (patch)
treee6675f9a29b63ecdaf7e9574f9f5cfd6fc8c322b /OpenSim/Region/Framework/Scenes
parentAdd "debug scene set appear-refresh true|false" to control whether periodic a... (diff)
downloadopensim-SC-0f87a99e54d0665824d055ce1dcf5f4240dec0bc.zip
opensim-SC-0f87a99e54d0665824d055ce1dcf5f4240dec0bc.tar.gz
opensim-SC-0f87a99e54d0665824d055ce1dcf5f4240dec0bc.tar.bz2
opensim-SC-0f87a99e54d0665824d055ce1dcf5f4240dec0bc.tar.xz
Add debug mechanism for only sending 1 in N AgentUpdate packets to child agents.
Allows experiments in manually reducing updates under heavy load. Activated by "debug scene set client-upd-per" console command. In a simple test, can send as few as every 4th update before observed movement starts becoming disturbingly rubber-banded.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs14
2 files changed, 18 insertions, 1 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 482e803..ab1d22c 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -247,6 +247,11 @@ namespace OpenSim.Region.Framework.Scenes
247 /// </summary> 247 /// </summary>
248 public float ClientVelocityUpdateTolerance { get; set; } 248 public float ClientVelocityUpdateTolerance { get; set; }
249 249
250 /// <summary>
251 /// If greater than 1, we only send terse updates to child agents on every n updates.
252 /// </summary>
253 public int ChildTerseUpdatePeriod { get; set; }
254
250 protected float m_defaultDrawDistance = 255.0f; 255 protected float m_defaultDrawDistance = 255.0f;
251 public float DefaultDrawDistance 256 public float DefaultDrawDistance
252 { 257 {
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 18a0491..73a5c25 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -859,6 +859,11 @@ namespace OpenSim.Region.Framework.Scenes
859 get { return Util.GetViewerName(m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode)); } 859 get { return Util.GetViewerName(m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode)); }
860 } 860 }
861 861
862 /// <summary>
863 /// Count of how many terse updates we have sent out. It doesn't matter if this overflows.
864 /// </summary>
865 private int m_terseUpdateCount;
866
862 #endregion 867 #endregion
863 868
864 #region Constructor(s) 869 #region Constructor(s)
@@ -3222,17 +3227,24 @@ namespace OpenSim.Region.Framework.Scenes
3222 3227
3223 #region Update Client(s) 3228 #region Update Client(s)
3224 3229
3225
3226 /// <summary> 3230 /// <summary>
3227 /// Sends a location update to the client connected to this scenePresence 3231 /// Sends a location update to the client connected to this scenePresence
3228 /// </summary> 3232 /// </summary>
3229 /// <param name="remoteClient"></param> 3233 /// <param name="remoteClient"></param>
3230 public void SendTerseUpdateToClient(IClientAPI remoteClient) 3234 public void SendTerseUpdateToClient(IClientAPI remoteClient)
3231 { 3235 {
3236 m_terseUpdateCount++;
3237
3232 // If the client is inactive, it's getting its updates from another 3238 // If the client is inactive, it's getting its updates from another
3233 // server. 3239 // server.
3234 if (remoteClient.IsActive) 3240 if (remoteClient.IsActive)
3235 { 3241 {
3242 if (Scene.ChildTerseUpdatePeriod > 1
3243 && remoteClient.SceneAgent.IsChildAgent
3244 && m_terseUpdateCount % Scene.ChildTerseUpdatePeriod != 0
3245 && !Velocity.ApproxEquals(Vector3.Zero, 0.001f))
3246 return;
3247
3236 //m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity); 3248 //m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity);
3237 3249
3238 remoteClient.SendEntityUpdate( 3250 remoteClient.SendEntityUpdate(