1851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej//===----------------------------------------------------------------------===// 2851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej// 3851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej// The LLVM Compiler Infrastructure 4851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej// 5851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej// This file is dual licensed under the MIT and the University of Illinois Open 6851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej// Source Licenses. See LICENSE.TXT for details. 7851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej// 8851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej//===----------------------------------------------------------------------===// 9851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej 10851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej#include <memory> 11851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej 12fd2e3e98c1decf5bc600b5962cbbbe8374b5cd3eEric Fiselier#include "benchmark/benchmark.h" 13851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej 14851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavejstatic void BM_SharedPtrCreateDestroy(benchmark::State& st) { 15851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej while (st.KeepRunning()) { 16851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej auto sp = std::make_shared<int>(42); 17851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej benchmark::DoNotOptimize(sp.get()); 18851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej } 19851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej} 20851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. LavavejBENCHMARK(BM_SharedPtrCreateDestroy); 21851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej 22851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavejstatic void BM_SharedPtrIncDecRef(benchmark::State& st) { 23851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej auto sp = std::make_shared<int>(42); 24851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej benchmark::DoNotOptimize(sp.get()); 25851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej while (st.KeepRunning()) { 26851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej std::shared_ptr<int> sp2(sp); 27851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej benchmark::ClobberMemory(); 28851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej } 29851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej} 30851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. LavavejBENCHMARK(BM_SharedPtrIncDecRef); 31851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej 32851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavejstatic void BM_WeakPtrIncDecRef(benchmark::State& st) { 33851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej auto sp = std::make_shared<int>(42); 34851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej benchmark::DoNotOptimize(sp.get()); 35851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej while (st.KeepRunning()) { 36851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej std::weak_ptr<int> wp(sp); 37851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej benchmark::ClobberMemory(); 38851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej } 39851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej} 40851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. LavavejBENCHMARK(BM_WeakPtrIncDecRef); 41851ea6e01a3960f33a3fae43e1ff08eefb6b4d10Stephan T. Lavavej 42fd2e3e98c1decf5bc600b5962cbbbe8374b5cd3eEric FiselierBENCHMARK_MAIN(); 43