Add new benchmark options.

Add a bunch of extra options to allow greater flexibility for creating
benchmarks. Add a pattern option that can be used to represent any
one buffer or two buffer possibility. This should fully replace the
functionality of microbench.

Add a single option for one buffer benchmarks and two buffer benchmarks
that represents all of the possible options to run a string benchmark.

Add a string test suite that includes all string benchmarks using the
above option.

Test: New unit tests to cover all the new options, and all pass.
Test: Ran new string test suite with a single bionic iteration.
Change-Id: Idb13ea15e44cec626e9f46672ccd648d7ca72ba6
diff --git a/benchmarks/string_benchmark.cpp b/benchmarks/string_benchmark.cpp
index 9635929..38122f2 100644
--- a/benchmarks/string_benchmark.cpp
+++ b/benchmarks/string_benchmark.cpp
@@ -187,6 +187,11 @@
   const size_t src_alignment = state.range(1);
   const size_t dst_alignment = state.range(2);
 
+  // Skip sizes that don't make sense.
+  if ((nbytes / 2) == 0) {
+    return;
+  }
+
   std::vector<char> src;
   std::vector<char> dst;
   char* src_aligned = GetAlignedPtrFilled(&src, src_alignment, nbytes / 2, 'x');