Merge branch 'cpu-performance' of ssh://opensimulator.org/var/git/opensim into cpu-performance

cpu-performance
Justin Clark-Casey (justincc) 2013-07-22 23:59:10 +01:00
commit 0755fc2f65
2 changed files with 35 additions and 39 deletions

View File

@ -359,12 +359,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// cannot retain a reference to it outside of that method. /// cannot retain a reference to it outside of that method.
/// </remarks> /// </remarks>
private AgentUpdateArgs m_thisAgentUpdateArgs = new AgentUpdateArgs(); private AgentUpdateArgs m_thisAgentUpdateArgs = new AgentUpdateArgs();
private float qdelta1;
private float qdelta2;
private float vdelta1;
private float vdelta2;
private float vdelta3;
private float vdelta4;
protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>(); protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>();
protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers
@ -5576,7 +5570,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
#region Scene/Avatar #region Scene/Avatar
// Threshold for body rotation to be a significant agent update
private const float QDELTA = 0.000001f; private const float QDELTA = 0.000001f;
// Threshold for camera rotation to be a significant agent update
private const float VDELTA = 0.01f; private const float VDELTA = 0.01f;
/// <summary> /// <summary>
@ -5587,14 +5583,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <param name='x'></param> /// <param name='x'></param>
public bool CheckAgentUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) public bool CheckAgentUpdateSignificance(AgentUpdatePacket.AgentDataBlock x)
{ {
// Compute these only once, when this function is called from down below
qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
//qdelta2 = 1 - (float)Math.Pow(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation), 2);
vdelta1 = Vector3.Distance(x.CameraAtAxis, m_thisAgentUpdateArgs.CameraAtAxis);
vdelta2 = Vector3.Distance(x.CameraCenter, m_thisAgentUpdateArgs.CameraCenter);
vdelta3 = Vector3.Distance(x.CameraLeftAxis, m_thisAgentUpdateArgs.CameraLeftAxis);
vdelta4 = Vector3.Distance(x.CameraUpAxis, m_thisAgentUpdateArgs.CameraUpAxis);
return CheckAgentMovementUpdateSignificance(x) || CheckAgentCameraUpdateSignificance(x); return CheckAgentMovementUpdateSignificance(x) || CheckAgentCameraUpdateSignificance(x);
} }
@ -5606,24 +5594,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <param name='x'></param> /// <param name='x'></param>
private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x)
{ {
if ( float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
(qdelta1 > QDELTA) || //qdelta2 = 1 - (float)Math.Pow(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation), 2);
bool movementSignificant =
(qdelta1 > QDELTA) // significant if body rotation above threshold
// Ignoring head rotation altogether, because it's not being used for anything interesting up the stack // Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
//(qdelta2 > QDELTA * 10) || // || (qdelta2 > QDELTA * 10) // significant if head rotation above threshold
(x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) || || (x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) // significant if control flags changed
(x.Far != m_thisAgentUpdateArgs.Far) || || (x.ControlFlags != (byte)AgentManager.ControlFlags.NONE) // significant if user supplying any movement update commands
(x.Flags != m_thisAgentUpdateArgs.Flags) || || (x.Far != m_thisAgentUpdateArgs.Far) // significant if far distance changed
(x.State != m_thisAgentUpdateArgs.State) || (x.Flags != m_thisAgentUpdateArgs.Flags) // significant if Flags changed
) || (x.State != m_thisAgentUpdateArgs.State) // significant if Stats changed
{ ;
//if (movementSignificant)
//{
//m_log.DebugFormat("[LLCLIENTVIEW]: Bod {0} {1}", //m_log.DebugFormat("[LLCLIENTVIEW]: Bod {0} {1}",
// qdelta1, qdelta2); // qdelta1, qdelta2);
//m_log.DebugFormat("[LLCLIENTVIEW]: St {0} {1} {2} {3} (Thread {4})", //m_log.DebugFormat("[LLCLIENTVIEW]: St {0} {1} {2} {3}",
// x.ControlFlags, x.Flags, x.Far, x.State, Thread.CurrentThread.Name); // x.ControlFlags, x.Flags, x.Far, x.State);
return true; //}
} return movementSignificant;
return false;
} }
/// <summary> /// <summary>
@ -5634,23 +5625,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <param name='x'></param> /// <param name='x'></param>
private bool CheckAgentCameraUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) private bool CheckAgentCameraUpdateSignificance(AgentUpdatePacket.AgentDataBlock x)
{ {
if ( float vdelta1 = Vector3.Distance(x.CameraAtAxis, m_thisAgentUpdateArgs.CameraAtAxis);
/* These 4 are the worst offenders! float vdelta2 = Vector3.Distance(x.CameraCenter, m_thisAgentUpdateArgs.CameraCenter);
* With Singularity, there is a bug where sometimes the spam on these doesn't stop */ float vdelta3 = Vector3.Distance(x.CameraLeftAxis, m_thisAgentUpdateArgs.CameraLeftAxis);
float vdelta4 = Vector3.Distance(x.CameraUpAxis, m_thisAgentUpdateArgs.CameraUpAxis);
bool cameraSignificant =
(vdelta1 > VDELTA) || (vdelta1 > VDELTA) ||
(vdelta2 > VDELTA) || (vdelta2 > VDELTA) ||
(vdelta3 > VDELTA) || (vdelta3 > VDELTA) ||
(vdelta4 > VDELTA) (vdelta4 > VDELTA)
) ;
{
//if (cameraSignificant)
//{
//m_log.DebugFormat("[LLCLIENTVIEW]: Cam1 {0} {1}", //m_log.DebugFormat("[LLCLIENTVIEW]: Cam1 {0} {1}",
// x.CameraAtAxis, x.CameraCenter); // x.CameraAtAxis, x.CameraCenter);
//m_log.DebugFormat("[LLCLIENTVIEW]: Cam2 {0} {1}", //m_log.DebugFormat("[LLCLIENTVIEW]: Cam2 {0} {1}",
// x.CameraLeftAxis, x.CameraUpAxis); // x.CameraLeftAxis, x.CameraUpAxis);
return true; //}
}
return false; return cameraSignificant;
} }
private bool HandleAgentUpdate(IClientAPI sener, Packet packet) private bool HandleAgentUpdate(IClientAPI sener, Packet packet)

View File

@ -1359,9 +1359,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AgentUpdatePacket agentUpdate = (AgentUpdatePacket)packet; AgentUpdatePacket agentUpdate = (AgentUpdatePacket)packet;
LLClientView llClient = client as LLClientView;
if (agentUpdate.AgentData.SessionID != client.SessionId if (agentUpdate.AgentData.SessionID != client.SessionId
|| agentUpdate.AgentData.AgentID != client.AgentId || agentUpdate.AgentData.AgentID != client.AgentId
|| !((LLClientView)client).CheckAgentUpdateSignificance(agentUpdate.AgentData)) || !(llClient == null || llClient.CheckAgentUpdateSignificance(agentUpdate.AgentData)) )
{ {
PacketPool.Instance.ReturnPacket(packet); PacketPool.Instance.ReturnPacket(packet);
return; return;