SimpleAngularDistance update prioritization scheme ameks no sense without ordered dequeue of the updates
parent
f8cdccc167
commit
40b16f1705
|
@ -216,6 +216,27 @@ namespace OpenSim.Framework
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool TryOrderedDequeue(out EntityUpdate value, out Int32 timeinqueue)
|
||||||
|
{
|
||||||
|
// If there is anything in imediate queues, return it first no
|
||||||
|
// matter what else. Breaks fairness. But very useful.
|
||||||
|
for (int iq = 0; iq < NumberOfQueues; iq++)
|
||||||
|
{
|
||||||
|
if (m_heaps[iq].Count > 0)
|
||||||
|
{
|
||||||
|
MinHeapItem item = m_heaps[iq].RemoveMin();
|
||||||
|
m_lookupTable.Remove(item.Value.Entity.LocalId);
|
||||||
|
timeinqueue = Util.EnvironmentTickCountSubtract(item.EntryTime);
|
||||||
|
value = item.Value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
timeinqueue = 0;
|
||||||
|
value = default(EntityUpdate);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reapply the prioritization function to each of the updates currently
|
/// Reapply the prioritization function to each of the updates currently
|
||||||
/// stored in the priority queues.
|
/// stored in the priority queues.
|
||||||
|
|
|
@ -4137,6 +4137,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
Vector3 mypos = Vector3.Zero;
|
Vector3 mypos = Vector3.Zero;
|
||||||
ScenePresence mysp = (ScenePresence)SceneAgent;
|
ScenePresence mysp = (ScenePresence)SceneAgent;
|
||||||
|
|
||||||
|
bool orderedDequeue = m_scene.UpdatePrioritizationScheme == UpdatePrioritizationSchemes.SimpleAngularDistance;
|
||||||
// we should have a presence
|
// we should have a presence
|
||||||
if(mysp == null)
|
if(mysp == null)
|
||||||
return;
|
return;
|
||||||
|
@ -4151,8 +4152,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
while (maxUpdatesBytes > 0)
|
while (maxUpdatesBytes > 0)
|
||||||
{
|
{
|
||||||
lock (m_entityUpdates.SyncRoot)
|
lock (m_entityUpdates.SyncRoot)
|
||||||
if (!m_entityUpdates.TryDequeue(out update, out timeinqueue))
|
{
|
||||||
break;
|
if(orderedDequeue)
|
||||||
|
{
|
||||||
|
if (!m_entityUpdates.TryOrderedDequeue(out update, out timeinqueue))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!m_entityUpdates.TryDequeue(out update, out timeinqueue))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PrimUpdateFlags updateFlags = (PrimUpdateFlags)update.Flags;
|
PrimUpdateFlags updateFlags = (PrimUpdateFlags)update.Flags;
|
||||||
|
|
||||||
|
@ -4850,6 +4861,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>> propertyUpdates =
|
// OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>> propertyUpdates =
|
||||||
// new OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>>();
|
// new OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>>();
|
||||||
|
|
||||||
|
bool orderedDequeue = m_scene.UpdatePrioritizationScheme == UpdatePrioritizationSchemes.SimpleAngularDistance;
|
||||||
|
|
||||||
EntityUpdate iupdate;
|
EntityUpdate iupdate;
|
||||||
Int32 timeinqueue; // this is just debugging code & can be dropped later
|
Int32 timeinqueue; // this is just debugging code & can be dropped later
|
||||||
|
@ -4857,8 +4869,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
while (maxUpdateBytes > 0)
|
while (maxUpdateBytes > 0)
|
||||||
{
|
{
|
||||||
lock (m_entityProps.SyncRoot)
|
lock (m_entityProps.SyncRoot)
|
||||||
if (!m_entityProps.TryDequeue(out iupdate, out timeinqueue))
|
{
|
||||||
break;
|
if(orderedDequeue)
|
||||||
|
{
|
||||||
|
if (!m_entityProps.TryOrderedDequeue(out iupdate, out timeinqueue))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!m_entityProps.TryDequeue(out iupdate, out timeinqueue))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ObjectPropertyUpdate update = (ObjectPropertyUpdate)iupdate;
|
ObjectPropertyUpdate update = (ObjectPropertyUpdate)iupdate;
|
||||||
if (update.SendFamilyProps)
|
if (update.SendFamilyProps)
|
||||||
|
|
Loading…
Reference in New Issue