summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Lewis <agloo@google.com>2017-06-12 12:33:06 -0700
committerAnders Lewis <agloo@google.com>2017-06-14 17:51:54 -0700
commit1c487e103618b7e4e3480f59375761e94ce80d2a (patch)
tree52a2acc40d89e503ef3c217423f8c2e89604b6c7
parenta99d052801be5618465e5532440711e61f9b89fc (diff)
Add benchmarks for strcpy and strcmp.
Test: Ran benchmarks and verified that runtimes were sensible. Change-Id: I609e3261503a015bfd4982767fef3ce56141aebc
-rw-r--r--benchmarks/string_benchmark.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/benchmarks/string_benchmark.cpp b/benchmarks/string_benchmark.cpp
index e6c65703e..86a7c359f 100644
--- a/benchmarks/string_benchmark.cpp
+++ b/benchmarks/string_benchmark.cpp
@@ -173,3 +173,33 @@ static void BM_string_strcat_half_copy_half_seek(benchmark::State& state) {
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
BENCHMARK(BM_string_strcat_half_copy_half_seek)->AT_COMMON_SIZES;
+
+static void BM_string_strcpy(benchmark::State& state) {
+ const size_t nbytes = state.range(0);
+ std::vector<char> src(nbytes, 'x');
+ std::vector<char> dst(nbytes);
+ src[nbytes - 1] = '\0';
+
+ while (state.KeepRunning()) {
+ strcpy(dst.data(), src.data());
+ }
+
+ state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
+}
+BENCHMARK(BM_string_strcpy)->AT_COMMON_SIZES;
+
+static void BM_string_strcmp(benchmark::State& state) {
+ const size_t nbytes = state.range(0);
+ std::vector<char> s1(nbytes, 'x');
+ std::vector<char> s2(nbytes, 'x');
+ s1[nbytes - 1] = '\0';
+ s2[nbytes - 1] = '\0';
+
+ volatile int c __attribute__((unused));
+ while (state.KeepRunning()) {
+ c = strcmp(s1.data(), s2.data());
+ }
+
+ state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
+}
+BENCHMARK(BM_string_strcmp)->AT_COMMON_SIZES;