sf-latency: Write a benchmark for RenderEngine

Bug: 193240340
Test: mmma -j frameworks/native/libs/renderengine/bench/
      && adb push out/.../librenderengine_bench
                  /data/.../librenderengine_bench
      && adb shell /data/.../librenderengine_bench

Write a benchmark using Google-Benchmark to track the performance of
RenderEngine.

RenderEngineBench.cpp:
- Contains the benchmarks to run.
- Write a helper function that times calls to RenderEngine::drawLayers.
- Write a single benchmark that times drawing a mock homescreen plus a
  blur layer, using a blur radius used in practice.
  Decode the homescreen into a buffer with CPU support, and then copy it
  to one without, which better represents actual use.
- Use RenderEngineType to determine which subclass to benchmark. The
  only existing benchmark uses SKIA_GL, since we intend to time just
  drawLayers, but future benchmarks will want to time threading aspects
  with SKIA_GL_THREADED, and we may add more RenderEngineTypes in the
  future.

Codec.cpp:
- Write methods for decoding and encoding a buffer.

Flags.cpp:
- Extra flags that can be passed to the executable.
- --save allows encoding the result to a file to verify it looks as
  intended.
- parse --help to describe --save and any future flags specific to
  RenderEngineBench.

RenderEngineBench.h:
- header file for methods used across cpp files. Use a single common
  header since otherwise we would have several small headers.

homescreen.png:
- Mock homescreen to draw in drawLayers

Change-Id: I81a1a8a30a1c20985bbf066d2ba4d5f1fd1f6dc3
diff --git a/libs/renderengine/benchmark/Flags.cpp b/libs/renderengine/benchmark/Flags.cpp
new file mode 100644
index 0000000..c5d5156
--- /dev/null
+++ b/libs/renderengine/benchmark/Flags.cpp
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <log/log.h>
+#include <stdio.h>
+#include <string.h>
+
+namespace {
+bool gSave = false;
+}
+
+namespace renderenginebench {
+
+void parseFlagsForHelp(int argc, char** argv) {
+    for (int i = 0; i < argc; i++) {
+        if (!strcmp(argv[i], "--help")) {
+            printf("RenderEngineBench-specific flags:\n");
+            printf("[--save]: Save the output to the device to confirm drawing result.\n");
+            break;
+        }
+    }
+}
+
+void parseFlags(int argc, char** argv) {
+    for (int i = 0; i < argc; i++) {
+        if (!strcmp(argv[i], "--save")) {
+            gSave = true;
+        }
+    }
+}
+
+bool save() {
+    return gSave;
+}
+} // namespace renderenginebench