blob: a4ee121181fcb37107d9bbe9b22c73964576fe5e [file] [log] [blame]
// 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) {
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