| /* | |
| * Copyright 2022 Rive | |
| */ | |
| #include "bench.hpp" | |
| #include "rive/math/raw_path.hpp" | |
| #include "rive/math/contour_measure.hpp" | |
| #include "rive/math/simd.hpp" | |
| using namespace rive; | |
| static Vec2D randpt() | |
| { | |
| return Vec2D(float(rand()), float(rand())) * 1000 / (float)RAND_MAX; | |
| } | |
| // Measure the speed MetricsPath::computeLength(). | |
| class MeasurePath : public Bench | |
| { | |
| public: | |
| MeasurePath() | |
| { | |
| // Make a random path. | |
| srand(0); | |
| for (int i = 0; i < 1000000; ++i) | |
| { | |
| int r = rand() % 22; | |
| if (r < 3) | |
| { | |
| m_path.line(randpt()); | |
| } | |
| else | |
| { | |
| m_path.cubic(randpt(), randpt(), randpt()); | |
| } | |
| } | |
| } | |
| private: | |
| int run() const override | |
| { | |
| std::swap(m_matrix[4], m_matrix[5]); | |
| RawPath container; | |
| container.addPath(m_path, &m_matrix); | |
| return ContourMeasureIter(&container).next()->length(); | |
| } | |
| mutable Mat2D m_matrix{1, 0, 0, 1, -1, 1}; | |
| mutable RawPath m_path; | |
| }; | |
| REGISTER_BENCH(MeasurePath); |