aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
authorTeravus Ovares2008-02-07 08:15:38 +0000
committerTeravus Ovares2008-02-07 08:15:38 +0000
commit3674257095f0c511b1f5810fdc034c2d49bb73a8 (patch)
treea9b4cda92de5ef51d7626b526aa19cd5a563089d /OpenSim/Region/Environment
parent* didn't save :P so, this is the other half to my last commit (diff)
downloadopensim-SC-3674257095f0c511b1f5810fdc034c2d49bb73a8.zip
opensim-SC-3674257095f0c511b1f5810fdc034c2d49bb73a8.tar.gz
opensim-SC-3674257095f0c511b1f5810fdc034c2d49bb73a8.tar.bz2
opensim-SC-3674257095f0c511b1f5810fdc034c2d49bb73a8.tar.xz
* 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!)
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Environment/LandManagement/LandManager.cs13
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs23
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs3
-rw-r--r--OpenSim/Region/Environment/Scenes/SimStatsReporter.cs7
4 files changed, 42 insertions, 4 deletions
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
718 } 718 }
719 } 719 }
720 720
721 public void sendLandUpdate(ScenePresence avatar) 721 public void sendLandUpdate(ScenePresence avatar, bool force)
722 { 722 {
723 Land over = getLandObject((int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.X))), 723 Land over = getLandObject((int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.X))),
724 (int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.Y)))); 724 (int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.Y))));
725 725
726 if (over != null) 726 if (over != null)
727 { 727 {
728 over.sendLandUpdateToClient(avatar.ControllingClient); 728 if (force)
729 {
730 over.sendLandUpdateToClient(avatar.ControllingClient);
731 }
732
729 if (avatar.currentParcelUUID != over.landData.globalID) 733 if (avatar.currentParcelUUID != over.landData.globalID)
730 { 734 {
735 over.sendLandUpdateToClient(avatar.ControllingClient);
731 avatar.currentParcelUUID = over.landData.globalID; 736 avatar.currentParcelUUID = over.landData.globalID;
732 m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.localID, 737 m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.localID,
733 m_scene.RegionInfo.RegionID); 738 m_scene.RegionInfo.RegionID);
734 } 739 }
735 } 740 }
736 } 741 }
742 public void sendLandUpdate(ScenePresence avatar)
743 {
744 sendLandUpdate(avatar, false);
737 745
746 }
738 public void handleSignificantClientMovement(IClientAPI remote_client) 747 public void handleSignificantClientMovement(IClientAPI remote_client)
739 { 748 {
740 ScenePresence clientAvatar = m_scene.GetScenePresence(remote_client.AgentId); 749 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
626 // Aquire a lock so only one update call happens at once 626 // Aquire a lock so only one update call happens at once
627 updateLock.WaitOne(); 627 updateLock.WaitOne();
628 float physicsFPS = 0; 628 float physicsFPS = 0;
629 629 int agentsInScene = m_innerScene.GetRootAgentCount() + m_innerScene.GetChildAgentCount();
630
631 if (agentsInScene > 21)
632 {
633 if (m_update_entities == 1)
634 {
635 m_update_avatars = 5;
636 m_update_entities = 5;
637 m_statsReporter.SetUpdateMS(6000);
638 }
639 }
640 else
641 {
642 if (m_update_entities == 5)
643 {
644 m_update_avatars = 1;
645 m_update_entities = 1;
646 m_statsReporter.SetUpdateMS(3000);
647 }
648 }
649
650
630 frameMS = System.Environment.TickCount; 651 frameMS = System.Environment.TickCount;
631 try 652 try
632 { 653 {
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
77 private bool m_newForce = false; 77 private bool m_newForce = false;
78 private bool m_newCoarseLocations = true; 78 private bool m_newCoarseLocations = true;
79 private bool m_gotAllObjectsInScene = false; 79 private bool m_gotAllObjectsInScene = false;
80
80 81
81 // Default AV Height 82 // Default AV Height
82 private float m_avHeight = 127.0f; 83 private float m_avHeight = 127.0f;
@@ -354,7 +355,7 @@ namespace OpenSim.Region.Environment.Scenes
354 RegisterToEvents(); 355 RegisterToEvents();
355 SetDirectionVectors(); 356 SetDirectionVectors();
356 357
357 m_scene.LandManager.sendLandUpdate(this); 358 m_scene.LandManager.sendLandUpdate(this, true);
358 } 359 }
359 360
360 public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, byte[] visualParams, 361 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
124 m_report.Enabled = true; 124 m_report.Enabled = true;
125 } 125 }
126 126
127 public void SetUpdateMS(int ms)
128 {
129 statsUpdatesEveryMS = ms;
130 statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000);
131 m_report.Interval = statsUpdatesEveryMS;
132 }
133
127 private void statsHeartBeat(object sender, EventArgs e) 134 private void statsHeartBeat(object sender, EventArgs e)
128 { 135 {
129 m_report.Enabled = false; 136 m_report.Enabled = false;