diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-10-30 22:53:00 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-10-30 22:53:00 +0000 |
commit | 3aa5478e212ced5f0f6ee61359d7ebbe167bbb10 (patch) | |
tree | 937e689fbd5defd9f8c4c43df7754c5acbcaab4a /libcxx/benchmarks/filesystem.bench.cpp | |
parent | 2d4fbb7b0c3a628f66bdbfee21d736372f025ffc (diff) | |
download | bcm5719-llvm-3aa5478e212ced5f0f6ee61359d7ebbe167bbb10.tar.gz bcm5719-llvm-3aa5478e212ced5f0f6ee61359d7ebbe167bbb10.zip |
Add start of filesystem benchmarks
llvm-svn: 285524
Diffstat (limited to 'libcxx/benchmarks/filesystem.bench.cpp')
-rw-r--r-- | libcxx/benchmarks/filesystem.bench.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/libcxx/benchmarks/filesystem.bench.cpp b/libcxx/benchmarks/filesystem.bench.cpp new file mode 100644 index 00000000000..8dacbe6644e --- /dev/null +++ b/libcxx/benchmarks/filesystem.bench.cpp @@ -0,0 +1,90 @@ +#include <experimental/filesystem> + +#include "benchmark/benchmark_api.h" +#include "GenerateInput.hpp" + +namespace fs = std::experimental::filesystem; + +static const size_t TestNumInputs = 1024; + + +template <class GenInputs> +void BM_PathConstructString(benchmark::State &st, GenInputs gen) { + using namespace fs; + const auto in = gen(st.range(0)); + path PP; + for (auto& Part : in) + PP /= Part; + benchmark::DoNotOptimize(PP.native().data()); + while (st.KeepRunning()) { + const path P(PP.native()); + benchmark::DoNotOptimize(P.native().data()); + } +} +BENCHMARK_CAPTURE(BM_PathConstructString, iterate_elements, + getRandomStringInputs)->Arg(TestNumInputs); + + +template <class GenInputs> +void BM_PathIterateMultipleTimes(benchmark::State &st, GenInputs gen) { + using namespace fs; + const auto in = gen(st.range(0)); + path PP; + for (auto& Part : in) + PP /= Part; + benchmark::DoNotOptimize(PP.native().data()); + while (st.KeepRunning()) { + for (auto &E : PP) { + benchmark::DoNotOptimize(E.native().data()); + } + benchmark::ClobberMemory(); + } +} +BENCHMARK_CAPTURE(BM_PathIterateMultipleTimes, iterate_elements, + getRandomStringInputs)->Arg(TestNumInputs); + + +template <class GenInputs> +void BM_PathIterateOnce(benchmark::State &st, GenInputs gen) { + using namespace fs; + const auto in = gen(st.range(0)); + path PP; + for (auto& Part : in) + PP /= Part; + benchmark::DoNotOptimize(PP.native().data()); + while (st.KeepRunning()) { + const path P = PP.native(); + for (auto &E : P) { + benchmark::DoNotOptimize(E.native().data()); + } + benchmark::ClobberMemory(); + } +} +BENCHMARK_CAPTURE(BM_PathIterateOnce, iterate_elements, + getRandomStringInputs)->Arg(TestNumInputs); + +template <class GenInputs> +void BM_PathIterateOnceBackwards(benchmark::State &st, GenInputs gen) { + using namespace fs; + const auto in = gen(st.range(0)); + path PP; + for (auto& Part : in) + PP /= Part; + benchmark::DoNotOptimize(PP.native().data()); + while (st.KeepRunning()) { + const path P = PP.native(); + const auto B = P.begin(); + auto I = P.end(); + while (I != B) { + --I; + benchmark::DoNotOptimize(*I); + } + benchmark::DoNotOptimize(*I); + } +} +BENCHMARK_CAPTURE(BM_PathIterateOnceBackwards, iterate_elements, + getRandomStringInputs)->Arg(TestNumInputs); + + + +BENCHMARK_MAIN() |