From 4e04f6b3a5a875c7d8820c679bcbcdcfba1227bf Mon Sep 17 00:00:00 2001
From: John Hurliman
Date: Wed, 21 Oct 2009 17:02:55 -0700
Subject: * Clarified what FireQueueEmpty is doing with a MIN_CALLBACK_MS
constant and upped it to 30ms * Removed the unused PacketSent() function *
Switched UnackedPacketCollection from a SortedDictionary to a Dictionary now
that the sorting is no longer needed. Big performance improvement for
ResendUnacked()
---
OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs | 11 +++++++----
OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 4 ----
OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs | 9 ---------
.../Region/ClientStack/LindenUDP/UnackedPacketCollection.cs | 2 +-
4 files changed, 8 insertions(+), 18 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
index 71f4c47..2d86a40 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
@@ -531,11 +531,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// as an object to match the WaitCallback delegate signature
private void FireQueueEmpty(object o)
{
+ const int MIN_CALLBACK_MS = 30;
+
int i = (int)o;
ThrottleOutPacketType type = (ThrottleOutPacketType)i;
QueueEmpty callback = OnQueueEmpty;
- int start = Environment.TickCount;
+ int start = Environment.TickCount & Int32.MaxValue;
if (callback != null)
{
@@ -543,10 +545,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
catch (Exception e) { m_log.Error("[LLUDPCLIENT]: OnQueueEmpty(" + type + ") threw an exception: " + e.Message, e); }
}
- // Make sure all queue empty calls take at least a measurable amount of time,
+ // Make sure all queue empty calls take at least some amount of time,
// otherwise we'll peg a CPU trying to fire these too fast
- if (Environment.TickCount == start)
- System.Threading.Thread.Sleep((int)m_udpServer.TickCountResolution);
+ int elapsedMS = (Environment.TickCount & Int32.MaxValue) - start;
+ if (elapsedMS < MIN_CALLBACK_MS)
+ System.Threading.Thread.Sleep(MIN_CALLBACK_MS - elapsedMS);
m_onQueueEmptyRunning[i] = false;
}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 4bdf132..40d3771 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -674,10 +674,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
packetInbox.Enqueue(new IncomingPacket(udpClient, packet));
}
- protected override void PacketSent(UDPPacketBuffer buffer, int bytesSent)
- {
- }
-
private void SendAckImmediate(IPEndPoint remoteEndpoint, uint sequenceNumber)
{
PacketAckPacket ack = new PacketAckPacket();
diff --git a/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs b/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs
index d16837d..552cc4a 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs
@@ -45,13 +45,6 @@ namespace OpenMetaverse
///
/// Incoming packet buffer
protected abstract void PacketReceived(UDPPacketBuffer buffer);
-
- ///
- /// This method is called when an outgoing packet is sent
- ///
- /// Outgoing packet buffer
- /// Number of bytes written to the wire
- protected abstract void PacketSent(UDPPacketBuffer buffer, int bytesSent);
/// UDP port to bind to in server mode
protected int m_udpPort;
@@ -279,8 +272,6 @@ namespace OpenMetaverse
{
UDPPacketBuffer buf = (UDPPacketBuffer)result.AsyncState;
int bytesSent = m_udpSocket.EndSendTo(result);
-
- PacketSent(buf, bytesSent);
}
catch (SocketException) { }
catch (ObjectDisposedException) { }
diff --git a/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs b/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs
index 016712f..3e2e81c 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs
@@ -60,7 +60,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
/// Holds the actual unacked packet data, sorted by sequence number
- private SortedDictionary m_packets = new SortedDictionary();
+ private Dictionary m_packets = new Dictionary();
/// Holds packets that need to be added to the unacknowledged list
private LocklessQueue m_pendingAdds = new LocklessQueue();
/// Holds information about pending acknowledgements
--
cgit v1.1