diff options
author | Mitch Phillips <31459023+hctim@users.noreply.github.com> | 2021-05-13 03:00:27 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-05-13 03:00:27 +0000 |
commit | 2bb3f935c4ad76c250586bacff55fd48d0e4c993 (patch) | |
tree | 6adf2c969f3f544947f40a18067cddd520e183ef | |
parent | f9b21ae7ee9dcd2fdecf7eb0a11f1d67067cd73e (diff) | |
parent | 683b3a0c1657c588bccd6b226d87edcb94765643 (diff) | |
download | scudo-2bb3f935c4ad76c250586bacff55fd48d0e4c993.tar.gz |
[scudo] [GWP-ASan] Add GWP-ASan variant of scudo benchmarks. am: 6583baa3f2 am: d79b4bb599 am: 73261a4b3c am: 683b3a0c16
Original change: https://android-review.googlesource.com/c/platform/external/scudo/+/1705746
Change-Id: I83a66cd4fc35a4f610e7c6d34cea17a4733f5853
-rw-r--r-- | standalone/benchmarks/malloc_benchmark.cpp | 14 | ||||
-rw-r--r-- | standalone/combined.h | 4 |
2 files changed, 13 insertions, 5 deletions
diff --git a/standalone/benchmarks/malloc_benchmark.cpp b/standalone/benchmarks/malloc_benchmark.cpp index ce48dc02f7a..661fff45a8d 100644 --- a/standalone/benchmarks/malloc_benchmark.cpp +++ b/standalone/benchmarks/malloc_benchmark.cpp @@ -13,15 +13,22 @@ #include "benchmark/benchmark.h" #include <memory> +#include <vector> + +void *CurrentAllocator; +template <typename Config> void PostInitCallback() { + reinterpret_cast<scudo::Allocator<Config> *>(CurrentAllocator)->initGwpAsan(); +} template <typename Config> static void BM_malloc_free(benchmark::State &State) { - using AllocatorT = scudo::Allocator<Config>; + using AllocatorT = scudo::Allocator<Config, PostInitCallback<Config>>; auto Deleter = [](AllocatorT *A) { A->unmapTestOnly(); delete A; }; std::unique_ptr<AllocatorT, decltype(Deleter)> Allocator(new AllocatorT, Deleter); + CurrentAllocator = Allocator.get(); Allocator->reset(); const size_t NBytes = State.range(0); @@ -55,18 +62,19 @@ BENCHMARK_TEMPLATE(BM_malloc_free, scudo::FuchsiaConfig) template <typename Config> static void BM_malloc_free_loop(benchmark::State &State) { - using AllocatorT = scudo::Allocator<Config>; + using AllocatorT = scudo::Allocator<Config, PostInitCallback<Config>>; auto Deleter = [](AllocatorT *A) { A->unmapTestOnly(); delete A; }; std::unique_ptr<AllocatorT, decltype(Deleter)> Allocator(new AllocatorT, Deleter); + CurrentAllocator = Allocator.get(); Allocator->reset(); const size_t NumIters = State.range(0); size_t PageSize = scudo::getPageSizeCached(); - void *Ptrs[NumIters]; + std::vector<void *> Ptrs(NumIters); for (auto _ : State) { size_t SizeLog2 = 0; diff --git a/standalone/combined.h b/standalone/combined.h index 146408a26bf..03a85ec3310 100644 --- a/standalone/combined.h +++ b/standalone/combined.h @@ -51,8 +51,7 @@ public: typedef typename Params::template TSDRegistryT<ThisT> TSDRegistryT; void callPostInitCallback() { - static pthread_once_t OnceControl = PTHREAD_ONCE_INIT; - pthread_once(&OnceControl, PostInitCallback); + pthread_once(&PostInitNonce, PostInitCallback); } struct QuarantineCallback { @@ -952,6 +951,7 @@ private: SecondaryT Secondary; QuarantineT Quarantine; TSDRegistryT TSDRegistry; + pthread_once_t PostInitNonce = PTHREAD_ONCE_INIT; #ifdef GWP_ASAN_HOOKS gwp_asan::GuardedPoolAllocator GuardedAlloc; |