[RenderEngine] Generalize RenderEngine instance creation methods.

Currently we only have GLES20RenderEngine as the only RenderEngine, however, in
the future we may have Vulkan RenderEngine. This patch adds a property to
control the creation of RenderEngine.

BUG: 112585051
Test: Build, flash, run display validation
Change-Id: I546300e8977d079f2760bd182fe53f3170976d56
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.cpp b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
index a63085e..3b54873 100644
--- a/services/surfaceflinger/RenderEngine/RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
@@ -16,28 +16,22 @@
 
 #include <renderengine/RenderEngine.h>
 
-#include <vector>
-
+#include <cutils/properties.h>
 #include <log/log.h>
 #include <private/gui/SyncFeatures.h>
-#include <renderengine/Image.h>
-#include <renderengine/Mesh.h>
-#include <renderengine/Surface.h>
-#include <ui/Rect.h>
-#include <ui/Region.h>
-#include <utils/KeyedVector.h>
 #include "gl/GLES20RenderEngine.h"
-#include "gl/GLExtensions.h"
-#include "gl/ProgramCache.h"
-
-using namespace android::renderengine::gl;
-
-extern "C" EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name);
 
 namespace android {
 namespace renderengine {
 
 std::unique_ptr<impl::RenderEngine> RenderEngine::create(int hwcFormat, uint32_t featureFlags) {
+    char prop[PROPERTY_VALUE_MAX];
+    property_get(PROPERTY_DEBUG_RENDERENGINE_BACKEND, prop, "gles");
+    if (strcmp(prop, "gles") == 0) {
+        ALOGD("RenderEngine GLES Backend");
+        return renderengine::gl::GLES20RenderEngine::create(hwcFormat, featureFlags);
+    }
+    ALOGE("UNKNOWN BackendType: %s, create GLES RenderEngine.", prop);
     return renderengine::gl::GLES20RenderEngine::create(hwcFormat, featureFlags);
 }
 
diff --git a/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.h b/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.h
index 0566e94..2502cb8 100644
--- a/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.h
+++ b/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.h
@@ -63,7 +63,7 @@
     bool waitFence(base::unique_fd fenceFd) override;
     void clearWithColor(float red, float green, float blue, float alpha) override;
     void fillRegionWithColor(const Region& region, uint32_t height, float red, float green,
-                                     float blue, float alpha) override;
+                             float blue, float alpha) override;
     void setScissor(uint32_t left, uint32_t bottom, uint32_t right, uint32_t top) override;
     void disableScissor() override;
     void genTextures(size_t count, uint32_t* names) override;
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h b/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
index eb0ad65..d0ca0d9 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
@@ -21,8 +21,6 @@
 #include <sys/types.h>
 #include <memory>
 
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
 #include <android-base/unique_fd.h>
 #include <math/mat4.h>
 #include <renderengine/Framebuffer.h>
@@ -30,7 +28,10 @@
 #include <ui/GraphicTypes.h>
 #include <ui/Transform.h>
 
-#define EGL_NO_CONFIG ((EGLConfig)0)
+/**
+ * Allows to set RenderEngine backend to GLES (default) or Vulkan (NOT yet supported).
+ */
+#define PROPERTY_DEBUG_RENDERENGINE_BACKEND "debug.renderengine.backend"
 
 struct ANativeWindowBuffer;
 
@@ -95,7 +96,6 @@
     virtual void fillRegionWithColor(const Region& region, uint32_t height, float red, float green,
                                      float blue, float alpha) = 0;
 
-    // common to all GL versions
     virtual void setScissor(uint32_t left, uint32_t bottom, uint32_t right, uint32_t top) = 0;
     virtual void disableScissor() = 0;
     virtual void genTextures(size_t count, uint32_t* names) = 0;