From 3674257095f0c511b1f5810fdc034c2d49bb73a8 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Thu, 7 Feb 2008 08:15:38 +0000 Subject: * This update contains a bucket-full of network optimizations. * ParcelProperties are sent only when needed instead of on any movement * Terse Updates and other temporary data packets are marked unreliable * After a certain amount of users, the sim actually sends updates on things less * Experimental * Tested to 68 avatar with pCampBot (And it's surprising what actually causes the most lag.. the text chat!) --- .../Environment/LandManagement/LandManager.cs | 13 ++++++++++-- OpenSim/Region/Environment/Scenes/Scene.cs | 23 +++++++++++++++++++++- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 3 ++- .../Region/Environment/Scenes/SimStatsReporter.cs | 7 +++++++ 4 files changed, 42 insertions(+), 4 deletions(-) (limited to 'OpenSim/Region/Environment') diff --git a/OpenSim/Region/Environment/LandManagement/LandManager.cs b/OpenSim/Region/Environment/LandManagement/LandManager.cs index 09fa09b..dd13fc0 100644 --- a/OpenSim/Region/Environment/LandManagement/LandManager.cs +++ b/OpenSim/Region/Environment/LandManagement/LandManager.cs @@ -718,23 +718,32 @@ namespace OpenSim.Region.Environment.LandManagement } } - public void sendLandUpdate(ScenePresence avatar) + public void sendLandUpdate(ScenePresence avatar, bool force) { Land over = getLandObject((int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.X))), (int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.Y)))); if (over != null) { - over.sendLandUpdateToClient(avatar.ControllingClient); + if (force) + { + over.sendLandUpdateToClient(avatar.ControllingClient); + } + if (avatar.currentParcelUUID != over.landData.globalID) { + over.sendLandUpdateToClient(avatar.ControllingClient); avatar.currentParcelUUID = over.landData.globalID; m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.localID, m_scene.RegionInfo.RegionID); } } } + public void sendLandUpdate(ScenePresence avatar) + { + sendLandUpdate(avatar, false); + } public void handleSignificantClientMovement(IClientAPI remote_client) { ScenePresence clientAvatar = m_scene.GetScenePresence(remote_client.AgentId); diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 6b891fd..a62e6c6 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -626,7 +626,28 @@ namespace OpenSim.Region.Environment.Scenes // Aquire a lock so only one update call happens at once updateLock.WaitOne(); float physicsFPS = 0; - + int agentsInScene = m_innerScene.GetRootAgentCount() + m_innerScene.GetChildAgentCount(); + + if (agentsInScene > 21) + { + if (m_update_entities == 1) + { + m_update_avatars = 5; + m_update_entities = 5; + m_statsReporter.SetUpdateMS(6000); + } + } + else + { + if (m_update_entities == 5) + { + m_update_avatars = 1; + m_update_entities = 1; + m_statsReporter.SetUpdateMS(3000); + } + } + + frameMS = System.Environment.TickCount; try { diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 4062ef6..374586c 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -77,6 +77,7 @@ namespace OpenSim.Region.Environment.Scenes private bool m_newForce = false; private bool m_newCoarseLocations = true; private bool m_gotAllObjectsInScene = false; + // Default AV Height private float m_avHeight = 127.0f; @@ -354,7 +355,7 @@ namespace OpenSim.Region.Environment.Scenes RegisterToEvents(); SetDirectionVectors(); - m_scene.LandManager.sendLandUpdate(this); + m_scene.LandManager.sendLandUpdate(this, true); } public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, byte[] visualParams, diff --git a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs index f2cefb5..3e1fec2 100644 --- a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs @@ -124,6 +124,13 @@ namespace OpenSim.Region.Environment.Scenes m_report.Enabled = true; } + public void SetUpdateMS(int ms) + { + statsUpdatesEveryMS = ms; + statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000); + m_report.Interval = statsUpdatesEveryMS; + } + private void statsHeartBeat(object sender, EventArgs e) { m_report.Enabled = false; -- cgit v1.1