From b263587e2104f304f084c72fcb0cc1d155dacc1e Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Sun, 13 Jan 2013 15:25:51 +0000
Subject: try to patch getmesh Throttle (test)
---
OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs
index 908f628..6ec1115 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs
@@ -501,7 +501,8 @@ namespace OpenSim.Region.ClientStack.Linden
ScenePresence p;
if (m_scene.TryGetScenePresence(User, out p)) // If we don't get a user they're not here anymore.
{
- AlterThrottle(UserSetThrottle, p);
+// AlterThrottle(UserSetThrottle, p);
+ UpdateThrottle(UserSetThrottle, p);
}
}
}
@@ -546,7 +547,12 @@ namespace OpenSim.Region.ClientStack.Linden
// Client set throttle !
UserSetThrottle = pimagethrottle;
CapSetThrottle = (int)(pimagethrottle*CapThrottleDistributon);
- UDPSetThrottle = (int) (pimagethrottle*(100 - CapThrottleDistributon));
+// UDPSetThrottle = (int) (pimagethrottle*(100 - CapThrottleDistributon));
+
+ float udp = 1.0f - CapThrottleDistributon;
+ if(udp < 0.5f)
+ udp = 0.5f;
+ UDPSetThrottle = (int) ((float)pimagethrottle * udp);
if (CapSetThrottle < 4068)
CapSetThrottle = 4068; // at least two discovery mesh
p.ControllingClient.SetAgentThrottleSilent((int) Throttle, UDPSetThrottle);
--
cgit v1.1
From 85aa1804dfc9edbf41f16c312d06746eecd59bc9 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 16 Jan 2013 16:45:18 +0000
Subject: Complete removal of the now unused state queue
---
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 2 +-
OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs | 15 ++-------------
2 files changed, 3 insertions(+), 14 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 0a865ab..3ae9daf 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -1607,7 +1607,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (localIDs.Count == 1 && m_scene.GetScenePresence(localIDs[0]) != null)
{
- OutPacket(kill, ThrottleOutPacketType.State);
+ OutPacket(kill, ThrottleOutPacketType.Task);
}
else
{
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
index f675377..f1a1812 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
@@ -279,7 +279,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public string GetStats()
{
return string.Format(
- "{0,7} {1,7} {2,7} {3,9} {4,7} {5,7} {6,7} {7,7} {8,7} {9,8} {10,7} {11,7} {12,7}",
+ "{0,7} {1,7} {2,7} {3,9} {4,7} {5,7} {6,7} {7,7} {8,7} {9,8} {10,7} {11,7}",
Util.EnvironmentTickCountSubtract(TickLastPacketReceived),
PacketsReceived,
PacketsSent,
@@ -291,8 +291,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
m_packetOutboxes[(int)ThrottleOutPacketType.Cloud].Count,
m_packetOutboxes[(int)ThrottleOutPacketType.Task].Count,
m_packetOutboxes[(int)ThrottleOutPacketType.Texture].Count,
- m_packetOutboxes[(int)ThrottleOutPacketType.Asset].Count,
- m_packetOutboxes[(int)ThrottleOutPacketType.State].Count);
+ m_packetOutboxes[(int)ThrottleOutPacketType.Asset].Count);
}
public void SendPacketStats()
@@ -338,8 +337,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
int task = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
int texture = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4;
int asset = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
- // State is a subcategory of task that we allocate a percentage to
- int state = 0;
// Make sure none of the throttles are set below our packet MTU,
// otherwise a throttle could become permanently clogged
@@ -376,9 +373,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
bucket = m_throttleCategories[(int)ThrottleOutPacketType.Task];
bucket.RequestedDripRate = task;
- bucket = m_throttleCategories[(int)ThrottleOutPacketType.State];
- bucket.RequestedDripRate = state;
-
bucket = m_throttleCategories[(int)ThrottleOutPacketType.Texture];
bucket.RequestedDripRate = texture;
@@ -709,9 +703,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
Texture = 5,
/// Non-texture assets
Asset = 6,
- /// Avatar and primitive data
- /// This is a sub-category of Task
- State = 7,
*/
switch (category)
@@ -728,8 +719,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return ThrottleOutPacketTypeFlags.Texture;
case ThrottleOutPacketType.Asset:
return ThrottleOutPacketTypeFlags.Asset;
- case ThrottleOutPacketType.State:
- return ThrottleOutPacketTypeFlags.State;
default:
return 0;
}
--
cgit v1.1
From 91138014e21e19a3c02ee1640caab7f748472038 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 16 Jan 2013 17:12:56 +0000
Subject: Change all uses of the removed state queue to the task queue for now.
---
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 3ae9daf..956c2c9 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -2788,7 +2788,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
Transfer.TransferInfo.Size = req.AssetInf.Data.Length;
Transfer.TransferInfo.TransferID = req.TransferRequestID;
Transfer.Header.Zerocoded = true;
- OutPacket(Transfer, isWearable ? ThrottleOutPacketType.State : ThrottleOutPacketType.Asset);
+ OutPacket(Transfer, isWearable ? ThrottleOutPacketType.Task : ThrottleOutPacketType.Asset);
if (req.NumPackets == 1)
{
@@ -2799,7 +2799,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
TransferPacket.TransferData.Data = req.AssetInf.Data;
TransferPacket.TransferData.Status = 1;
TransferPacket.Header.Zerocoded = true;
- OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.State : ThrottleOutPacketType.Asset);
+ OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task : ThrottleOutPacketType.Asset);
}
else
{
@@ -2832,7 +2832,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
TransferPacket.TransferData.Status = 1;
}
TransferPacket.Header.Zerocoded = true;
- OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.State : ThrottleOutPacketType.Asset);
+ OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task : ThrottleOutPacketType.Asset);
processedLength += chunkSize;
packetNumber++;
@@ -3605,7 +3605,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
- OutPacket(aw, ThrottleOutPacketType.State);
+ OutPacket(aw, ThrottleOutPacketType.Task);
}
public void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry)
@@ -3630,7 +3630,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
avp.Sender.IsTrial = false;
avp.Sender.ID = agentID;
m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
- OutPacket(avp, ThrottleOutPacketType.State);
+ OutPacket(avp, ThrottleOutPacketType.Task);
}
public void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
--
cgit v1.1
From 582cb89beb597247ceb6d82cdfc8fc983ffe8496 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 16 Jan 2013 19:29:27 +0100
Subject: Add a way to put things at the front of the queue for any throttle
group. Adds a DoubleLocklessQueue and uses it for the outgoing buckets. Added
a flag value to the Throttle Type (again) because although it's hacky, it's
the best of a bad bunch to get the message through the UDP stack to where
it's needed.
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 8 ++--
.../Region/ClientStack/Linden/UDP/LLUDPClient.cs | 54 ++++++++++++++++++----
.../Region/ClientStack/Linden/UDP/LLUDPServer.cs | 10 +++-
3 files changed, 57 insertions(+), 15 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 956c2c9..9550b5a 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -2788,7 +2788,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
Transfer.TransferInfo.Size = req.AssetInf.Data.Length;
Transfer.TransferInfo.TransferID = req.TransferRequestID;
Transfer.Header.Zerocoded = true;
- OutPacket(Transfer, isWearable ? ThrottleOutPacketType.Task : ThrottleOutPacketType.Asset);
+ OutPacket(Transfer, isWearable ? ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority : ThrottleOutPacketType.Asset);
if (req.NumPackets == 1)
{
@@ -2799,7 +2799,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
TransferPacket.TransferData.Data = req.AssetInf.Data;
TransferPacket.TransferData.Status = 1;
TransferPacket.Header.Zerocoded = true;
- OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task : ThrottleOutPacketType.Asset);
+ OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority : ThrottleOutPacketType.Asset);
}
else
{
@@ -2832,7 +2832,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
TransferPacket.TransferData.Status = 1;
}
TransferPacket.Header.Zerocoded = true;
- OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task : ThrottleOutPacketType.Asset);
+ OutPacket(TransferPacket, isWearable ? ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority : ThrottleOutPacketType.Asset);
processedLength += chunkSize;
packetNumber++;
@@ -3605,7 +3605,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
- OutPacket(aw, ThrottleOutPacketType.Task);
+ OutPacket(aw, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
}
public void SendAppearance(UUID agentID, byte[] visualParams, byte[] textureEntry)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
index f1a1812..e52ac37 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
@@ -92,7 +92,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// Packets we have sent that need to be ACKed by the client
public readonly UnackedPacketCollection NeedAcks = new UnackedPacketCollection();
/// ACKs that are queued up, waiting to be sent to the client
- public readonly OpenSim.Framework.LocklessQueue PendingAcks = new OpenSim.Framework.LocklessQueue();
+ public readonly DoubleLocklessQueue PendingAcks = new DoubleLocklessQueue();
/// Current packet sequence number
public int CurrentSequence;
@@ -146,7 +146,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// Throttle buckets for each packet category
private readonly TokenBucket[] m_throttleCategories;
/// Outgoing queues for throttled packets
- private readonly OpenSim.Framework.LocklessQueue[] m_packetOutboxes = new OpenSim.Framework.LocklessQueue[THROTTLE_CATEGORY_COUNT];
+ private readonly DoubleLocklessQueue[] m_packetOutboxes = new DoubleLocklessQueue[THROTTLE_CATEGORY_COUNT];
/// A container that can hold one packet for each outbox, used to store
/// dequeued packets that are being held for throttling
private readonly OutgoingPacket[] m_nextPackets = new OutgoingPacket[THROTTLE_CATEGORY_COUNT];
@@ -202,7 +202,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
ThrottleOutPacketType type = (ThrottleOutPacketType)i;
// Initialize the packet outboxes, where packets sit while they are waiting for tokens
- m_packetOutboxes[i] = new OpenSim.Framework.LocklessQueue();
+ m_packetOutboxes[i] = new DoubleLocklessQueue();
// Initialize the token buckets that control the throttling for each category
m_throttleCategories[i] = new TokenBucket(m_throttleCategory, rates.GetRate(type));
}
@@ -430,15 +430,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
///
public bool EnqueueOutgoing(OutgoingPacket packet, bool forceQueue)
{
+ return EnqueueOutgoing(packet, forceQueue, false);
+ }
+
+ public bool EnqueueOutgoing(OutgoingPacket packet, bool forceQueue, bool highPriority)
+ {
int category = (int)packet.Category;
if (category >= 0 && category < m_packetOutboxes.Length)
{
- OpenSim.Framework.LocklessQueue queue = m_packetOutboxes[category];
+ DoubleLocklessQueue queue = m_packetOutboxes[category];
if (m_deliverPackets == false)
{
- queue.Enqueue(packet);
+ queue.Enqueue(packet, highPriority);
return true;
}
@@ -449,7 +454,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// queued packets
if (queue.Count > 0)
{
- queue.Enqueue(packet);
+ queue.Enqueue(packet, highPriority);
return true;
}
@@ -462,7 +467,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
else
{
// Force queue specified or not enough tokens in the bucket, queue this packet
- queue.Enqueue(packet);
+ queue.Enqueue(packet, highPriority);
return true;
}
}
@@ -494,7 +499,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (m_deliverPackets == false) return false;
OutgoingPacket packet = null;
- OpenSim.Framework.LocklessQueue queue;
+ DoubleLocklessQueue queue;
TokenBucket bucket;
bool packetSent = false;
ThrottleOutPacketTypeFlags emptyCategories = 0;
@@ -534,7 +539,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
catch
{
- m_packetOutboxes[i] = new OpenSim.Framework.LocklessQueue();
+ m_packetOutboxes[i] = new DoubleLocklessQueue();
}
if (success)
{
@@ -567,7 +572,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
else
{
- m_packetOutboxes[i] = new OpenSim.Framework.LocklessQueue();
+ m_packetOutboxes[i] = new DoubleLocklessQueue();
emptyCategories |= CategoryToFlag(i);
}
}
@@ -724,4 +729,33 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
}
+
+ public class DoubleLocklessQueue : OpenSim.Framework.LocklessQueue
+ {
+ OpenSim.Framework.LocklessQueue highQueue = new OpenSim.Framework.LocklessQueue();
+
+ public override int Count
+ {
+ get
+ {
+ return base.Count + highQueue.Count;
+ }
+ }
+
+ public override bool Dequeue(out T item)
+ {
+ if (highQueue.Dequeue(out item))
+ return true;
+
+ return base.Dequeue(out item);
+ }
+
+ public void Enqueue(T item, bool highPriority)
+ {
+ if (highPriority)
+ highQueue.Enqueue(item);
+ else
+ Enqueue(item);
+ }
+ }
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 9a4abd4..6c72edc 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -803,6 +803,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
#region Queue or Send
+ bool highPriority = false;
+
+ if (category != ThrottleOutPacketType.Unknown && (category & ThrottleOutPacketType.HighPriority) != 0)
+ {
+ category = (ThrottleOutPacketType)((int)category & 127);
+ highPriority = true;
+ }
+
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
// If we were not provided a method for handling unacked, use the UDPServer default method
outgoingPacket.UnackedMethod = ((method == null) ? delegate(OutgoingPacket oPacket) { ResendUnacked(oPacket); } : method);
@@ -811,7 +819,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// continue to display the deleted object until relog. Therefore, we need to always queue a kill object
// packet so that it isn't sent before a queued update packet.
bool requestQueue = type == PacketType.KillObject;
- if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue))
+ if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority))
SendPacketFinal(outgoingPacket);
#endregion Queue or Send
--
cgit v1.1
From 7bd9a0edb75ede38e71ca0f436bf89835b13d9ad Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sat, 19 Jan 2013 14:30:38 +0100
Subject: Remove group IM test code also mentioning "OpenSimulator Testing"
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 27 +---------------------
1 file changed, 1 insertion(+), 26 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 9550b5a..fd82db7 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -897,32 +897,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
msg.MessageBlock.Message = Util.StringToBytes1024(im.message);
msg.MessageBlock.BinaryBucket = im.binaryBucket;
- if (im.message.StartsWith("[grouptest]"))
- { // this block is test code for implementing group IM - delete when group IM is finished
- IEventQueue eq = Scene.RequestModuleInterface();
- if (eq != null)
- {
- im.dialog = 17;
-
- //eq.ChatterboxInvitation(
- // new UUID("00000000-68f9-1111-024e-222222111123"),
- // "OpenSimulator Testing", im.fromAgentID, im.message, im.toAgentID, im.fromAgentName, im.dialog, 0,
- // false, 0, new Vector3(), 1, im.imSessionID, im.fromGroup, im.binaryBucket);
-
- eq.ChatterboxInvitation(
- new UUID("00000000-68f9-1111-024e-222222111123"),
- "OpenSimulator Testing", new UUID(im.fromAgentID), im.message, new UUID(im.toAgentID), im.fromAgentName, im.dialog, 0,
- false, 0, new Vector3(), 1, new UUID(im.imSessionID), im.fromGroup, Util.StringToBytes256("OpenSimulator Testing"));
-
- eq.ChatterBoxSessionAgentListUpdates(
- new UUID("00000000-68f9-1111-024e-222222111123"),
- new UUID(im.fromAgentID), new UUID(im.toAgentID), false, false, false);
- }
-
- Console.WriteLine("SendInstantMessage: " + msg);
- }
- else
- OutPacket(msg, ThrottleOutPacketType.Task);
+ OutPacket(msg, ThrottleOutPacketType.Task);
}
}
--
cgit v1.1