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*4d6fc14bSjoergstatic 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*4d6fc14bSjoergstatic 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*4d6fc14bSjoergstatic 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