diff options
Diffstat (limited to 'benchmarks/stdlib_benchmark.cpp')
-rw-r--r-- | benchmarks/stdlib_benchmark.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/benchmarks/stdlib_benchmark.cpp b/benchmarks/stdlib_benchmark.cpp index 61b51fa54..45b953f61 100644 --- a/benchmarks/stdlib_benchmark.cpp +++ b/benchmarks/stdlib_benchmark.cpp @@ -59,6 +59,41 @@ static void BM_stdlib_malloc_free_decay1(benchmark::State& state) { BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_malloc_free_decay1, "AT_COMMON_SIZES"); #endif +static void CallocFree(benchmark::State& state) { + const size_t nbytes = state.range(0); + int pagesize = getpagesize(); + + for (auto _ : state) { + void* ptr; + benchmark::DoNotOptimize(ptr = calloc(1, nbytes)); + MakeAllocationResident(ptr, nbytes, pagesize); + free(ptr); + } + + state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes)); +} + +static void BM_stdlib_calloc_free_default(benchmark::State& state) { +#if defined(__BIONIC__) + // The default is expected to be a zero decay time. + mallopt(M_DECAY_TIME, 0); +#endif + + CallocFree(state); +} +BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_calloc_free_default, "AT_COMMON_SIZES"); + +#if defined(__BIONIC__) +static void BM_stdlib_calloc_free_decay1(benchmark::State& state) { + mallopt(M_DECAY_TIME, 1); + + CallocFree(state); + + mallopt(M_DECAY_TIME, 0); +} +BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_calloc_free_decay1, "AT_COMMON_SIZES"); +#endif + static void MallocMultiple(benchmark::State& state, size_t nbytes, size_t numAllocs) { int pagesize = getpagesize(); void* ptrs[numAllocs]; |