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