summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerwincoumans <erwin.coumans@gmail.com>2019-04-14 18:20:20 -0700
committererwincoumans <erwin.coumans@gmail.com>2019-04-14 18:20:20 -0700
commite97a7d77af352225c86f5ae7fd6f106c4f295e42 (patch)
tree4a6109e6fa60a8bf712434dc41347b947a1e9388
parent219970c09eeae823f7dc8a7488e58b33917db9b5 (diff)
downloadbullet3-e97a7d77af352225c86f5ae7fd6f106c4f295e42.tar.gz
only report solver analytics if enabled using setPhysicsEngineParameter(reportSolverAnalytics=1)
-rw-r--r--examples/SharedMemory/PhysicsClientC_API.cpp11
-rw-r--r--examples/SharedMemory/PhysicsClientC_API.h3
-rw-r--r--examples/SharedMemory/PhysicsServerCommandProcessor.cpp7
-rw-r--r--examples/SharedMemory/SharedMemoryCommands.h51
-rw-r--r--examples/SharedMemory/SharedMemoryPublic.h3
-rw-r--r--examples/pybullet/pybullet.c13
-rw-r--r--src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h4
-rw-r--r--src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp4
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);