[benchmark] Add a benchmark for our dtoa implementation
Make sure it is faster than std::to_value(). And it is, by ~30% for the normal use case, and much faster when close to the double limits. util::dtoa also offers a much better precision.
This commit is contained in:
Binary file not shown.
66
benchmark/util/dtoa.benchmark.cpp
Normal file
66
benchmark/util/dtoa.benchmark.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#include <benchmark/benchmark.h>
|
||||
|
||||
#include <mbgl/util/dtoa.hpp>
|
||||
|
||||
#include <cfloat>
|
||||
#include <cmath>
|
||||
|
||||
using namespace mbgl;
|
||||
|
||||
static void Util_dtoa(::benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
util::dtoa(0.);
|
||||
util::dtoa(M_E);
|
||||
util::dtoa(M_LOG2E);
|
||||
util::dtoa(M_LOG10E);
|
||||
util::dtoa(M_LN2);
|
||||
util::dtoa(M_LN10);
|
||||
util::dtoa(M_PI);
|
||||
util::dtoa(M_PI_2);
|
||||
util::dtoa(M_PI_4);
|
||||
util::dtoa(M_1_PI);
|
||||
util::dtoa(M_2_PI);
|
||||
util::dtoa(M_2_SQRTPI);
|
||||
util::dtoa(M_SQRT2);
|
||||
util::dtoa(M_SQRT1_2);
|
||||
}
|
||||
}
|
||||
|
||||
static void Util_standardDtoa(::benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
std::to_string(0.);
|
||||
std::to_string(M_E);
|
||||
std::to_string(M_LOG2E);
|
||||
std::to_string(M_LOG10E);
|
||||
std::to_string(M_LN2);
|
||||
std::to_string(M_LN10);
|
||||
std::to_string(M_PI);
|
||||
std::to_string(M_PI_2);
|
||||
std::to_string(M_PI_4);
|
||||
std::to_string(M_1_PI);
|
||||
std::to_string(M_2_PI);
|
||||
std::to_string(M_2_SQRTPI);
|
||||
std::to_string(M_SQRT2);
|
||||
std::to_string(M_SQRT1_2);
|
||||
}
|
||||
}
|
||||
|
||||
static void Util_dtoaLimits(::benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
util::dtoa(DBL_MIN);
|
||||
util::dtoa(DBL_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
static void Util_standardDtoaLimits(::benchmark::State& state) {
|
||||
while (state.KeepRunning()) {
|
||||
std::to_string(DBL_MIN);
|
||||
std::to_string(DBL_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
BENCHMARK(Util_dtoa);
|
||||
BENCHMARK(Util_standardDtoa);
|
||||
|
||||
BENCHMARK(Util_dtoaLimits);
|
||||
BENCHMARK(Util_standardDtoaLimits);
|
||||
@@ -19,4 +19,7 @@ set(MBGL_BENCHMARK_FILES
|
||||
benchmark/src/mbgl/benchmark/benchmark.cpp
|
||||
benchmark/src/mbgl/benchmark/util.cpp
|
||||
benchmark/src/mbgl/benchmark/util.hpp
|
||||
|
||||
# util
|
||||
benchmark/util/dtoa.benchmark.cpp
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user