From aa236b2020a16c464a854be2b02ca49ea637cb27 Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Tue, 1 Jan 2013 17:25:41 -0800 Subject: [PATCH] BulletSim: add parameter to have Bullet output performance statistics every so many frames. Default to off. --- OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs | 2 +- OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs | 4 ++-- OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | 8 ++++---- OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 4 ++++ 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs index aea10ee6d8..30a7bee667 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs @@ -970,7 +970,7 @@ private sealed class BulletConstraintXNA : BulletConstraint p.linkConstraintERP = o[0].XlinkConstraintERP; p.linkConstraintCFM = o[0].XlinkConstraintCFM; p.linkConstraintSolverIterations = o[0].XlinkConstraintSolverIterations; - p.physicsLoggingFrames = o[0].physicsLoggingFrames; + p.physicsLoggingFrames = o[0].XphysicsLoggingFrames; DefaultCollisionConstructionInfo ccci = new DefaultCollisionConstructionInfo(); DefaultCollisionConfiguration cci = new DefaultCollisionConfiguration(); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs b/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs index 1735be299a..8ad78ca4b2 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs @@ -198,7 +198,7 @@ public struct ConfigurationParameters public float XlinkConstraintCFM; public float XlinkConstraintSolverIterations; - public float physicsLoggingFrames; + public float XphysicsLoggingFrames; public const float numericTrue = 1f; public const float numericFalse = 0f; @@ -415,7 +415,7 @@ public abstract void SetForceUpdateAllAabbs(BulletWorld world, bool force); // ===================================================================================== // btDynamicsWorld entries -// public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj, Vector3 pos, Quaternion rot); +// public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj, Vector3 pos, Quaternion rot); public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj); public abstract bool RemoveObjectFromWorld(BulletWorld world, BulletBody obj); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index 339722ed6c..69ac8cdc1a 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs @@ -492,11 +492,11 @@ public static class BSParam (s) => { return LinkConstraintSolverIterations; }, (s,p,l,v) => { LinkConstraintSolverIterations = v; } ), - new ParameterDefn("LogPhysicsStatisticsFrames", "Frames between outputting detailed phys stats. (0 is off)", + new ParameterDefn("PhysicsMetricFrames", "Frames between outputting detailed phys metrics. (0 is off)", 0f, - (s,cf,p,v) => { s.UnmanagedParams[0].physicsLoggingFrames = cf.GetInt(p, (int)v); }, - (s) => { return (float)s.UnmanagedParams[0].physicsLoggingFrames; }, - (s,p,l,v) => { s.UnmanagedParams[0].physicsLoggingFrames = (int)v; } ), + (s,cf,p,v) => { s.PhysicsMetricDumpFrames = cf.GetFloat(p, (int)v); }, + (s) => { return (float)s.PhysicsMetricDumpFrames; }, + (s,p,l,v) => { s.PhysicsMetricDumpFrames = (int)v; } ), }; // Convert a boolean to our numeric true and false values diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index 3340cdaf19..7017194c23 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs @@ -161,6 +161,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters private int m_physicsLoggingFileMinutes; private bool m_physicsLoggingDoFlush; private bool m_physicsPhysicalDumpEnabled; + public float PhysicsMetricDumpFrames { get; set; } // 'true' of the vehicle code is to log lots of details public bool VehicleLoggingEnabled { get; private set; } public bool VehiclePhysicalLoggingEnabled { get; private set; } @@ -526,6 +527,9 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters collidersCount = 0; } + if ((m_simulationStep % PhysicsMetricDumpFrames) == 0) + PE.DumpPhysicsStatistics(World); + // Get a value for 'now' so all the collision and update routines don't have to get their own. SimulationNowTime = Util.EnvironmentTickCount();