Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tracy profiling #668

Open
wants to merge 5 commits into
base: devel
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Add option to switch between (default) double precision and float precision
- Changed all the uses of `double` to `Scalar` in Coal
- Fixed all the compilation warnings when compiling the library using float precision
- Tracy profiling ([#668](https://github.com/coal-library/coal/pull/668))
- added cmake option `COAL_BUILD_WITH_TRACY`
- put tracy scoped zones in broadphase and primitive shapes collision/distance queries

## [3.0.1] - 2025-02-12

Expand Down
24 changes: 24 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ option(
"Use float precision (32-bit) instead of the default double precision (64-bit)"
FALSE
)
option(
COAL_BUILD_WITH_TRACY
"Build with tracy profiler for performance analysis"
FALSE
)

# Check if the submodule cmake have been initialized
set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake")
Expand Down Expand Up @@ -131,6 +136,7 @@ include("${JRL_CMAKE_MODULES}/boost.cmake")
include("${JRL_CMAKE_MODULES}/python.cmake")
include("${JRL_CMAKE_MODULES}/apple.cmake")
include("${JRL_CMAKE_MODULES}/ide.cmake")
include("${JRL_CMAKE_MODULES}/tracy.cmake")
include(CMakeDependentOption)

set(
Expand Down Expand Up @@ -165,6 +171,24 @@ cmake_dependent_option(

ADD_PROJECT_DEPENDENCY(Eigen3 REQUIRED PKG_CONFIG_REQUIRES "eigen3 >= 3.0.0")

# -- tracy profiling (optional)
if(COAL_BUILD_WITH_TRACY)
# assume it is installed somewhere
ADD_PROJECT_DEPENDENCY(Tracy REQUIRED)
set_target_properties(
Tracy::TracyClient
PROPERTIES POSITION_INDEPENDENT_CODE True
)
if(${Tracy_FOUND})
message(STATUS "Tracy found on your system at ${Tracy_DIR}")
else()
message(
FATAL_ERROR
"Coal support for tracy is enabled, but tracy was not found on your system."
)
endif()
Comment on lines +182 to +189
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it is necessary to add this line as we have already ADD_PROJECT_DEPENDENCY(Tracy REQUIRED). Could you remove these lines?

endif(COAL_BUILD_WITH_TRACY)

if(BUILD_PYTHON_INTERFACE)
set(PYTHON_COMPONENTS Interpreter Development NumPy)
FINDPYTHON(REQUIRED)
Expand Down
3 changes: 3 additions & 0 deletions include/coal/contact_patch/contact_patch_solver.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
#include "coal/data_types.h"
#include "coal/shape/geometric_shapes_traits.h"

#include "coal/tracy.hh"

namespace coal {

// ============================================================================
Expand Down Expand Up @@ -79,6 +81,7 @@ void ContactPatchSolver::computePatch(const ShapeType1& s1,
const Transform3s& tf2,
const Contact& contact,
ContactPatch& contact_patch) const {
COAL_TRACY_ZONE_SCOPED_N("coal::ContactPatchSolver::computePatch");
// Note: `ContactPatch` is an alias for `SupportSet`.
// Step 1
constructContactPatchFrameFromContact(contact, contact_patch);
Expand Down
9 changes: 9 additions & 0 deletions include/coal/internal/shape_shape_contact_patch_func.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
#include "coal/contact_patch/contact_patch_solver.h"
#include "coal/shape/geometric_shapes_traits.h"

#include "coal/tracy.hh"

namespace coal {

/// @brief Shape-shape contact patch computation.
Expand Down Expand Up @@ -140,6 +142,9 @@ void computePatchPlaneOrHalfspace(const OtherShapeType& s1,
const ContactPatchSolver* csolver, \
const ContactPatchRequest& request, \
ContactPatchResult& result) { \
COAL_TRACY_ZONE_SCOPED_N( \
"coal::ComputeShapeShapeContactPatch<OtherShapeType, " \
"PlaneOrHspace>::run"); \
if (!collision_result.isCollision()) { \
return; \
} \
Expand Down Expand Up @@ -174,6 +179,9 @@ void computePatchPlaneOrHalfspace(const OtherShapeType& s1,
const ContactPatchSolver* csolver, \
const ContactPatchRequest& request, \
ContactPatchResult& result) { \
COAL_TRACY_ZONE_SCOPED_N( \
"coal::ComputeShapeShapeContactPatch<PlaneOrHspace, " \
"OtherShapeType>::run"); \
if (!collision_result.isCollision()) { \
return; \
} \
Expand Down Expand Up @@ -255,6 +263,7 @@ void ShapeShapeContactPatch(const CollisionGeometry* o1, const Transform3s& tf1,
const ContactPatchSolver* csolver,
const ContactPatchRequest& request,
ContactPatchResult& result) {
COAL_TRACY_ZONE_SCOPED_N("coal::ShapeShapeContactPatch");
return ComputeShapeShapeContactPatch<ShapeType1, ShapeType2>::run(
o1, tf1, o2, tf2, collision_result, csolver, request, result);
}
Expand Down
4 changes: 4 additions & 0 deletions include/coal/internal/shape_shape_func.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
#include "coal/narrowphase/narrowphase.h"
#include "coal/shape/geometric_shapes_traits.h"

#include "coal/tracy.hh"

namespace coal {

template <typename ShapeType1, typename ShapeType2>
Expand Down Expand Up @@ -93,6 +95,7 @@ Scalar ShapeShapeDistance(const CollisionGeometry* o1, const Transform3s& tf1,
const GJKSolver* nsolver,
const DistanceRequest& request,
DistanceResult& result) {
COAL_TRACY_ZONE_SCOPED_N("coal::ShapeShapeDistance");
return ShapeShapeDistancer<ShapeType1, ShapeType2>::run(
o1, tf1, o2, tf2, nsolver, request, result);
}
Expand Down Expand Up @@ -169,6 +172,7 @@ std::size_t ShapeShapeCollide(const CollisionGeometry* o1,
const Transform3s& tf2, const GJKSolver* nsolver,
const CollisionRequest& request,
CollisionResult& result) {
COAL_TRACY_ZONE_SCOPED_N("coal::ShapeShapeCollide");
return ShapeShapeCollider<ShapeType1, ShapeType2>::run(
o1, tf1, o2, tf2, nsolver, request, result);
}
Expand Down
5 changes: 5 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,11 @@ if(COAL_USE_FLOAT_PRECISION)
target_compile_definitions(${LIBRARY_NAME} PUBLIC COAL_USE_FLOAT_PRECISION)
endif()

if(COAL_BUILD_WITH_TRACY)
target_compile_definitions(${LIBRARY_NAME} PUBLIC COAL_TRACY_ENABLE)
target_link_libraries(${LIBRARY_NAME} PUBLIC Tracy::TracyClient)
endif()

if(WIN32)
target_link_libraries(
${LIBRARY_NAME}
Expand Down
17 changes: 17 additions & 0 deletions src/broadphase/broadphase_SSaP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
/** @author Jia Pan */

#include "coal/broadphase/broadphase_SSaP.h"
#include "coal/tracy.hh"

namespace coal {

Expand Down Expand Up @@ -200,6 +201,9 @@ bool SSaPCollisionManager::checkDis(
//==============================================================================
void SSaPCollisionManager::collide(CollisionObject* obj,
CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SSaPCollisionManager::collide(CollisionObject*, "
"CollisionCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand Down Expand Up @@ -253,6 +257,9 @@ bool SSaPCollisionManager::collide_(CollisionObject* obj,
//==============================================================================
void SSaPCollisionManager::distance(CollisionObject* obj,
DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SSaPCollisionManager::distance(CollisionObject*, "
"DistanceCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand Down Expand Up @@ -400,6 +407,8 @@ int SSaPCollisionManager::selectOptimalAxis(

//==============================================================================
void SSaPCollisionManager::collide(CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SSaPCollisionManager::collide(CollisionCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand Down Expand Up @@ -447,6 +456,8 @@ void SSaPCollisionManager::collide(CollisionCallBackBase* callback) const {

//==============================================================================
void SSaPCollisionManager::distance(DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SSaPCollisionManager::distance(DistanceCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -462,6 +473,9 @@ void SSaPCollisionManager::distance(DistanceCallBackBase* callback) const {
//==============================================================================
void SSaPCollisionManager::collide(BroadPhaseCollisionManager* other_manager_,
CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SSaPCollisionManager::collide(BroadPhaseCollisionManager*, "
"CollisionCallBackBase*)");
callback->init();
SSaPCollisionManager* other_manager =
static_cast<SSaPCollisionManager*>(other_manager_);
Expand All @@ -487,6 +501,9 @@ void SSaPCollisionManager::collide(BroadPhaseCollisionManager* other_manager_,
//==============================================================================
void SSaPCollisionManager::distance(BroadPhaseCollisionManager* other_manager_,
DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SSaPCollisionManager::distance(BroadPhaseCollisionManager*, "
"DistanceCallBackBase*)");
callback->init();
SSaPCollisionManager* other_manager =
static_cast<SSaPCollisionManager*>(other_manager_);
Expand Down
17 changes: 17 additions & 0 deletions src/broadphase/broadphase_SaP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
/** @author Jia Pan */

#include "coal/broadphase/broadphase_SaP.h"
#include "coal/tracy.hh"

namespace coal {

Expand Down Expand Up @@ -575,6 +576,9 @@ void SaPCollisionManager::removeFromOverlapPairs(const SaPPair& p) {
//==============================================================================
void SaPCollisionManager::collide(CollisionObject* obj,
CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SaPCollisionManager::collide(CollisionObject*, "
"CollisionCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand Down Expand Up @@ -676,6 +680,9 @@ bool SaPCollisionManager::distance_(CollisionObject* obj,
//==============================================================================
void SaPCollisionManager::distance(CollisionObject* obj,
DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SaPCollisionManager::distance(CollisionObject*, "
"DistanceCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -686,6 +693,8 @@ void SaPCollisionManager::distance(CollisionObject* obj,

//==============================================================================
void SaPCollisionManager::collide(CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SaPCollisionManager::collide(CollisionCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -700,6 +709,8 @@ void SaPCollisionManager::collide(CollisionCallBackBase* callback) const {

//==============================================================================
void SaPCollisionManager::distance(DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SaPCollisionManager::distance(DistanceCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -719,6 +730,9 @@ void SaPCollisionManager::distance(DistanceCallBackBase* callback) const {
//==============================================================================
void SaPCollisionManager::collide(BroadPhaseCollisionManager* other_manager_,
CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SaPCollisionManager::collide(BroadPhaseCollisionManager*, "
"CollisionCallBackBase*)");
callback->init();
SaPCollisionManager* other_manager =
static_cast<SaPCollisionManager*>(other_manager_);
Expand Down Expand Up @@ -746,6 +760,9 @@ void SaPCollisionManager::collide(BroadPhaseCollisionManager* other_manager_,
//==============================================================================
void SaPCollisionManager::distance(BroadPhaseCollisionManager* other_manager_,
DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::SaPCollisionManager::distance(BroadPhaseCollisionManager*, "
"DistanceCallBackBase*)");
callback->init();
SaPCollisionManager* other_manager =
static_cast<SaPCollisionManager*>(other_manager_);
Expand Down
17 changes: 17 additions & 0 deletions src/broadphase/broadphase_bruteforce.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

#include <iterator>
#include <algorithm>
#include "coal/tracy.hh"

namespace coal {

Expand Down Expand Up @@ -86,6 +87,9 @@ void NaiveCollisionManager::getObjects(
//==============================================================================
void NaiveCollisionManager::collide(CollisionObject* obj,
CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::NaiveCollisionManager::collide(CollisionObject*, "
"CollisionCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -97,6 +101,9 @@ void NaiveCollisionManager::collide(CollisionObject* obj,
//==============================================================================
void NaiveCollisionManager::distance(CollisionObject* obj,
DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::NaiveCollisionManager::distance(CollisionObject*, "
"DistanceCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -110,6 +117,8 @@ void NaiveCollisionManager::distance(CollisionObject* obj,

//==============================================================================
void NaiveCollisionManager::collide(CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::NaiveCollisionManager::collide(CollisionCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -128,6 +137,8 @@ void NaiveCollisionManager::collide(CollisionCallBackBase* callback) const {

//==============================================================================
void NaiveCollisionManager::distance(DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::NaiveCollisionManager::distance(CollisionCallBackBase*)");
callback->init();
if (size() == 0) return;

Expand All @@ -148,6 +159,9 @@ void NaiveCollisionManager::distance(DistanceCallBackBase* callback) const {
//==============================================================================
void NaiveCollisionManager::collide(BroadPhaseCollisionManager* other_manager_,
CollisionCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::NaiveCollisionManager::collide(BroadPhaseCollisionManager*, "
"CollisionCallBackBase*)");
callback->init();
NaiveCollisionManager* other_manager =
static_cast<NaiveCollisionManager*>(other_manager_);
Expand All @@ -171,6 +185,9 @@ void NaiveCollisionManager::collide(BroadPhaseCollisionManager* other_manager_,
//==============================================================================
void NaiveCollisionManager::distance(BroadPhaseCollisionManager* other_manager_,
DistanceCallBackBase* callback) const {
COAL_TRACY_ZONE_SCOPED_N(
"coal::NaiveCollisionManager::distance(BroadPhaseCollisionManager*, "
"DistanceCallBackBase*)");
callback->init();
NaiveCollisionManager* other_manager =
static_cast<NaiveCollisionManager*>(other_manager_);
Expand Down
Loading