| // Copyright 2018 The Fuchsia 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 <string.h> |
| |
| #include <memory> |
| |
| #include <fbl/string_printf.h> |
| #include <perftest/perftest.h> |
| |
| namespace { |
| |
| // Test performance of memcpy() on a block of the given size. |
| bool MemcpyTest(perftest::RepeatState* state, size_t size) { |
| state->SetBytesProcessedPerRun(size); |
| |
| std::unique_ptr<char[]> src(new char[size]); |
| std::unique_ptr<char[]> dest(new char[size]); |
| // Initialize src so that we are not copying from uninitialized memory. |
| memset(src.get(), 0, size); |
| |
| while (state->KeepRunning()) { |
| memcpy(dest.get(), src.get(), size); |
| // Stop the compiler from optimizing away the memcpy() call. |
| perftest::DoNotOptimize(src.get()); |
| perftest::DoNotOptimize(dest.get()); |
| } |
| return true; |
| } |
| |
| void RegisterTests() { |
| static const size_t kSizesBytes[] = { |
| 1000, |
| 100000, |
| }; |
| for (auto size : kSizesBytes) { |
| auto name = fbl::StringPrintf("Memcpy/%zubytes", size); |
| perftest::RegisterTest(name.c_str(), MemcpyTest, size); |
| } |
| } |
| PERFTEST_CTOR(RegisterTests) |
| |
| } // namespace |