From 1b265b213b65076ee346d85f62d2d61a72ea3ca6 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 10 Jul 2013 16:09:45 -0700
Subject: Added show client-stats [first last] command to expose what viewers
are requesting.
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 18 ++++++++++++++-
.../Region/ClientStack/Linden/UDP/LLUDPClient.cs | 27 +++++++++++-----------
2 files changed, 30 insertions(+), 15 deletions(-)
(limited to 'OpenSim/Region/ClientStack/Linden')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index bd61c3f..3d92705 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -678,12 +678,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
//there is a local handler for this packet type
if (pprocessor.Async)
{
+ ClientInfo cinfo = UDPClient.GetClientInfo();
+ if (!cinfo.AsyncRequests.ContainsKey(packet.Type.ToString()))
+ cinfo.AsyncRequests[packet.Type.ToString()] = 0;
+ cinfo.AsyncRequests[packet.Type.ToString()]++;
+
object obj = new AsyncPacketProcess(this, pprocessor.method, packet);
Util.FireAndForget(ProcessSpecificPacketAsync, obj);
result = true;
}
else
{
+ ClientInfo cinfo = UDPClient.GetClientInfo();
+ if (!cinfo.SyncRequests.ContainsKey(packet.Type.ToString()))
+ cinfo.SyncRequests[packet.Type.ToString()] = 0;
+ cinfo.SyncRequests[packet.Type.ToString()]++;
+
result = pprocessor.method(this, packet);
}
}
@@ -698,6 +708,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
if (found)
{
+ ClientInfo cinfo = UDPClient.GetClientInfo();
+ if (!cinfo.GenericRequests.ContainsKey(packet.Type.ToString()))
+ cinfo.GenericRequests[packet.Type.ToString()] = 0;
+ cinfo.GenericRequests[packet.Type.ToString()]++;
+
result = method(this, packet);
}
}
@@ -12030,7 +12045,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
ClientInfo info = m_udpClient.GetClientInfo();
info.proxyEP = null;
- info.agentcircuit = RequestClientInfo();
+ if (info.agentcircuit == null)
+ info.agentcircuit = RequestClientInfo();
return info;
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
index 621e0fd..7749446 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
@@ -159,6 +159,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private int m_defaultRTO = 1000; // 1sec is the recommendation in the RFC
private int m_maxRTO = 60000;
+ private ClientInfo m_info = new ClientInfo();
+
///
/// Default constructor
///
@@ -240,20 +242,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// TODO: This data structure is wrong in so many ways. Locking and copying the entire lists
// of pending and needed ACKs for every client every time some method wants information about
// this connection is a recipe for poor performance
- ClientInfo info = new ClientInfo();
- info.pendingAcks = new Dictionary();
- info.needAck = new Dictionary();
-
- info.resendThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Resend].DripRate;
- info.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate;
- info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate;
- info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate;
- info.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate;
- info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate;
- info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate;
- info.totalThrottle = (int)m_throttleCategory.DripRate;
-
- return info;
+
+ m_info.resendThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Resend].DripRate;
+ m_info.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate;
+ m_info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate;
+ m_info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate;
+ m_info.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate;
+ m_info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate;
+ m_info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate;
+ m_info.totalThrottle = (int)m_throttleCategory.DripRate;
+
+ return m_info;
}
///
--
cgit v1.1