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/Android.bp b/libs/renderengine/benchmark/Android.bp
new file mode 100644
index 0000000..5968399
--- /dev/null
+++ b/libs/renderengine/benchmark/Android.bp
@@ -0,0 +1,54 @@
+// 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.
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "frameworks_native_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["frameworks_native_license"],
+}
+
+cc_benchmark {
+    name: "librenderengine_bench",
+    defaults: ["skia_deps", "surfaceflinger_defaults"],
+    srcs: [
+        "main.cpp",
+        "Codec.cpp",
+        "Flags.cpp",
+        "RenderEngineBench.cpp",
+    ],
+    static_libs: [
+        "librenderengine",
+    ],
+    cflags: [
+        "-DLOG_TAG=\"RenderEngineBench\"",
+    ],
+
+    shared_libs: [
+        "libbase",
+        "libcutils",
+        "libjnigraphics",
+        "libgui",
+        "liblog",
+        "libnativewindow",
+        "libprocessgroup",
+        "libsync",
+        "libui",
+        "libutils",
+    ],
+
+    data: [ "resources/*"],
+}