1 #include <benchmark/benchmark.h>
11 using namespace test_suite;
17 int main(
int argc,
char** argv)
20 std::make_shared<tesseract_collision_fcl::FCLDiscreteBVHManager>();
26 std::vector<int> num_links = { 0, 2, 4, 8, 16, 32, 64, 128, 256, 512 };
28 for (
const auto& num_link : num_links)
30 std::string
name =
"BM_CLONE_" + checker->getName() +
"_ACTIVE_OBJ_" + std::to_string(num_link);
31 benchmark::RegisterBenchmark(
name.c_str(),
35 Eigen::Isometry3d::Identity(),
37 Eigen::Isometry3d::Identity(),
41 ->Unit(benchmark::TimeUnit::kMicrosecond);
52 std::vector<tesseract_geometry::GeometryType> geometry_types = {
53 GeometryType::BOX, GeometryType::CYLINDER, GeometryType::CONE, GeometryType::SPHERE, GeometryType::CAPSULE
57 geometry_types.pop_back();
58 geometry_types.pop_back();
59 geometry_types.pop_back();
62 std::vector<ContactTestType> test_types = {
68 for (
const auto& test_type : test_types)
71 for (
const auto& type1 : geometry_types)
73 for (
const auto& type2 : geometry_types)
75 auto tf = Eigen::Isometry3d::Identity();
76 std::string
name =
"BM_CONTACT_TEST_0_" + checker->getName() +
"_" +
78 GeometryTypeStrings[
static_cast<std::size_t
>(type1)] +
"_" +
79 GeometryTypeStrings[
static_cast<std::size_t
>(type2)];
80 benchmark::RegisterBenchmark(
name.c_str(),
84 Eigen::Isometry3d::Identity(),
86 tf.translate(Eigen::Vector3d(0.0001, 0, 0)),
89 ->Unit(benchmark::TimeUnit::kMicrosecond);
96 for (
const auto& test_type : test_types)
99 for (
const auto& type1 : geometry_types)
101 for (
const auto& type2 : geometry_types)
103 auto tf = Eigen::Isometry3d::Identity();
104 std::string
name =
"BM_CONTACT_TEST_1_" + checker->getName() +
"_" +
106 GeometryTypeStrings[
static_cast<std::size_t
>(type1)] +
"_" +
107 GeometryTypeStrings[
static_cast<std::size_t
>(type2)];
108 benchmark::RegisterBenchmark(
name.c_str(),
109 BM_CONTACT_TEST_FUNC,
112 Eigen::Isometry3d::Identity(),
114 tf.translate(Eigen::Vector3d(0.6, 0, 0)),
117 ->Unit(benchmark::TimeUnit::kMicrosecond);
125 for (
const auto& test_type : test_types)
128 for (
const auto& type1 : geometry_types)
130 for (
const auto& type2 : geometry_types)
132 auto tf = Eigen::Isometry3d::Identity();
133 std::string
name =
"BM_CONTACT_TEST_2_" + checker->getName() +
"_" +
135 GeometryTypeStrings[
static_cast<std::size_t
>(type1)] +
"_" +
136 GeometryTypeStrings[
static_cast<std::size_t
>(type2)];
137 benchmark::RegisterBenchmark(
name.c_str(),
138 BM_CONTACT_TEST_FUNC,
141 Eigen::Isometry3d::Identity(),
143 tf.translate(Eigen::Vector3d(2, 0, 0)),
146 ->Unit(benchmark::TimeUnit::kMicrosecond);
157 benchmark::RegisterBenchmark(
"BM_SELECT_RANDOM_OBJECT", BM_SELECT_RANDOM_OBJECT_FUNC, 256)
159 ->Unit(benchmark::TimeUnit::kNanosecond);
162 std::function<void(benchmark::State&,
DiscreteBenchmarkInfo,
int)> BM_SET_COLLISION_OBJECTS_TRANSFORM_SINGLE_FUNC =
164 std::vector<int> num_links = { 2, 4, 8, 16, 32, 64, 128, 256, 512 };
166 for (
const auto& num_link : num_links)
168 auto tf = Eigen::Isometry3d::Identity();
170 "BM_SET_COLLISION_OBJECTS_TRANSFORM_SINGLE_" + checker->getName() +
"_ACTIVE_OBJ_" + std::to_string(num_link);
171 benchmark::RegisterBenchmark(
name.c_str(),
172 BM_SET_COLLISION_OBJECTS_TRANSFORM_SINGLE_FUNC,
175 Eigen::Isometry3d::Identity(),
177 tf.translate(Eigen::Vector3d(2, 0, 0)),
181 ->Unit(benchmark::TimeUnit::kNanosecond);
185 std::function<void(benchmark::State&,
DiscreteBenchmarkInfo,
int)> BM_SET_COLLISION_OBJECTS_TRANSFORM_VECTOR_FUNC =
187 std::vector<std::size_t> num_links = { 2, 4, 8, 16, 32, 64, 128, 256, 512 };
189 for (
const auto& num_link : num_links)
191 auto tf = Eigen::Isometry3d::Identity();
193 "BM_SET_COLLISION_OBJECTS_TRANSFORM_VECTOR_" + checker->getName() +
"_ACTIVE_OBJ_" + std::to_string(num_link);
194 benchmark::RegisterBenchmark(
name.c_str(),
195 BM_SET_COLLISION_OBJECTS_TRANSFORM_VECTOR_FUNC,
198 Eigen::Isometry3d::Identity(),
200 tf.translate(Eigen::Vector3d(2, 0, 0)),
204 ->Unit(benchmark::TimeUnit::kNanosecond);
208 std::function<void(benchmark::State&,
DiscreteBenchmarkInfo,
int)> BM_SET_COLLISION_OBJECTS_TRANSFORM_MAP_FUNC =
210 std::vector<std::size_t> num_links = { 2, 4, 8, 16, 32, 64, 128, 256, 512 };
212 for (
const auto& num_link : num_links)
214 auto tf = Eigen::Isometry3d::Identity();
216 "BM_SET_COLLISION_OBJECTS_TRANSFORM_MAP_" + checker->getName() +
"_ACTIVE_OBJ_" + std::to_string(num_link);
217 benchmark::RegisterBenchmark(
name.c_str(),
218 BM_SET_COLLISION_OBJECTS_TRANSFORM_MAP_FUNC,
221 Eigen::Isometry3d::Identity(),
223 tf.translate(Eigen::Vector3d(2, 0, 0)),
227 ->Unit(benchmark::TimeUnit::kNanosecond);
233 if (std::string(BENCHMARK_ARGS) !=
"CI_ONLY")
237 std::vector<int> edge_sizes = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
239 for (
const auto& edge_size : edge_sizes)
243 "BM_LARGE_DATASET_MULTILINK_" + checker->getName() +
"_CONVEX_MESH_EDGE_SIZE_" + std::to_string(edge_size);
244 benchmark::RegisterBenchmark(
name.c_str(),
245 BM_LARGE_DATASET_MULTILINK_FUNC,
250 ->Unit(benchmark::TimeUnit::kNanosecond);
252 for (
const auto& edge_size : edge_sizes)
256 "BM_LARGE_DATASET_MULTILINK_" + checker->getName() +
"_PRIMATIVE_EDGE_SIZE_" + std::to_string(edge_size);
257 benchmark::RegisterBenchmark(
260 ->Unit(benchmark::TimeUnit::kNanosecond);
265 edge_sizes.pop_back();
266 edge_sizes.pop_back();
268 for (
const auto& edge_size : edge_sizes)
272 "BM_LARGE_DATASET_MULTILINK_" + checker->getName() +
"_DETAILED_MESH_EDGE_SIZE_" + std::to_string(edge_size);
273 benchmark::RegisterBenchmark(
276 ->Unit(benchmark::TimeUnit::kMillisecond);
281 for (
const auto& edge_size : edge_sizes)
285 "BM_LARGE_DATASET_SINGLELINK_" + checker->getName() +
"_CONVEX_MESH_EDGE_SIZE_" + std::to_string(edge_size);
286 benchmark::RegisterBenchmark(
name.c_str(),
287 BM_LARGE_DATASET_SINGLELINK_FUNC,
292 ->Unit(benchmark::TimeUnit::kNanosecond);
294 for (
const auto& edge_size : edge_sizes)
298 "BM_LARGE_DATASET_SINGLELINK_" + checker->getName() +
"_PRIMATIVE_EDGE_SIZE_" + std::to_string(edge_size);
299 benchmark::RegisterBenchmark(
302 ->Unit(benchmark::TimeUnit::kNanosecond);
304 for (
const auto& edge_size : edge_sizes)
308 "BM_LARGE_DATASET_SINGLELINK_" + checker->getName() +
"_DETAILED_MESH_EDGE_SIZE_" + std::to_string(edge_size);
309 benchmark::RegisterBenchmark(
312 ->Unit(benchmark::TimeUnit::kMillisecond);
316 benchmark::Initialize(&argc, argv);
317 benchmark::RunSpecifiedBenchmarks();