diff options
author | Teravus Ovares | 2008-05-13 06:05:45 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-05-13 06:05:45 +0000 |
commit | bfce23dcf4f902d6967bc483433eae3d2077c447 (patch) | |
tree | ed54edbb286ab44340bba304bfa20c3a69982460 /OpenSim | |
parent | * Fixed directory not found when saving Mesh previews (my bad, I was testing) (diff) | |
download | opensim-SC-bfce23dcf4f902d6967bc483433eae3d2077c447.zip opensim-SC-bfce23dcf4f902d6967bc483433eae3d2077c447.tar.gz opensim-SC-bfce23dcf4f902d6967bc483433eae3d2077c447.tar.bz2 opensim-SC-bfce23dcf4f902d6967bc483433eae3d2077c447.tar.xz |
* Implemented ChildAgentDataUpdate throttle multiplier based on an inaccurate count of neighbors.
* The neighbor count is always lower then the actual number of neighbors unless your region was up the longest.
* The region you're in is un-affected by this, though, you'll get less packet loss, maybe not get logged off immediately when you log in, and possibly see more prim if your internet connection is semi-unreliable.
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 39 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 19 |
3 files changed, 62 insertions, 3 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index e18c467..f0a0921 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -361,11 +361,12 @@ namespace OpenSim.Region.Environment.Scenes | |||
361 | // If the RegionInfo isn't exact but is for the same XY World location, | 361 | // If the RegionInfo isn't exact but is for the same XY World location, |
362 | // then the above loop will fix that. | 362 | // then the above loop will fix that. |
363 | 363 | ||
364 | if (!(m_neighbours.Contains(otherRegion))) | 364 | if (!(CheckNeighborRegion(otherRegion))) |
365 | { | 365 | { |
366 | lock (m_neighbours) | 366 | lock (m_neighbours) |
367 | { | 367 | { |
368 | m_neighbours.Add(otherRegion); | 368 | m_neighbours.Add(otherRegion); |
369 | //m_log.Info("[UP]: " + otherRegion.RegionHandle.ToString()); | ||
369 | } | 370 | } |
370 | } | 371 | } |
371 | // If these are cast to INT because long + negative values + abs returns invalid data | 372 | // If these are cast to INT because long + negative values + abs returns invalid data |
@@ -407,7 +408,36 @@ namespace OpenSim.Region.Environment.Scenes | |||
407 | } | 408 | } |
408 | 409 | ||
409 | // Given float seconds, this will restart the region. | 410 | // Given float seconds, this will restart the region. |
411 | public void AddNeighborRegion(RegionInfo region) | ||
412 | { | ||
413 | lock (m_neighbours) | ||
414 | { | ||
415 | if (!CheckNeighborRegion(region)) | ||
416 | { | ||
417 | m_neighbours.Add(region); | ||
418 | |||
419 | } | ||
420 | } | ||
421 | } | ||
410 | 422 | ||
423 | public bool CheckNeighborRegion(RegionInfo region) | ||
424 | { | ||
425 | bool found = false; | ||
426 | lock (m_neighbours) | ||
427 | { | ||
428 | foreach (RegionInfo reg in m_neighbours) | ||
429 | { | ||
430 | if (reg.RegionHandle == region.RegionHandle) | ||
431 | { | ||
432 | found = true; | ||
433 | break; | ||
434 | } | ||
435 | } | ||
436 | } | ||
437 | return found; | ||
438 | |||
439 | |||
440 | } | ||
411 | public virtual void Restart(float seconds) | 441 | public virtual void Restart(float seconds) |
412 | { | 442 | { |
413 | // notifications are done in 15 second increments | 443 | // notifications are done in 15 second increments |
@@ -556,7 +586,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
556 | } | 586 | } |
557 | 587 | ||
558 | } | 588 | } |
559 | 589 | public int GetInaccurateNeighborCount() | |
590 | { | ||
591 | lock (m_neighbours) | ||
592 | return m_neighbours.Count; | ||
593 | } | ||
560 | // This is the method that shuts down the scene. | 594 | // This is the method that shuts down the scene. |
561 | public override void Close() | 595 | public override void Close() |
562 | { | 596 | { |
@@ -647,6 +681,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
647 | // Aquire a lock so only one update call happens at once | 681 | // Aquire a lock so only one update call happens at once |
648 | updateLock.WaitOne(); | 682 | updateLock.WaitOne(); |
649 | float physicsFPS = 0; | 683 | float physicsFPS = 0; |
684 | //m_log.Info("sadfadf" + m_neighbours.Count.ToString()); | ||
650 | int agentsInScene = m_innerScene.GetRootAgentCount() + m_innerScene.GetChildAgentCount(); | 685 | int agentsInScene = m_innerScene.GetRootAgentCount() + m_innerScene.GetChildAgentCount(); |
651 | 686 | ||
652 | if (agentsInScene > 21) | 687 | if (agentsInScene > 21) |
diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index 5ef4a7d..c9274dd 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs | |||
@@ -361,6 +361,13 @@ namespace OpenSim.Region.Environment.Scenes | |||
361 | if (regionAccepted) | 361 | if (regionAccepted) |
362 | { | 362 | { |
363 | m_log.Info("[INTERGRID]: Completed informing neighbors that I'm here"); | 363 | m_log.Info("[INTERGRID]: Completed informing neighbors that I'm here"); |
364 | handlerRegionUp = OnRegionUp; | ||
365 | |||
366 | // yes, we're notifying ourselves. | ||
367 | if (handlerRegionUp != null) | ||
368 | handlerRegionUp(region); | ||
369 | |||
370 | |||
364 | } | 371 | } |
365 | else | 372 | else |
366 | { | 373 | { |
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 5b10bfc..3189b10 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -1568,7 +1568,24 @@ namespace OpenSim.Region.Environment.Scenes | |||
1568 | cadu.GroupAccess = 0; | 1568 | cadu.GroupAccess = 0; |
1569 | cadu.Position = new sLLVector3(AbsolutePosition); | 1569 | cadu.Position = new sLLVector3(AbsolutePosition); |
1570 | cadu.regionHandle = m_scene.RegionInfo.RegionHandle; | 1570 | cadu.regionHandle = m_scene.RegionInfo.RegionHandle; |
1571 | cadu.throttles = ControllingClient.GetThrottlesPacked(1f); | 1571 | float multiplier = 1; |
1572 | int innacurateNeighbors = m_scene.GetInaccurateNeighborCount(); | ||
1573 | if (innacurateNeighbors != 0) | ||
1574 | { | ||
1575 | multiplier = 1f / (float)innacurateNeighbors; | ||
1576 | } | ||
1577 | if (multiplier <= 0f) | ||
1578 | { | ||
1579 | multiplier = 0.25f; | ||
1580 | } | ||
1581 | |||
1582 | //m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString()); | ||
1583 | cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier); | ||
1584 | |||
1585 | |||
1586 | |||
1587 | |||
1588 | |||
1572 | cadu.Velocity = new sLLVector3(Velocity); | 1589 | cadu.Velocity = new sLLVector3(Velocity); |
1573 | m_scene.SendOutChildAgentUpdates(cadu,this); | 1590 | m_scene.SendOutChildAgentUpdates(cadu,this); |
1574 | m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; | 1591 | m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; |