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