1*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 2*58b9f456SAndroid Build Coastguard Worker // 3*58b9f456SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*58b9f456SAndroid Build Coastguard Worker // 5*58b9f456SAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open 6*58b9f456SAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details. 7*58b9f456SAndroid Build Coastguard Worker // 8*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*58b9f456SAndroid Build Coastguard Worker 10*58b9f456SAndroid Build Coastguard Worker #include <memory> 11*58b9f456SAndroid Build Coastguard Worker 12*58b9f456SAndroid Build Coastguard Worker #include "benchmark/benchmark.h" 13*58b9f456SAndroid Build Coastguard Worker BM_SharedPtrCreateDestroy(benchmark::State & st)14*58b9f456SAndroid Build Coastguard Workerstatic void BM_SharedPtrCreateDestroy(benchmark::State& st) { 15*58b9f456SAndroid Build Coastguard Worker while (st.KeepRunning()) { 16*58b9f456SAndroid Build Coastguard Worker auto sp = std::make_shared<int>(42); 17*58b9f456SAndroid Build Coastguard Worker benchmark::DoNotOptimize(sp.get()); 18*58b9f456SAndroid Build Coastguard Worker } 19*58b9f456SAndroid Build Coastguard Worker } 20*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_SharedPtrCreateDestroy); 21*58b9f456SAndroid Build Coastguard Worker BM_SharedPtrIncDecRef(benchmark::State & st)22*58b9f456SAndroid Build Coastguard Workerstatic void BM_SharedPtrIncDecRef(benchmark::State& st) { 23*58b9f456SAndroid Build Coastguard Worker auto sp = std::make_shared<int>(42); 24*58b9f456SAndroid Build Coastguard Worker benchmark::DoNotOptimize(sp.get()); 25*58b9f456SAndroid Build Coastguard Worker while (st.KeepRunning()) { 26*58b9f456SAndroid Build Coastguard Worker std::shared_ptr<int> sp2(sp); 27*58b9f456SAndroid Build Coastguard Worker benchmark::ClobberMemory(); 28*58b9f456SAndroid Build Coastguard Worker } 29*58b9f456SAndroid Build Coastguard Worker } 30*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_SharedPtrIncDecRef); 31*58b9f456SAndroid Build Coastguard Worker BM_WeakPtrIncDecRef(benchmark::State & st)32*58b9f456SAndroid Build Coastguard Workerstatic void BM_WeakPtrIncDecRef(benchmark::State& st) { 33*58b9f456SAndroid Build Coastguard Worker auto sp = std::make_shared<int>(42); 34*58b9f456SAndroid Build Coastguard Worker benchmark::DoNotOptimize(sp.get()); 35*58b9f456SAndroid Build Coastguard Worker while (st.KeepRunning()) { 36*58b9f456SAndroid Build Coastguard Worker std::weak_ptr<int> wp(sp); 37*58b9f456SAndroid Build Coastguard Worker benchmark::ClobberMemory(); 38*58b9f456SAndroid Build Coastguard Worker } 39*58b9f456SAndroid Build Coastguard Worker } 40*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_WeakPtrIncDecRef); 41*58b9f456SAndroid Build Coastguard Worker 42*58b9f456SAndroid Build Coastguard Worker BENCHMARK_MAIN(); 43