xref: /netbsd-src/external/apache2/llvm/dist/libcxx/benchmarks/util_smartptr.bench.cpp (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
1*4d6fc14bSjoerg //===----------------------------------------------------------------------===//
2*4d6fc14bSjoerg //
3*4d6fc14bSjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*4d6fc14bSjoerg // See https://llvm.org/LICENSE.txt for license information.
5*4d6fc14bSjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*4d6fc14bSjoerg //
7*4d6fc14bSjoerg //===----------------------------------------------------------------------===//
8*4d6fc14bSjoerg 
9*4d6fc14bSjoerg #include <memory>
10*4d6fc14bSjoerg 
11*4d6fc14bSjoerg #include "benchmark/benchmark.h"
12*4d6fc14bSjoerg 
BM_SharedPtrCreateDestroy(benchmark::State & st)13*4d6fc14bSjoerg static void BM_SharedPtrCreateDestroy(benchmark::State& st) {
14*4d6fc14bSjoerg   while (st.KeepRunning()) {
15*4d6fc14bSjoerg     auto sp = std::make_shared<int>(42);
16*4d6fc14bSjoerg     benchmark::DoNotOptimize(sp.get());
17*4d6fc14bSjoerg   }
18*4d6fc14bSjoerg }
19*4d6fc14bSjoerg BENCHMARK(BM_SharedPtrCreateDestroy);
20*4d6fc14bSjoerg 
BM_SharedPtrIncDecRef(benchmark::State & st)21*4d6fc14bSjoerg static void BM_SharedPtrIncDecRef(benchmark::State& st) {
22*4d6fc14bSjoerg   auto sp = std::make_shared<int>(42);
23*4d6fc14bSjoerg   benchmark::DoNotOptimize(sp.get());
24*4d6fc14bSjoerg   while (st.KeepRunning()) {
25*4d6fc14bSjoerg     std::shared_ptr<int> sp2(sp);
26*4d6fc14bSjoerg     benchmark::ClobberMemory();
27*4d6fc14bSjoerg   }
28*4d6fc14bSjoerg }
29*4d6fc14bSjoerg BENCHMARK(BM_SharedPtrIncDecRef);
30*4d6fc14bSjoerg 
BM_WeakPtrIncDecRef(benchmark::State & st)31*4d6fc14bSjoerg static void BM_WeakPtrIncDecRef(benchmark::State& st) {
32*4d6fc14bSjoerg   auto sp = std::make_shared<int>(42);
33*4d6fc14bSjoerg   benchmark::DoNotOptimize(sp.get());
34*4d6fc14bSjoerg   while (st.KeepRunning()) {
35*4d6fc14bSjoerg     std::weak_ptr<int> wp(sp);
36*4d6fc14bSjoerg     benchmark::ClobberMemory();
37*4d6fc14bSjoerg   }
38*4d6fc14bSjoerg }
39*4d6fc14bSjoerg BENCHMARK(BM_WeakPtrIncDecRef);
40*4d6fc14bSjoerg 
41*4d6fc14bSjoerg BENCHMARK_MAIN();
42