Fixed the transmission of throttles from root agent to child
agents. Child throttles are based on the number of child agents known to the root and at least 1/4 of the throttle given to the root.bulletsim
parent
2fefb7adee
commit
77ab7ce084
|
@ -11420,7 +11420,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public byte[] GetThrottlesPacked(float multiplier)
|
public byte[] GetThrottlesPacked(float multiplier)
|
||||||
{
|
{
|
||||||
return m_udpClient.GetThrottlesPacked();
|
return m_udpClient.GetThrottlesPacked(multiplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -329,8 +329,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
int asset = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
int asset = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
||||||
// State is a subcategory of task that we allocate a percentage to
|
// State is a subcategory of task that we allocate a percentage to
|
||||||
int state = 0;
|
int state = 0;
|
||||||
// int state = (int)((float)task * STATE_TASK_PERCENTAGE);
|
|
||||||
// task -= state;
|
|
||||||
|
|
||||||
// Make sure none of the throttles are set below our packet MTU,
|
// Make sure none of the throttles are set below our packet MTU,
|
||||||
// otherwise a throttle could become permanently clogged
|
// otherwise a throttle could become permanently clogged
|
||||||
|
@ -342,17 +340,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
texture = Math.Max(texture, LLUDPServer.MTU);
|
texture = Math.Max(texture, LLUDPServer.MTU);
|
||||||
asset = Math.Max(asset, LLUDPServer.MTU);
|
asset = Math.Max(asset, LLUDPServer.MTU);
|
||||||
|
|
||||||
int total = resend + land + wind + cloud + task + texture + asset;
|
//int total = resend + land + wind + cloud + task + texture + asset;
|
||||||
|
|
||||||
//m_log.DebugFormat("[LLUDPCLIENT]: {0} is setting throttles. Resend={1}, Land={2}, Wind={3}, Cloud={4}, Task={5}, Texture={6}, Asset={7}, Total={8}",
|
//m_log.DebugFormat("[LLUDPCLIENT]: {0} is setting throttles. Resend={1}, Land={2}, Wind={3}, Cloud={4}, Task={5}, Texture={6}, Asset={7}, Total={8}",
|
||||||
// AgentID, resend, land, wind, cloud, task, texture, asset, total);
|
// AgentID, resend, land, wind, cloud, task, texture, asset, total);
|
||||||
|
|
||||||
// Update the token buckets with new throttle values
|
// Update the token buckets with new throttle values
|
||||||
TokenBucket bucket;
|
TokenBucket bucket;
|
||||||
|
|
||||||
bucket = m_throttleCategory;
|
|
||||||
bucket.RequestedDripRate = total;
|
|
||||||
|
|
||||||
bucket = m_throttleCategories[(int)ThrottleOutPacketType.Resend];
|
bucket = m_throttleCategories[(int)ThrottleOutPacketType.Resend];
|
||||||
bucket.RequestedDripRate = resend;
|
bucket.RequestedDripRate = resend;
|
||||||
|
|
||||||
|
@ -381,22 +375,38 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
m_packedThrottles = null;
|
m_packedThrottles = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] GetThrottlesPacked()
|
public byte[] GetThrottlesPacked(float multiplier)
|
||||||
{
|
{
|
||||||
byte[] data = m_packedThrottles;
|
byte[] data = m_packedThrottles;
|
||||||
|
|
||||||
if (data == null)
|
if (data == null)
|
||||||
{
|
{
|
||||||
|
float rate;
|
||||||
|
|
||||||
data = new byte[7 * 4];
|
data = new byte[7 * 4];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Resend].RequestedDripRate), 0, data, i, 4); i += 4;
|
// multiply by 8 to convert bytes back to bits
|
||||||
Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Land].RequestedDripRate), 0, data, i, 4); i += 4;
|
rate = (float)m_throttleCategories[(int)ThrottleOutPacketType.Resend].RequestedDripRate * 8 * multiplier;
|
||||||
Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Wind].RequestedDripRate), 0, data, i, 4); i += 4;
|
Buffer.BlockCopy(Utils.FloatToBytes(rate), 0, data, i, 4); i += 4;
|
||||||
Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].RequestedDripRate), 0, data, i, 4); i += 4;
|
|
||||||
Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Task].RequestedDripRate), 0, data, i, 4); i += 4;
|
rate = (float)m_throttleCategories[(int)ThrottleOutPacketType.Land].RequestedDripRate * 8 * multiplier;
|
||||||
Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Texture].RequestedDripRate), 0, data, i, 4); i += 4;
|
Buffer.BlockCopy(Utils.FloatToBytes(rate), 0, data, i, 4); i += 4;
|
||||||
Buffer.BlockCopy(Utils.FloatToBytes((float)m_throttleCategories[(int)ThrottleOutPacketType.Asset].RequestedDripRate), 0, data, i, 4); i += 4;
|
|
||||||
|
rate = (float)m_throttleCategories[(int)ThrottleOutPacketType.Wind].RequestedDripRate * 8 * multiplier;
|
||||||
|
Buffer.BlockCopy(Utils.FloatToBytes(rate), 0, data, i, 4); i += 4;
|
||||||
|
|
||||||
|
rate = (float)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].RequestedDripRate * 8 * multiplier;
|
||||||
|
Buffer.BlockCopy(Utils.FloatToBytes(rate), 0, data, i, 4); i += 4;
|
||||||
|
|
||||||
|
rate = (float)m_throttleCategories[(int)ThrottleOutPacketType.Task].RequestedDripRate * 8 * multiplier;
|
||||||
|
Buffer.BlockCopy(Utils.FloatToBytes(rate), 0, data, i, 4); i += 4;
|
||||||
|
|
||||||
|
rate = (float)m_throttleCategories[(int)ThrottleOutPacketType.Texture].RequestedDripRate * 8 * multiplier;
|
||||||
|
Buffer.BlockCopy(Utils.FloatToBytes(rate), 0, data, i, 4); i += 4;
|
||||||
|
|
||||||
|
rate = (float)m_throttleCategories[(int)ThrottleOutPacketType.Asset].RequestedDripRate * 8 * multiplier;
|
||||||
|
Buffer.BlockCopy(Utils.FloatToBytes(rate), 0, data, i, 4); i += 4;
|
||||||
|
|
||||||
m_packedThrottles = data;
|
m_packedThrottles = data;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2632,18 +2632,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
cadu.GroupAccess = 0;
|
cadu.GroupAccess = 0;
|
||||||
cadu.Position = AbsolutePosition;
|
cadu.Position = AbsolutePosition;
|
||||||
cadu.regionHandle = m_rootRegionHandle;
|
cadu.regionHandle = m_rootRegionHandle;
|
||||||
float multiplier = 1;
|
|
||||||
int innacurateNeighbors = m_scene.GetInaccurateNeighborCount();
|
|
||||||
if (innacurateNeighbors != 0)
|
|
||||||
{
|
|
||||||
multiplier = 1f / (float)innacurateNeighbors;
|
|
||||||
}
|
|
||||||
if (multiplier <= 0f)
|
|
||||||
{
|
|
||||||
multiplier = 0.25f;
|
|
||||||
}
|
|
||||||
|
|
||||||
//m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString());
|
// Throttles
|
||||||
|
float multiplier = 1;
|
||||||
|
int childRegions = m_knownChildRegions.Count;
|
||||||
|
if (childRegions != 0)
|
||||||
|
multiplier = 1f / childRegions;
|
||||||
|
|
||||||
|
// Minimum throttle for a child region is 1/4 of the root region throttle
|
||||||
|
if (multiplier <= 0.25f)
|
||||||
|
multiplier = 0.25f;
|
||||||
|
|
||||||
cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier);
|
cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier);
|
||||||
cadu.Velocity = Velocity;
|
cadu.Velocity = Velocity;
|
||||||
|
|
||||||
|
@ -3039,16 +3038,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// Throttles
|
// Throttles
|
||||||
float multiplier = 1;
|
float multiplier = 1;
|
||||||
int innacurateNeighbors = m_scene.GetInaccurateNeighborCount();
|
int childRegions = m_knownChildRegions.Count;
|
||||||
if (innacurateNeighbors != 0)
|
if (childRegions != 0)
|
||||||
{
|
multiplier = 1f / childRegions;
|
||||||
multiplier = 1f / innacurateNeighbors;
|
|
||||||
}
|
// Minimum throttle for a child region is 1/4 of the root region throttle
|
||||||
if (multiplier <= 0f)
|
if (multiplier <= 0.25f)
|
||||||
{
|
|
||||||
multiplier = 0.25f;
|
multiplier = 0.25f;
|
||||||
}
|
|
||||||
//m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString());
|
|
||||||
cAgent.Throttles = ControllingClient.GetThrottlesPacked(multiplier);
|
cAgent.Throttles = ControllingClient.GetThrottlesPacked(multiplier);
|
||||||
|
|
||||||
cAgent.HeadRotation = m_headrotation;
|
cAgent.HeadRotation = m_headrotation;
|
||||||
|
|
Loading…
Reference in New Issue