| // Copyright 2020 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "include/cppgc/allocation.h" |
| #include "include/cppgc/garbage-collected.h" |
| #include "src/heap/cppgc/globals.h" |
| #include "src/heap/cppgc/heap.h" |
| #include "test/benchmarks/cpp/cppgc/utils.h" |
| #include "third_party/google_benchmark/src/include/benchmark/benchmark.h" |
| |
| namespace cppgc { |
| namespace internal { |
| namespace { |
| |
| using Allocate = testing::BenchmarkWithHeap; |
| |
| class TinyObject final : public cppgc::GarbageCollected<TinyObject> { |
| public: |
| void Trace(cppgc::Visitor*) const {} |
| }; |
| |
| BENCHMARK_F(Allocate, Tiny)(benchmark::State& st) { |
| Heap::NoGCScope no_gc(*Heap::From(&heap())); |
| for (auto _ : st) { |
| benchmark::DoNotOptimize( |
| cppgc::MakeGarbageCollected<TinyObject>(heap().GetAllocationHandle())); |
| } |
| st.SetBytesProcessed(st.iterations() * sizeof(TinyObject)); |
| } |
| |
| class LargeObject final : public GarbageCollected<LargeObject> { |
| public: |
| void Trace(cppgc::Visitor*) const {} |
| char padding[kLargeObjectSizeThreshold + 1]; |
| }; |
| |
| BENCHMARK_F(Allocate, Large)(benchmark::State& st) { |
| Heap::NoGCScope no_gc(*Heap::From(&heap())); |
| for (auto _ : st) { |
| benchmark::DoNotOptimize( |
| cppgc::MakeGarbageCollected<LargeObject>(heap().GetAllocationHandle())); |
| } |
| st.SetBytesProcessed(st.iterations() * sizeof(LargeObject)); |
| } |
| |
| } // namespace |
| } // namespace internal |
| } // namespace cppgc |