From 93fa9e89918f41db01229c61a228724d380552ac Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 1 Jun 2012 00:56:13 +0100 Subject: Add ODE avatar and prim collision numbers if extra stats collection is enabled. --- OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 39 ++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) (limited to 'OpenSim/Region/Physics/OdePlugin') diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index 25b3266..864cdc2 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs @@ -148,6 +148,16 @@ namespace OpenSim.Region.Physics.OdePlugin public const string ODENativeCollisionFrameMsStatName = "ODENativeCollisionFrameMS"; /// + /// Stat name for the number of avatar collisions with another entity. + /// + public const string ODEAvatarCollisionsStatName = "ODEAvatarCollisions"; + + /// + /// Stat name for the number of prim collisions with another entity. + /// + public const string ODEPrimCollisionsStatName = "ODEPrimCollisions"; + + /// /// Used to hold tick numbers for stat collection purposes. /// private int m_nativeCollisionTickRecorder; @@ -158,6 +168,12 @@ namespace OpenSim.Region.Physics.OdePlugin private bool m_inCollisionTiming; /// + /// A temporary holder for the number of avatar collisions in a frame, so we can work out how many object + /// collisions occured using the _perloopcontact if stats collection is enabled. + /// + private int m_tempAvatarCollisionsThisFrame; + + /// /// Used in calculating physics frame time dilation /// private int tickCountFrameRun; @@ -473,7 +489,7 @@ namespace OpenSim.Region.Physics.OdePlugin // Initialize the mesh plugin public override void Initialise(IMesher meshmerizer, IConfigSource config) { - m_stats[ODENativeCollisionFrameMsStatName] = 0; + InitializeExtraStats(); mesher = meshmerizer; m_config = config; @@ -1455,7 +1471,7 @@ namespace OpenSim.Region.Physics.OdePlugin break; } } - //m_log.DebugFormat("[Collsion]: Depth {0}", Math.Abs(contact.depth - contactGeom.depth)); + //m_log.DebugFormat("[Collision]: Depth {0}", Math.Abs(contact.depth - contactGeom.depth)); //m_log.DebugFormat("[Collision]: <{0},{1},{2}>", Math.Abs(contactGeom.normal.X - contact.normal.X), Math.Abs(contactGeom.normal.Y - contact.normal.Y), Math.Abs(contactGeom.normal.Z - contact.normal.Z)); } } @@ -1693,8 +1709,11 @@ namespace OpenSim.Region.Physics.OdePlugin //} } -// if (framecount % 55 == 0) -// m_log.DebugFormat("Processed {0} collisions", _perloopContact.Count); + if (CollectStats) + { + m_tempAvatarCollisionsThisFrame = _perloopContact.Count; + m_stats[ODEAvatarCollisionsStatName] += m_tempAvatarCollisionsThisFrame; + } List removeprims = null; foreach (OdePrim chr in _activeprims) @@ -1728,6 +1747,9 @@ namespace OpenSim.Region.Physics.OdePlugin } } + if (CollectStats) + m_stats[ODEPrimCollisionsStatName] += _perloopContact.Count - m_tempAvatarCollisionsThisFrame; + if (removeprims != null) { foreach (OdePrim chr in removeprims) @@ -4063,10 +4085,17 @@ namespace OpenSim.Region.Physics.OdePlugin { returnStats = new Dictionary(m_stats); - m_stats[ODENativeCollisionFrameMsStatName] = 0; + InitializeExtraStats(); } return returnStats; } + + private void InitializeExtraStats() + { + m_stats[ODENativeCollisionFrameMsStatName] = 0; + m_stats[ODEAvatarCollisionsStatName] = 0; + m_stats[ODEPrimCollisionsStatName] = 0; + } } } \ No newline at end of file -- cgit v1.1