delay terrain sending if land queue is 2 busy

avinationmerge
UbitUmarov 2015-08-22 04:08:30 +01:00
parent 17082da0da
commit e3d82ad706
7 changed files with 48 additions and 2 deletions

View File

@ -1143,6 +1143,8 @@ namespace OpenSim.Framework
void SendGenericMessage(string method, UUID invoice, List<string> message); void SendGenericMessage(string method, UUID invoice, List<string> message);
void SendGenericMessage(string method, UUID invoice, List<byte[]> message); void SendGenericMessage(string method, UUID invoice, List<byte[]> message);
bool CanSendLayerData();
void SendLayerData(float[] map); void SendLayerData(float[] map);
void SendLayerData(int px, int py, float[] map); void SendLayerData(int px, int py, float[] map);

View File

@ -1199,6 +1199,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(GATRP, ThrottleOutPacketType.Task); OutPacket(GATRP, ThrottleOutPacketType.Task);
} }
public virtual bool CanSendLayerData()
{
int n = m_udpClient.GetCatBytesInSendQueue(ThrottleOutPacketType.Land);
if ( n > 100000)
return false;
return true;
}
/// <summary> /// <summary>
/// Send the region heightmap to the client /// Send the region heightmap to the client
/// This method is only called when not doing intellegent terrain patch sending and /// This method is only called when not doing intellegent terrain patch sending and
@ -9151,7 +9160,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if ((locX >= m_scene.RegionInfo.WorldLocX) if ((locX >= m_scene.RegionInfo.WorldLocX)
&& (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX)) && (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX))
&& (locY >= m_scene.RegionInfo.WorldLocY) && (locY >= m_scene.RegionInfo.WorldLocY)
&& (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY)) ) && (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY)))
{ {
tpLocReq.Info.RegionHandle = m_scene.RegionInfo.RegionHandle; tpLocReq.Info.RegionHandle = m_scene.RegionInfo.RegionHandle;
tpLocReq.Info.Position.X += locX - m_scene.RegionInfo.WorldLocX; tpLocReq.Info.Position.X += locX - m_scene.RegionInfo.WorldLocX;

View File

@ -475,6 +475,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return data; return data;
} }
public int GetCatBytesInSendQueue(ThrottleOutPacketType cat)
{
;
int icat = (int)cat;
if (icat > 0 && icat < THROTTLE_CATEGORY_COUNT)
{
TokenBucket bucket = m_throttleCategories[icat];
return m_packetOutboxes[icat].Count;
}
else
return 0;
}
public int GetCatBytesCanSend(ThrottleOutPacketType cat, int timeMS) public int GetCatBytesCanSend(ThrottleOutPacketType cat, int timeMS)
{ {
int icat = (int)cat; int icat = (int)cat;

View File

@ -229,11 +229,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain
} }
m_scene.RegisterModuleInterface<ITerrainModule>(this); m_scene.RegisterModuleInterface<ITerrainModule>(this);
m_scene.EventManager.OnFrame += EventManager_OnFrame;
m_scene.EventManager.OnNewClient += EventManager_OnNewClient; m_scene.EventManager.OnNewClient += EventManager_OnNewClient;
m_scene.EventManager.OnClientClosed += EventManager_OnClientClosed; m_scene.EventManager.OnClientClosed += EventManager_OnClientClosed;
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick; m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick;
m_scene.EventManager.OnFrame += EventManager_OnFrame;
} }
InstallDefaultEffects(); InstallDefaultEffects();
@ -767,6 +767,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
/// </summary> /// </summary>
private void EventManager_OnFrame() private void EventManager_OnFrame()
{ {
// this needs fixing
TerrainData terrData = m_channel.GetTerrainData(); TerrainData terrData = m_channel.GetTerrainData();
bool shouldTaint = false; bool shouldTaint = false;
@ -792,6 +793,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
m_scene.EventManager.TriggerTerrainTainted(); m_scene.EventManager.TriggerTerrainTainted();
m_tainted = true; m_tainted = true;
} }
} }
/// <summary> /// <summary>
@ -993,6 +995,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain
{ {
foreach (PatchUpdates pups in m_perClientPatchUpdates.Values) foreach (PatchUpdates pups in m_perClientPatchUpdates.Values)
{ {
// throught acording to land queue free to send bytes
if (!pups.Presence.ControllingClient.CanSendLayerData())
continue;
if (pups.HasUpdates()) if (pups.HasUpdates())
{ {
// There is something that could be sent to this client. // There is something that could be sent to this client.

View File

@ -997,6 +997,11 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
} }
public virtual bool CanSendLayerData()
{
return false;
}
public void SendLayerData(float[] map) public void SendLayerData(float[] map)
{ {

View File

@ -671,6 +671,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
} }
public virtual bool CanSendLayerData()
{
return false;
}
public virtual void SendLayerData(float[] map) public virtual void SendLayerData(float[] map)
{ {
} }

View File

@ -590,6 +590,11 @@ namespace OpenSim.Tests.Common.Mock
} }
public virtual bool CanSendLayerData()
{
return false;
}
public virtual void SendLayerData(float[] map) public virtual void SendLayerData(float[] map)
{ {
} }