| // SPDX-FileCopyrightText: The Eigen Authors | |
| // SPDX-License-Identifier: MPL-2.0 | |
| #include <benchmark/benchmark.h> | |
| #include <Eigen/Core> | |
| #include <Eigen/Geometry> | |
| using namespace Eigen; | |
| template <typename Scalar, int Mode, int VSize> | |
| static void BM_TransformVec(benchmark::State& state) { | |
| typedef Transform<Scalar, 3, Mode> Trans; | |
| typedef Matrix<Scalar, VSize, 1> Vec; | |
| Trans t; | |
| t.setIdentity(); | |
| Vec v; | |
| v.setRandom(); | |
| for (auto _ : state) { | |
| v = t * v; | |
| benchmark::DoNotOptimize(v.data()); | |
| } | |
| } | |
| template <typename Scalar, int Mode> | |
| static void BM_TransformTransform(benchmark::State& state) { | |
| typedef Transform<Scalar, 3, Mode> Trans; | |
| Trans t1, t2; | |
| t1.setIdentity(); | |
| t2.setIdentity(); | |
| for (auto _ : state) { | |
| t2 = Trans(t1 * t2); | |
| benchmark::DoNotOptimize(t2.data()); | |
| } | |
| } | |
| BENCHMARK(BM_TransformVec<float, Isometry, 3>); | |
| BENCHMARK(BM_TransformVec<float, Isometry, 4>); | |
| BENCHMARK(BM_TransformVec<float, Projective, 4>); | |
| BENCHMARK(BM_TransformVec<double, Isometry, 3>); | |
| BENCHMARK(BM_TransformVec<double, Isometry, 4>); | |
| BENCHMARK(BM_TransformVec<double, Projective, 4>); | |
| BENCHMARK(BM_TransformTransform<float, Isometry>); | |
| BENCHMARK(BM_TransformTransform<float, Projective>); | |
| BENCHMARK(BM_TransformTransform<double, Isometry>); | |
| BENCHMARK(BM_TransformTransform<double, Projective>); |