diff options
author | erwincoumans <erwin.coumans@gmail.com> | 2019-04-14 18:20:20 -0700 |
---|---|---|
committer | erwincoumans <erwin.coumans@gmail.com> | 2019-04-14 18:20:20 -0700 |
commit | e97a7d77af352225c86f5ae7fd6f106c4f295e42 (patch) | |
tree | 4a6109e6fa60a8bf712434dc41347b947a1e9388 | |
parent | 219970c09eeae823f7dc8a7488e58b33917db9b5 (diff) | |
download | bullet3-e97a7d77af352225c86f5ae7fd6f106c4f295e42.tar.gz |
only report solver analytics if enabled using setPhysicsEngineParameter(reportSolverAnalytics=1)
-rw-r--r-- | examples/SharedMemory/PhysicsClientC_API.cpp | 11 | ||||
-rw-r--r-- | examples/SharedMemory/PhysicsClientC_API.h | 3 | ||||
-rw-r--r-- | examples/SharedMemory/PhysicsServerCommandProcessor.cpp | 7 | ||||
-rw-r--r-- | examples/SharedMemory/SharedMemoryCommands.h | 51 | ||||
-rw-r--r-- | examples/SharedMemory/SharedMemoryPublic.h | 3 | ||||
-rw-r--r-- | examples/pybullet/pybullet.c | 13 | ||||
-rw-r--r-- | src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h | 4 | ||||
-rw-r--r-- | src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp | 4 |
8 files changed, 61 insertions, 35 deletions
diff --git a/examples/SharedMemory/PhysicsClientC_API.cpp b/examples/SharedMemory/PhysicsClientC_API.cpp index 93b84bf60..920a463b7 100644 --- a/examples/SharedMemory/PhysicsClientC_API.cpp +++ b/examples/SharedMemory/PhysicsClientC_API.cpp @@ -689,6 +689,17 @@ B3_SHARED_API int b3PhysicsParameterSetMinimumSolverIslandSize(b3SharedMemoryCom return 0; } +B3_SHARED_API int b3PhysicsParamSetSolverAnalytics(b3SharedMemoryCommandHandle commandHandle, int reportSolverAnalytics) +{ + struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; + b3Assert(command->m_type == CMD_SEND_PHYSICS_SIMULATION_PARAMETERS); + command->m_physSimParamArgs.m_reportSolverAnalytics = reportSolverAnalytics; + command->m_updateFlags |= SIM_PARAM_REPORT_CONSTRAINT_SOLVER_ANALYTICS; + return 0; +} + + + B3_SHARED_API int b3PhysicsParamSetCollisionFilterMode(b3SharedMemoryCommandHandle commandHandle, int filterMode) { struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle; diff --git a/examples/SharedMemory/PhysicsClientC_API.h b/examples/SharedMemory/PhysicsClientC_API.h index 680e48ad4..290c8b36b 100644 --- a/examples/SharedMemory/PhysicsClientC_API.h +++ b/examples/SharedMemory/PhysicsClientC_API.h @@ -349,7 +349,8 @@ extern "C" B3_SHARED_API int b3PhysicsParameterSetEnableSAT(b3SharedMemoryCommandHandle commandHandle, int enableSAT); B3_SHARED_API int b3PhysicsParameterSetConstraintSolverType(b3SharedMemoryCommandHandle commandHandle, int constraintSolverType); B3_SHARED_API int b3PhysicsParameterSetMinimumSolverIslandSize(b3SharedMemoryCommandHandle commandHandle, int minimumSolverIslandSize); - + B3_SHARED_API int b3PhysicsParamSetSolverAnalytics(b3SharedMemoryCommandHandle commandHandle, int reportSolverAnalytics); + B3_SHARED_API b3SharedMemoryCommandHandle b3InitRequestPhysicsParamCommand(b3PhysicsClientHandle physClient); B3_SHARED_API int b3GetStatusPhysicsSimulationParameters(b3SharedMemoryStatusHandle statusHandle, struct b3PhysicsSimulationParameters* params); diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 7beb0982d..b0c6697ec 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -7605,7 +7605,7 @@ bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct S } btScalar deltaTimeScaled = m_data->m_physicsDeltaTime * simTimeScalingFactor; - m_data->m_dynamicsWorld->getSolverInfo().m_reportSolverAnalytics = true; + int numSteps = 0; if (m_data->m_numSimulationSubSteps > 0) { @@ -8426,6 +8426,11 @@ bool PhysicsServerCommandProcessor::processSendPhysicsParametersCommand(const st m_data->m_pluginManager.getFileIOInterface()->enableFileCaching(clientCmd.m_physSimParamArgs.m_enableFileCaching!=0); } + if (clientCmd.m_updateFlags & SIM_PARAM_REPORT_CONSTRAINT_SOLVER_ANALYTICS) + { + m_data->m_dynamicsWorld->getSolverInfo().m_reportSolverAnalytics = clientCmd.m_physSimParamArgs.m_reportSolverAnalytics; + } + SharedMemoryStatus& serverCmd = serverStatusOut; serverCmd.m_type = CMD_CLIENT_COMMAND_COMPLETED; return hasStatus; diff --git a/examples/SharedMemory/SharedMemoryCommands.h b/examples/SharedMemory/SharedMemoryCommands.h index 443c4672e..1d70a9df0 100644 --- a/examples/SharedMemory/SharedMemoryCommands.h +++ b/examples/SharedMemory/SharedMemoryCommands.h @@ -456,31 +456,32 @@ enum EnumSimDesiredStateUpdateFlags enum EnumSimParamUpdateFlags { SIM_PARAM_UPDATE_DELTA_TIME = 1, - SIM_PARAM_UPDATE_GRAVITY = 2, - SIM_PARAM_UPDATE_NUM_SOLVER_ITERATIONS = 4, - SIM_PARAM_UPDATE_NUM_SIMULATION_SUB_STEPS = 8, - SIM_PARAM_UPDATE_REAL_TIME_SIMULATION = 16, - SIM_PARAM_UPDATE_DEFAULT_CONTACT_ERP = 32, - SIM_PARAM_UPDATE_INTERNAL_SIMULATION_FLAGS = 64, - SIM_PARAM_UPDATE_USE_SPLIT_IMPULSE = 128, - SIM_PARAM_UPDATE_SPLIT_IMPULSE_PENETRATION_THRESHOLD = 256, - SIM_PARAM_UPDATE_COLLISION_FILTER_MODE = 512, - SIM_PARAM_UPDATE_CONTACT_BREAKING_THRESHOLD = 1024, - SIM_PARAM_ENABLE_CONE_FRICTION = 2048, - SIM_PARAM_ENABLE_FILE_CACHING = 4096, - SIM_PARAM_UPDATE_RESTITUTION_VELOCITY_THRESHOLD = 8192, - SIM_PARAM_UPDATE_DEFAULT_NON_CONTACT_ERP = 16384, - SIM_PARAM_UPDATE_DEFAULT_FRICTION_ERP = 32768, - SIM_PARAM_UPDATE_DETERMINISTIC_OVERLAPPING_PAIRS = 65536, - SIM_PARAM_UPDATE_CCD_ALLOWED_PENETRATION = 131072, - SIM_PARAM_UPDATE_JOINT_FEEDBACK_MODE = 262144, - SIM_PARAM_UPDATE_DEFAULT_GLOBAL_CFM = 524288, - SIM_PARAM_UPDATE_DEFAULT_FRICTION_CFM = 1048576, - SIM_PARAM_UPDATE_SOLVER_RESIDULAL_THRESHOLD = 2097152, - SIM_PARAM_UPDATE_CONTACT_SLOP = 4194304, - SIM_PARAM_ENABLE_SAT = 8388608, - SIM_PARAM_CONSTRAINT_SOLVER_TYPE = 16777216, - SIM_PARAM_CONSTRAINT_MIN_SOLVER_ISLAND_SIZE = 33554432, + SIM_PARAM_UPDATE_GRAVITY = 1<<1, + SIM_PARAM_UPDATE_NUM_SOLVER_ITERATIONS = 1<<2, + SIM_PARAM_UPDATE_NUM_SIMULATION_SUB_STEPS = 1<<3, + SIM_PARAM_UPDATE_REAL_TIME_SIMULATION = 1<<4, + SIM_PARAM_UPDATE_DEFAULT_CONTACT_ERP = 1<<5, + SIM_PARAM_UPDATE_INTERNAL_SIMULATION_FLAGS = 1<<6, + SIM_PARAM_UPDATE_USE_SPLIT_IMPULSE = 1<<7, + SIM_PARAM_UPDATE_SPLIT_IMPULSE_PENETRATION_THRESHOLD = 1<<8, + SIM_PARAM_UPDATE_COLLISION_FILTER_MODE = 1 << 9, + SIM_PARAM_UPDATE_CONTACT_BREAKING_THRESHOLD = 1 << 10, + SIM_PARAM_ENABLE_CONE_FRICTION = 1 << 11, + SIM_PARAM_ENABLE_FILE_CACHING = 1 << 12, + SIM_PARAM_UPDATE_RESTITUTION_VELOCITY_THRESHOLD = 1 << 13, + SIM_PARAM_UPDATE_DEFAULT_NON_CONTACT_ERP = 1 << 14, + SIM_PARAM_UPDATE_DEFAULT_FRICTION_ERP = 1 << 15, + SIM_PARAM_UPDATE_DETERMINISTIC_OVERLAPPING_PAIRS = 1 << 16, + SIM_PARAM_UPDATE_CCD_ALLOWED_PENETRATION = 1 << 17, + SIM_PARAM_UPDATE_JOINT_FEEDBACK_MODE = 1 << 18, + SIM_PARAM_UPDATE_DEFAULT_GLOBAL_CFM = 1 << 19, + SIM_PARAM_UPDATE_DEFAULT_FRICTION_CFM = 1 << 20, + SIM_PARAM_UPDATE_SOLVER_RESIDULAL_THRESHOLD = 1 << 21, + SIM_PARAM_UPDATE_CONTACT_SLOP = 1 << 22, + SIM_PARAM_ENABLE_SAT = 1 << 23, + SIM_PARAM_CONSTRAINT_SOLVER_TYPE = 1 << 24, + SIM_PARAM_CONSTRAINT_MIN_SOLVER_ISLAND_SIZE = 1 << 25, + SIM_PARAM_REPORT_CONSTRAINT_SOLVER_ANALYTICS = 1 << 26, }; diff --git a/examples/SharedMemory/SharedMemoryPublic.h b/examples/SharedMemory/SharedMemoryPublic.h index d0ede5768..b2c2f6c68 100644 --- a/examples/SharedMemory/SharedMemoryPublic.h +++ b/examples/SharedMemory/SharedMemoryPublic.h @@ -903,7 +903,7 @@ struct b3PluginArguments struct b3PhysicsSimulationParameters { double m_deltaTime; - double m_simulationTimestamp; // Output only timestamp of simulation. + double m_simulationTimestamp; // user logging timestamp of simulation. double m_gravityAcceleration[3]; int m_numSimulationSubSteps; int m_numSolverIterations; @@ -929,6 +929,7 @@ struct b3PhysicsSimulationParameters int m_enableSAT; int m_constraintSolverType; int m_minimumSolverIslandSize; + int m_reportSolverAnalytics; }; diff --git a/examples/pybullet/pybullet.c b/examples/pybullet/pybullet.c index 9f59c79d8..b570e69bc 100644 --- a/examples/pybullet/pybullet.c +++ b/examples/pybullet/pybullet.c @@ -1567,8 +1567,9 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar double globalCFM = -1; int minimumSolverIslandSize = -1; - + int reportSolverAnalytics = -1; int physicsClientId = 0; + static char* kwlist[] = {"fixedTimeStep", "numSolverIterations", "useSplitImpulse", @@ -1592,10 +1593,12 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar "constraintSolverType", "globalCFM", "minimumSolverIslandSize", + "reportSolverAnalytics", "physicsClientId", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diidiidiiddddiididdiidii", kwlist, &fixedTimeStep, &numSolverIterations, &useSplitImpulse, &splitImpulsePenetrationThreshold, &numSubSteps, - &collisionFilterMode, &contactBreakingThreshold, &maxNumCmdPer1ms, &enableFileCaching, &restitutionVelocityThreshold, &erp, &contactERP, &frictionERP, &enableConeFriction, &deterministicOverlappingPairs, &allowedCcdPenetration, &jointFeedbackMode, &solverResidualThreshold, &contactSlop, &enableSAT, &constraintSolverType, &globalCFM, &minimumSolverIslandSize, &physicsClientId)) + if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diidiidiiddddiididdiidiii", kwlist, &fixedTimeStep, &numSolverIterations, &useSplitImpulse, &splitImpulsePenetrationThreshold, &numSubSteps, + &collisionFilterMode, &contactBreakingThreshold, &maxNumCmdPer1ms, &enableFileCaching, &restitutionVelocityThreshold, &erp, &contactERP, &frictionERP, &enableConeFriction, &deterministicOverlappingPairs, &allowedCcdPenetration, &jointFeedbackMode, &solverResidualThreshold, &contactSlop, &enableSAT, &constraintSolverType, &globalCFM, &minimumSolverIslandSize, + &reportSolverAnalytics, &physicsClientId)) { return NULL; } @@ -1712,6 +1715,10 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar { b3PhysicsParamSetDefaultGlobalCFM(command, globalCFM); } + if (reportSolverAnalytics >= 0) + { + b3PhysicsParamSetSolverAnalytics(command, reportSolverAnalytics); + } statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command); } diff --git a/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h b/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h index 0b6ac54c8..63d7c98e1 100644 --- a/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h +++ b/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h @@ -64,7 +64,7 @@ struct btContactSolverInfoData btScalar m_restitutionVelocityThreshold; bool m_jointFeedbackInWorldSpace; bool m_jointFeedbackInJointFrame; - bool m_reportSolverAnalytics; + int m_reportSolverAnalytics; }; struct btContactSolverInfo : public btContactSolverInfoData @@ -99,7 +99,7 @@ struct btContactSolverInfo : public btContactSolverInfoData m_restitutionVelocityThreshold = 0.2f; //if the relative velocity is below this threshold, there is zero restitution m_jointFeedbackInWorldSpace = false; m_jointFeedbackInJointFrame = false; - m_reportSolverAnalytics = false; + m_reportSolverAnalytics = 0; } }; diff --git a/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp b/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp index 28b569935..3bb056fbf 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp +++ b/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp @@ -274,7 +274,7 @@ struct MultiBodyInplaceSolverIslandCallback : public btSimulationIslandManager:: { ///we don't split islands, so all constraints/contact manifolds/bodies are passed into the solver regardless the island id m_solver->solveMultiBodyGroup(bodies, numBodies, manifolds, numManifolds, m_sortedConstraints, m_numConstraints, &m_multiBodySortedConstraints[0], m_numConstraints, *m_solverInfo, m_debugDrawer, m_dispatcher); - if (m_solverInfo->m_reportSolverAnalytics) + if (m_solverInfo->m_reportSolverAnalytics&1) { m_solver->m_analyticsData.m_islandId = islandId; m_islandAnalyticsData.push_back(m_solver->m_analyticsData); @@ -363,7 +363,7 @@ struct MultiBodyInplaceSolverIslandCallback : public btSimulationIslandManager:: //printf("mb contacts = %d, mb constraints = %d\n", mbContacts, m_multiBodyConstraints.size()); m_solver->solveMultiBodyGroup(bodies, m_bodies.size(), manifold, m_manifolds.size(), constraints, m_constraints.size(), multiBodyConstraints, m_multiBodyConstraints.size(), *m_solverInfo, m_debugDrawer, m_dispatcher); - if (m_bodies.size() && m_solverInfo->m_reportSolverAnalytics) + if (m_bodies.size() && (m_solverInfo->m_reportSolverAnalytics&1)) { m_solver->m_analyticsData.m_islandId = islandId; m_islandAnalyticsData.push_back(m_solver->m_analyticsData); |