diff options
author | John Hurliman | 2010-03-05 17:04:20 -0800 |
---|---|---|
committer | John Hurliman | 2010-03-05 17:04:20 -0800 |
commit | 36afd0bfd1f80131a9f8dd72cc8b3eb71f060e02 (patch) | |
tree | bf1bda703f95b89e3c7d57452262da6269ea2c19 /OpenSim/Region | |
parent | * Fixed an order of operations bug in CheckForSignificantMovement() that was ... (diff) | |
download | opensim-SC-36afd0bfd1f80131a9f8dd72cc8b3eb71f060e02.zip opensim-SC-36afd0bfd1f80131a9f8dd72cc8b3eb71f060e02.tar.gz opensim-SC-36afd0bfd1f80131a9f8dd72cc8b3eb71f060e02.tar.bz2 opensim-SC-36afd0bfd1f80131a9f8dd72cc8b3eb71f060e02.tar.xz |
* Cache packed throttle data to avoid repeated allocations in CheckForSignificantMovement()
* Removed a lock on "return m_neighbours.Count" in GetInaccurateNeighborCount(). Dictionary<>.Count by itself does not benefit from locking
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs | 35 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 5 |
2 files changed, 25 insertions, 15 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs index 55d9c9c..6232c48 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs | |||
@@ -144,6 +144,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
144 | /// <summary>A reference to the LLUDPServer that is managing this client</summary> | 144 | /// <summary>A reference to the LLUDPServer that is managing this client</summary> |
145 | private readonly LLUDPServer m_udpServer; | 145 | private readonly LLUDPServer m_udpServer; |
146 | 146 | ||
147 | /// <summary>Caches packed throttle information</summary> | ||
148 | private byte[] m_packedThrottles; | ||
149 | |||
147 | private int m_defaultRTO = 3000; | 150 | private int m_defaultRTO = 3000; |
148 | private int m_maxRTO = 60000; | 151 | private int m_maxRTO = 60000; |
149 | 152 | ||
@@ -350,21 +353,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
350 | bucket = m_throttleCategories[(int)ThrottleOutPacketType.Texture]; | 353 | bucket = m_throttleCategories[(int)ThrottleOutPacketType.Texture]; |
351 | bucket.DripRate = texture; | 354 | bucket.DripRate = texture; |
352 | bucket.MaxBurst = texture; | 355 | bucket.MaxBurst = texture; |
356 | |||
357 | // Reset the packed throttles cached data | ||
358 | m_packedThrottles = null; | ||
353 | } | 359 | } |
354 | 360 | ||
355 | public byte[] GetThrottlesPacked() | 361 | public byte[] GetThrottlesPacked() |
356 | { | 362 | { |
357 | byte[] data = new byte[7 * 4]; | 363 | byte[] data = m_packedThrottles; |
358 | int i = 0; | 364 | |
359 | 365 | if (data == null) | |
360 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Resend].DripRate), 0, data, i, 4); i += 4; | 366 | { |
361 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate), 0, data, i, 4); i += 4; | 367 | data = new byte[7 * 4]; |
362 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate), 0, data, i, 4); i += 4; | 368 | int i = 0; |
363 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate), 0, data, i, 4); i += 4; | 369 | |
364 | Buffer.BlockCopy(Utils.FloatToBytes((float)(m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate) + | 370 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Resend].DripRate), 0, data, i, 4); i += 4; |
365 | m_throttleCategories[(int)ThrottleOutPacketType.State].DripRate), 0, data, i, 4); i += 4; | 371 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate), 0, data, i, 4); i += 4; |
366 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate), 0, data, i, 4); i += 4; | 372 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate), 0, data, i, 4); i += 4; |
367 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate), 0, data, i, 4); i += 4; | 373 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate), 0, data, i, 4); i += 4; |
374 | Buffer.BlockCopy(Utils.FloatToBytes((float)(m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate) + | ||
375 | m_throttleCategories[(int)ThrottleOutPacketType.State].DripRate), 0, data, i, 4); i += 4; | ||
376 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate), 0, data, i, 4); i += 4; | ||
377 | Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate), 0, data, i, 4); i += 4; | ||
378 | |||
379 | m_packedThrottles = data; | ||
380 | } | ||
368 | 381 | ||
369 | return data; | 382 | return data; |
370 | } | 383 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index a880fe7..8f9663c 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1132,10 +1132,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1132 | 1132 | ||
1133 | public int GetInaccurateNeighborCount() | 1133 | public int GetInaccurateNeighborCount() |
1134 | { | 1134 | { |
1135 | lock (m_neighbours) | 1135 | return m_neighbours.Count; |
1136 | { | ||
1137 | return m_neighbours.Count; | ||
1138 | } | ||
1139 | } | 1136 | } |
1140 | 1137 | ||
1141 | // This is the method that shuts down the scene. | 1138 | // This is the method that shuts down the scene. |