xref: /llvm-project/libcxx/test/benchmarks/util_smartptr.bench.cpp (revision e236a52a88956968f318fb908c584e5cb80b5b03)
178b4b5ccSLouis Dionne //===----------------------------------------------------------------------===//
278b4b5ccSLouis Dionne //
378b4b5ccSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
478b4b5ccSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
578b4b5ccSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
678b4b5ccSLouis Dionne //
778b4b5ccSLouis Dionne //===----------------------------------------------------------------------===//
878b4b5ccSLouis Dionne 
9*e236a52aSLouis Dionne // UNSUPPORTED: c++03
10*e236a52aSLouis Dionne 
1178b4b5ccSLouis Dionne #include <memory>
1278b4b5ccSLouis Dionne 
1378b4b5ccSLouis Dionne #include "benchmark/benchmark.h"
1478b4b5ccSLouis Dionne 
1578b4b5ccSLouis Dionne static void BM_SharedPtrCreateDestroy(benchmark::State& st) {
1678b4b5ccSLouis Dionne   while (st.KeepRunning()) {
1778b4b5ccSLouis Dionne     auto sp = std::make_shared<int>(42);
1878b4b5ccSLouis Dionne     benchmark::DoNotOptimize(sp.get());
1978b4b5ccSLouis Dionne   }
2078b4b5ccSLouis Dionne }
2178b4b5ccSLouis Dionne BENCHMARK(BM_SharedPtrCreateDestroy);
2278b4b5ccSLouis Dionne 
2378b4b5ccSLouis Dionne static void BM_SharedPtrIncDecRef(benchmark::State& st) {
2478b4b5ccSLouis Dionne   auto sp = std::make_shared<int>(42);
2578b4b5ccSLouis Dionne   benchmark::DoNotOptimize(sp.get());
2678b4b5ccSLouis Dionne   while (st.KeepRunning()) {
2778b4b5ccSLouis Dionne     std::shared_ptr<int> sp2(sp);
2878b4b5ccSLouis Dionne     benchmark::ClobberMemory();
2978b4b5ccSLouis Dionne   }
3078b4b5ccSLouis Dionne }
3178b4b5ccSLouis Dionne BENCHMARK(BM_SharedPtrIncDecRef);
3278b4b5ccSLouis Dionne 
3378b4b5ccSLouis Dionne static void BM_WeakPtrIncDecRef(benchmark::State& st) {
3478b4b5ccSLouis Dionne   auto sp = std::make_shared<int>(42);
3578b4b5ccSLouis Dionne   benchmark::DoNotOptimize(sp.get());
3678b4b5ccSLouis Dionne   while (st.KeepRunning()) {
3778b4b5ccSLouis Dionne     std::weak_ptr<int> wp(sp);
3878b4b5ccSLouis Dionne     benchmark::ClobberMemory();
3978b4b5ccSLouis Dionne   }
4078b4b5ccSLouis Dionne }
4178b4b5ccSLouis Dionne BENCHMARK(BM_WeakPtrIncDecRef);
4278b4b5ccSLouis Dionne 
4378b4b5ccSLouis Dionne BENCHMARK_MAIN();
44