178b4b5ccSLouis Dionne //===----------------------------------------------------------------------===// 278b4b5ccSLouis Dionne // 378b4b5ccSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 478b4b5ccSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 578b4b5ccSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 678b4b5ccSLouis Dionne // 778b4b5ccSLouis Dionne //===----------------------------------------------------------------------===// 878b4b5ccSLouis Dionne 9*e236a52aSLouis Dionne // UNSUPPORTED: c++03 10*e236a52aSLouis Dionne 1178b4b5ccSLouis Dionne #include <memory> 1278b4b5ccSLouis Dionne 1378b4b5ccSLouis Dionne #include "benchmark/benchmark.h" 1478b4b5ccSLouis Dionne 1578b4b5ccSLouis Dionne static void BM_SharedPtrCreateDestroy(benchmark::State& st) { 1678b4b5ccSLouis Dionne while (st.KeepRunning()) { 1778b4b5ccSLouis Dionne auto sp = std::make_shared<int>(42); 1878b4b5ccSLouis Dionne benchmark::DoNotOptimize(sp.get()); 1978b4b5ccSLouis Dionne } 2078b4b5ccSLouis Dionne } 2178b4b5ccSLouis Dionne BENCHMARK(BM_SharedPtrCreateDestroy); 2278b4b5ccSLouis Dionne 2378b4b5ccSLouis Dionne static void BM_SharedPtrIncDecRef(benchmark::State& st) { 2478b4b5ccSLouis Dionne auto sp = std::make_shared<int>(42); 2578b4b5ccSLouis Dionne benchmark::DoNotOptimize(sp.get()); 2678b4b5ccSLouis Dionne while (st.KeepRunning()) { 2778b4b5ccSLouis Dionne std::shared_ptr<int> sp2(sp); 2878b4b5ccSLouis Dionne benchmark::ClobberMemory(); 2978b4b5ccSLouis Dionne } 3078b4b5ccSLouis Dionne } 3178b4b5ccSLouis Dionne BENCHMARK(BM_SharedPtrIncDecRef); 3278b4b5ccSLouis Dionne 3378b4b5ccSLouis Dionne static void BM_WeakPtrIncDecRef(benchmark::State& st) { 3478b4b5ccSLouis Dionne auto sp = std::make_shared<int>(42); 3578b4b5ccSLouis Dionne benchmark::DoNotOptimize(sp.get()); 3678b4b5ccSLouis Dionne while (st.KeepRunning()) { 3778b4b5ccSLouis Dionne std::weak_ptr<int> wp(sp); 3878b4b5ccSLouis Dionne benchmark::ClobberMemory(); 3978b4b5ccSLouis Dionne } 4078b4b5ccSLouis Dionne } 4178b4b5ccSLouis Dionne BENCHMARK(BM_WeakPtrIncDecRef); 4278b4b5ccSLouis Dionne 4378b4b5ccSLouis Dionne BENCHMARK_MAIN(); 44