From fcf5fb5dfdabf0c8318156522ca008ce50b19a94 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 29 Jul 2014 18:54:16 +0100 Subject: Implement "scene debug set root-upd-per" for dropping 1 in N root agent updates except to originator For experimental purposes. Also corrects a previous bug where each terse update sent was counted rather than each set of terse updates to agents. --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs') diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 73a5c25..c7db306 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -3233,12 +3233,27 @@ namespace OpenSim.Region.Framework.Scenes /// public void SendTerseUpdateToClient(IClientAPI remoteClient) { - m_terseUpdateCount++; - // If the client is inactive, it's getting its updates from another // server. if (remoteClient.IsActive) { + if (Scene.RootTerseUpdatePeriod > 1) + { +// Console.WriteLine( +// "{0} {1} {2} {3} {4} {5} for {6} to {7}", +// remoteClient.AgentId, UUID, remoteClient.SceneAgent.IsChildAgent, m_terseUpdateCount, Scene.RootTerseUpdatePeriod, Velocity.ApproxEquals(Vector3.Zero, 0.001f), Name, remoteClient.Name); + if (remoteClient.AgentId != UUID + && !remoteClient.SceneAgent.IsChildAgent + && m_terseUpdateCount % Scene.RootTerseUpdatePeriod != 0 + && !Velocity.ApproxEquals(Vector3.Zero, 0.001f)) + { +// m_log.DebugFormat("[SCENE PRESENCE]: Discarded update from {0} to {1}, args {2} {3} {4} {5} {6} {7}", +// Name, remoteClient.Name, remoteClient.AgentId, UUID, remoteClient.SceneAgent.IsChildAgent, m_terseUpdateCount, Scene.RootTerseUpdatePeriod, Velocity.ApproxEquals(Vector3.Zero, 0.001f)); + + return; + } + } + if (Scene.ChildTerseUpdatePeriod > 1 && remoteClient.SceneAgent.IsChildAgent && m_terseUpdateCount % Scene.ChildTerseUpdatePeriod != 0 @@ -3304,6 +3319,8 @@ namespace OpenSim.Region.Framework.Scenes lastTerseUpdateToAllClientsTick = currentTick; lastPositionSentToAllClients = OffsetPosition; + m_terseUpdateCount++; + // Console.WriteLine("Scheduled update for {0} in {1}", Name, Scene.Name); m_scene.ForEachClient(SendTerseUpdateToClient); } -- cgit v1.1