[RenderEngine] Add Android.bp to RenderEngine

Besides make RenderEngine as static library, this patch also intentionally
moves all header files to public includable directory. The header files will be
structured better in the progress of stripping off GL implementation out of
public interfaces.

BUG: 112585051
Test: Build, flash and do display validation
Change-Id: Ife6e27896a2ccee6a23781a43ebc508e2587eb71
diff --git a/services/surfaceflinger/Android.bp b/services/surfaceflinger/Android.bp
index ee69b83..05535a5 100644
--- a/services/surfaceflinger/Android.bp
+++ b/services/surfaceflinger/Android.bp
@@ -55,6 +55,7 @@
         "libvulkan",
     ],
     static_libs: [
+        "librenderengine",
         "libserviceutils",
         "libtrace_proto",
         "libvkjson",
@@ -66,6 +67,7 @@
         "android.hardware.graphics.composer@2.2-command-buffer",
     ],
     export_static_lib_headers: [
+        "librenderengine",
         "libserviceutils",
     ],
     export_shared_lib_headers: [
@@ -118,16 +120,6 @@
         "LayerVector.cpp",
         "MonitoredProducer.cpp",
         "RenderArea.cpp",
-        "RenderEngine/Description.cpp",
-        "RenderEngine/GLES20RenderEngine.cpp",
-        "RenderEngine/GLExtensions.cpp",
-        "RenderEngine/Image.cpp",
-        "RenderEngine/Mesh.cpp",
-        "RenderEngine/Program.cpp",
-        "RenderEngine/ProgramCache.cpp",
-        "RenderEngine/RenderEngine.cpp",
-        "RenderEngine/Surface.cpp",
-        "RenderEngine/Texture.cpp",
         "Scheduler/DispSync.cpp",
         "Scheduler/DispSyncSource.cpp",
         "Scheduler/EventControlThread.cpp",
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index f48aa47..d0ccabb 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -24,7 +24,7 @@
 #include "DisplayDevice.h"
 #include "LayerRejecter.h"
 
-#include "RenderEngine/RenderEngine.h"
+#include <renderengine/RenderEngine.h>
 
 #include <gui/BufferItem.h>
 #include <gui/BufferQueue.h>
diff --git a/services/surfaceflinger/BufferLayer.h b/services/surfaceflinger/BufferLayer.h
index 0b641b7..3319a98 100644
--- a/services/surfaceflinger/BufferLayer.h
+++ b/services/surfaceflinger/BufferLayer.h
@@ -24,13 +24,12 @@
 #include "FrameTracker.h"
 #include "LayerVector.h"
 #include "MonitoredProducer.h"
-#include "RenderEngine/Mesh.h"
-#include "RenderEngine/Texture.h"
 #include "SurfaceFlinger.h"
 
 #include <gui/ISurfaceComposerClient.h>
 #include <gui/LayerState.h>
-
+#include <renderengine/Mesh.h>
+#include <renderengine/Texture.h>
 #include <ui/FrameStats.h>
 #include <ui/GraphicBuffer.h>
 #include <ui/PixelFormat.h>
diff --git a/services/surfaceflinger/BufferLayerConsumer.cpp b/services/surfaceflinger/BufferLayerConsumer.cpp
index 9096d4c..aa8f4e1 100644
--- a/services/surfaceflinger/BufferLayerConsumer.cpp
+++ b/services/surfaceflinger/BufferLayerConsumer.cpp
@@ -20,10 +20,7 @@
 //#define LOG_NDEBUG 0
 
 #include "BufferLayerConsumer.h"
-
 #include "Layer.h"
-#include "RenderEngine/Image.h"
-#include "RenderEngine/RenderEngine.h"
 #include "Scheduler/DispSync.h"
 
 #include <inttypes.h>
@@ -38,9 +35,9 @@
 #include <gui/GLConsumer.h>
 #include <gui/ISurfaceComposer.h>
 #include <gui/SurfaceComposerClient.h>
-
 #include <private/gui/ComposerService.h>
-
+#include <renderengine/Image.h>
+#include <renderengine/RenderEngine.h>
 #include <utils/Log.h>
 #include <utils/String8.h>
 #include <utils/Trace.h>
diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp
index 369ad89..da9dcfb 100644
--- a/services/surfaceflinger/BufferStateLayer.cpp
+++ b/services/surfaceflinger/BufferStateLayer.cpp
@@ -20,9 +20,9 @@
 #define ATRACE_TAG ATRACE_TAG_GRAPHICS
 
 #include "BufferStateLayer.h"
-#include "RenderEngine/Image.h"
 
 #include <private/gui/SyncFeatures.h>
+#include <renderengine/Image.h>
 
 namespace android {
 
diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h
index e492375..038eb01 100644
--- a/services/surfaceflinger/BufferStateLayer.h
+++ b/services/surfaceflinger/BufferStateLayer.h
@@ -16,13 +16,12 @@
 
 #pragma once
 
-#include "RenderEngine/Image.h"
-#include "RenderEngine/RenderEngine.h"
-
 #include "BufferLayer.h"
 #include "Layer.h"
 
 #include <gui/GLConsumer.h>
+#include <renderengine/Image.h>
+#include <renderengine/RenderEngine.h>
 #include <system/window.h>
 #include <utils/String8.h>
 
diff --git a/services/surfaceflinger/ColorLayer.cpp b/services/surfaceflinger/ColorLayer.cpp
index f8bb94e..c29698b 100644
--- a/services/surfaceflinger/ColorLayer.cpp
+++ b/services/surfaceflinger/ColorLayer.cpp
@@ -22,14 +22,13 @@
 #include <stdlib.h>
 #include <sys/types.h>
 
+#include <renderengine/RenderEngine.h>
+#include <ui/GraphicBuffer.h>
 #include <utils/Errors.h>
 #include <utils/Log.h>
 
-#include <ui/GraphicBuffer.h>
-
 #include "ColorLayer.h"
 #include "DisplayDevice.h"
-#include "RenderEngine/RenderEngine.h"
 #include "SurfaceFlinger.h"
 
 namespace android {
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index 776b84a..0fbd459 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -18,6 +18,8 @@
 #undef LOG_TAG
 #define LOG_TAG "DisplayDevice"
 
+#include "DisplayDevice.h"
+
 #include <array>
 #include <unordered_set>
 
@@ -26,31 +28,24 @@
 #include <string.h>
 #include <math.h>
 
+#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
+#include <configstore/Utils.h>
 #include <cutils/properties.h>
-
-#include <utils/RefBase.h>
-#include <utils/Log.h>
-
+#include <gui/Surface.h>
+#include <hardware/gralloc.h>
+#include <renderengine/RenderEngine.h>
 #include <ui/DebugUtils.h>
 #include <ui/DisplayInfo.h>
 #include <ui/PixelFormat.h>
-
-#include <gui/Surface.h>
-
-#include <hardware/gralloc.h>
+#include <utils/RefBase.h>
+#include <utils/Log.h>
 
 #include "DisplayHardware/DisplaySurface.h"
 #include "DisplayHardware/HWComposer.h"
 #include "DisplayHardware/HWC2.h"
-#include "RenderEngine/RenderEngine.h"
-
-#include "DisplayDevice.h"
 #include "SurfaceFlinger.h"
 #include "Layer.h"
 
-#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
-#include <configstore/Utils.h>
-
 namespace android {
 
 // retrieve triple buffer setting from configstore
diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h
index bcb2976..da0931e 100644
--- a/services/surfaceflinger/DisplayDevice.h
+++ b/services/surfaceflinger/DisplayDevice.h
@@ -27,6 +27,7 @@
 #include <hardware/hwcomposer_defs.h>
 #include <gui/ISurfaceComposer.h>
 #include <math/mat4.h>
+#include <renderengine/Surface.h>
 #include <ui/GraphicTypes.h>
 #include <ui/HdrCapabilities.h>
 #include <ui/Region.h>
@@ -37,7 +38,6 @@
 #include <utils/Timers.h>
 
 #include "RenderArea.h"
-#include "RenderEngine/Surface.h"
 
 struct ANativeWindow;
 
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 1a2566e..4f0b212 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -53,7 +53,7 @@
 
 #include "DisplayHardware/HWComposer.h"
 
-#include "RenderEngine/RenderEngine.h"
+#include <renderengine/RenderEngine.h>
 
 #include <mutex>
 #include "LayerProtoHelper.h"
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index 56ed765..443f410 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -19,23 +19,26 @@
 
 #include <sys/types.h>
 
-#include <utils/RefBase.h>
-#include <utils/String8.h>
-#include <utils/Timers.h>
-
+#include <gui/BufferQueue.h>
+#include <gui/ISurfaceComposerClient.h>
+#include <gui/LayerState.h>
+#include <layerproto/LayerProtoHeader.h>
+#include <math/vec4.h>
+#include <renderengine/Mesh.h>
+#include <renderengine/Texture.h>
 #include <ui/FloatRect.h>
 #include <ui/FrameStats.h>
 #include <ui/GraphicBuffer.h>
 #include <ui/PixelFormat.h>
 #include <ui/Region.h>
 #include <ui/Transform.h>
+#include <utils/RefBase.h>
+#include <utils/String8.h>
+#include <utils/Timers.h>
 
-#include <gui/BufferQueue.h>
-#include <gui/ISurfaceComposerClient.h>
-#include <gui/LayerState.h>
-
-#include <list>
 #include <cstdint>
+#include <list>
+#include <vector>
 
 #include "Client.h"
 #include "FrameTracker.h"
@@ -45,15 +48,9 @@
 #include "SurfaceFlinger.h"
 #include "TimeStats/TimeStats.h"
 
-#include <layerproto/LayerProtoHeader.h>
 #include "DisplayHardware/HWComposer.h"
 #include "DisplayHardware/HWComposerBufferCache.h"
 #include "RenderArea.h"
-#include "RenderEngine/Mesh.h"
-#include "RenderEngine/Texture.h"
-
-#include <math/vec4.h>
-#include <vector>
 
 using namespace android::surfaceflinger;
 
diff --git a/services/surfaceflinger/LayerBE.cpp b/services/surfaceflinger/LayerBE.cpp
index 6381a44..3e04f26 100644
--- a/services/surfaceflinger/LayerBE.cpp
+++ b/services/surfaceflinger/LayerBE.cpp
@@ -20,9 +20,9 @@
 #define ATRACE_TAG ATRACE_TAG_GRAPHICS
 
 #include "Layer.h"
-#include "RenderEngine/RenderEngine.h"
 
-#include "android-base/stringprintf.h"
+#include <android-base/stringprintf.h>
+#include <renderengine/RenderEngine.h>
 
 #include <string>
 
diff --git a/services/surfaceflinger/LayerBE.h b/services/surfaceflinger/LayerBE.h
index 86d4ac4..e5110b7 100644
--- a/services/surfaceflinger/LayerBE.h
+++ b/services/surfaceflinger/LayerBE.h
@@ -19,14 +19,13 @@
 #include <stdint.h>
 #include <sys/types.h>
 
+#include <renderengine/Mesh.h>
+#include <renderengine/Texture.h>
 #include <ui/Region.h>
 
-#include "SurfaceFlinger.h"
-
 #include "DisplayHardware/HWComposer.h"
 #include "DisplayHardware/HWComposerBufferCache.h"
-#include "RenderEngine/Mesh.h"
-#include "RenderEngine/Texture.h"
+#include "SurfaceFlinger.h"
 
 namespace android {
 
diff --git a/services/surfaceflinger/RenderEngine/Android.bp b/services/surfaceflinger/RenderEngine/Android.bp
new file mode 100644
index 0000000..13752f2
--- /dev/null
+++ b/services/surfaceflinger/RenderEngine/Android.bp
@@ -0,0 +1,75 @@
+// TODO(b/112585051) Add to VNDK once moved to libs/
+cc_defaults {
+    name: "renderengine_defaults",
+    cflags: [
+        "-DLOG_TAG=\"RenderEngine\"",
+        "-Wall",
+        "-Werror",
+        "-Wthread-safety",
+        "-Wunused",
+        "-Wunreachable-code",
+    ],
+    cppflags: ["-std=c++1z"],
+}
+
+cc_defaults {
+    name: "librenderengine_defaults",
+    defaults: ["renderengine_defaults"],
+    cflags: [
+        "-DGL_GLEXT_PROTOTYPES",
+        "-DEGL_EGLEXT_PROTOTYPES",
+    ],
+    shared_libs: [
+        "android.hardware.configstore-utils",
+        "android.hardware.configstore@1.0",
+        "android.hardware.configstore@1.1",
+        "android.hardware.configstore@1.2",
+        "libcutils",
+        "libEGL",
+        "libGLESv1_CM",
+        "libGLESv2",
+        "libgui",
+        "liblog",
+        "libui",
+        "libutils",
+    ],
+    local_include_dirs: ["include"],
+    export_include_dirs: ["include"],
+}
+
+filegroup {
+    name: "librenderengine_sources",
+    srcs: [
+        "Description.cpp",
+        "GLES20RenderEngine.cpp",
+        "GLExtensions.cpp",
+        "Image.cpp",
+        "Mesh.cpp",
+        "Program.cpp",
+        "ProgramCache.cpp",
+        "RenderEngine.cpp",
+        "Surface.cpp",
+        "Texture.cpp",
+    ],
+}
+
+cc_library_static {
+    name: "librenderengine",
+    defaults: ["librenderengine_defaults"],
+    double_loadable: true,
+
+    clang: true,
+    cflags: [
+        "-fvisibility=hidden",
+        "-Werror=format",
+    ],
+    cppflags: [
+        "-fwhole-program-vtables", // requires ThinLTO
+    ],
+    srcs: [
+        ":librenderengine_sources",
+    ],
+    lto: {
+        thin: true,
+    },
+}
diff --git a/services/surfaceflinger/RenderEngine/Description.cpp b/services/surfaceflinger/RenderEngine/Description.cpp
index d4a2bb4..d5f2103 100644
--- a/services/surfaceflinger/RenderEngine/Description.cpp
+++ b/services/surfaceflinger/RenderEngine/Description.cpp
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
+#include <renderengine/Description.h>
+
 #include <stdint.h>
 #include <string.h>
 
 #include <utils/TypeHelpers.h>
 
-#include "Description.h"
-
 namespace android {
 
 void Description::setPremultipliedAlpha(bool premultipliedAlpha) {
diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
index 136d12f..617ba76 100644
--- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
@@ -19,26 +19,24 @@
 #define LOG_TAG "RenderEngine"
 #define ATRACE_TAG ATRACE_TAG_GRAPHICS
 
+#include <renderengine/GLES20RenderEngine.h>
+
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
-
+#include <renderengine/Description.h>
+#include <renderengine/Mesh.h>
+#include <renderengine/Program.h>
+#include <renderengine/ProgramCache.h>
+#include <renderengine/Texture.h>
 #include <ui/ColorSpace.h>
 #include <ui/DebugUtils.h>
 #include <ui/Rect.h>
-
 #include <utils/String8.h>
 #include <utils/Trace.h>
 
 #include <cutils/compiler.h>
 #include <math.h>
 
-#include "Description.h"
-#include "GLES20RenderEngine.h"
-#include "Mesh.h"
-#include "Program.h"
-#include "ProgramCache.h"
-#include "Texture.h"
-
 #include <fstream>
 #include <sstream>
 
diff --git a/services/surfaceflinger/RenderEngine/GLExtensions.cpp b/services/surfaceflinger/RenderEngine/GLExtensions.cpp
index 23480b4..b4fb2a1 100644
--- a/services/surfaceflinger/RenderEngine/GLExtensions.cpp
+++ b/services/surfaceflinger/RenderEngine/GLExtensions.cpp
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
+#include <renderengine/GLExtensions.h>
+
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "GLExtensions.h"
-
 namespace android {
 // ---------------------------------------------------------------------------
 
diff --git a/services/surfaceflinger/RenderEngine/Image.cpp b/services/surfaceflinger/RenderEngine/Image.cpp
index 6e0a880..ee140eb 100644
--- a/services/surfaceflinger/RenderEngine/Image.cpp
+++ b/services/surfaceflinger/RenderEngine/Image.cpp
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-#include "Image.h"
+#include <renderengine/Image.h>
 
 #include <vector>
 
 #include <log/log.h>
 
-#include "GLExtensions.h"
-#include "RenderEngine.h"
+#include <renderengine/GLExtensions.h>
+#include <renderengine/RenderEngine.h>
 
 namespace android {
 namespace RE {
diff --git a/services/surfaceflinger/RenderEngine/Mesh.cpp b/services/surfaceflinger/RenderEngine/Mesh.cpp
index 6a62b1d..43852eb 100644
--- a/services/surfaceflinger/RenderEngine/Mesh.cpp
+++ b/services/surfaceflinger/RenderEngine/Mesh.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include "Mesh.h"
+#include <renderengine/Mesh.h>
 
 #include <utils/Log.h>
 
diff --git a/services/surfaceflinger/RenderEngine/Program.cpp b/services/surfaceflinger/RenderEngine/Program.cpp
index fe536f0..87371dc 100644
--- a/services/surfaceflinger/RenderEngine/Program.cpp
+++ b/services/surfaceflinger/RenderEngine/Program.cpp
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
+#include <renderengine/Program.h>
+
 #include <stdint.h>
 
 #include <log/log.h>
-#include <utils/String8.h>
-
 #include <math/mat4.h>
-#include "Description.h"
-#include "Program.h"
-#include "ProgramCache.h"
+#include <renderengine/Description.h>
+#include <renderengine/ProgramCache.h>
+#include <utils/String8.h>
 
 namespace android {
 
diff --git a/services/surfaceflinger/RenderEngine/ProgramCache.cpp b/services/surfaceflinger/RenderEngine/ProgramCache.cpp
index a1d0561..b7101e0 100644
--- a/services/surfaceflinger/RenderEngine/ProgramCache.cpp
+++ b/services/surfaceflinger/RenderEngine/ProgramCache.cpp
@@ -16,16 +16,15 @@
 
 #define ATRACE_TAG ATRACE_TAG_GRAPHICS
 
+#include <renderengine/ProgramCache.h>
+
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
-
+#include <renderengine/Description.h>
+#include <renderengine/Program.h>
 #include <utils/String8.h>
 #include <utils/Trace.h>
 
-#include "Description.h"
-#include "Program.h"
-#include "ProgramCache.h"
-
 namespace android {
 // -----------------------------------------------------------------------------------------------
 
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.cpp b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
index e5dbe2f..594b1ed 100644
--- a/services/surfaceflinger/RenderEngine/RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
@@ -14,22 +14,21 @@
  * limitations under the License.
  */
 
-#include <log/log.h>
-#include <ui/Rect.h>
-#include <ui/Region.h>
-
-#include "GLES20RenderEngine.h"
-#include "GLExtensions.h"
-#include "Image.h"
-#include "Mesh.h"
-#include "RenderEngine.h"
-
-#include <SurfaceFlinger.h>
-#include <vector>
+#include <renderengine/RenderEngine.h>
 
 #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
 #include <configstore/Utils.h>
+#include <log/log.h>
 #include <private/gui/SyncFeatures.h>
+#include <renderengine/GLES20RenderEngine.h>
+#include <renderengine/GLExtensions.h>
+#include <renderengine/Image.h>
+#include <renderengine/Mesh.h>
+#include <renderengine/Surface.h>
+#include <ui/Rect.h>
+#include <ui/Region.h>
+
+#include <vector>
 
 using namespace android::hardware::configstore;
 using namespace android::hardware::configstore::V1_0;
diff --git a/services/surfaceflinger/RenderEngine/Surface.cpp b/services/surfaceflinger/RenderEngine/Surface.cpp
index 3bf42fb..3e98ab4 100644
--- a/services/surfaceflinger/RenderEngine/Surface.cpp
+++ b/services/surfaceflinger/RenderEngine/Surface.cpp
@@ -14,11 +14,10 @@
  * limitations under the License.
  */
 
-#include "Surface.h"
-
-#include "RenderEngine.h"
+#include <renderengine/Surface.h>
 
 #include <log/log.h>
+#include <renderengine/RenderEngine.h>
 #include <ui/PixelFormat.h>
 
 namespace android {
diff --git a/services/surfaceflinger/RenderEngine/Texture.cpp b/services/surfaceflinger/RenderEngine/Texture.cpp
index 351430f..c07ba08 100644
--- a/services/surfaceflinger/RenderEngine/Texture.cpp
+++ b/services/surfaceflinger/RenderEngine/Texture.cpp
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-#include <string.h>
+#include <renderengine/Texture.h>
 
-#include "Texture.h"
+#include <string.h>
 
 namespace android {
 
diff --git a/services/surfaceflinger/RenderEngine/Description.h b/services/surfaceflinger/RenderEngine/include/renderengine/Description.h
similarity index 98%
rename from services/surfaceflinger/RenderEngine/Description.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/Description.h
index 6ebb340..9bc7e1c 100644
--- a/services/surfaceflinger/RenderEngine/Description.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/Description.h
@@ -15,7 +15,7 @@
  */
 
 #include <GLES2/gl2.h>
-#include "Texture.h"
+#include <renderengine/Texture.h>
 
 #ifndef SF_RENDER_ENGINE_DESCRIPTION_H_
 #define SF_RENDER_ENGINE_DESCRIPTION_H_
diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h b/services/surfaceflinger/RenderEngine/include/renderengine/GLES20RenderEngine.h
similarity index 96%
rename from services/surfaceflinger/RenderEngine/GLES20RenderEngine.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/GLES20RenderEngine.h
index d8cb73b..0e9efdb 100644
--- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/GLES20RenderEngine.h
@@ -21,10 +21,9 @@
 #include <sys/types.h>
 
 #include <GLES2/gl2.h>
-
-#include "Description.h"
-#include "ProgramCache.h"
-#include "RenderEngine.h"
+#include <renderengine/Description.h>
+#include <renderengine/ProgramCache.h>
+#include <renderengine/RenderEngine.h>
 
 // ---------------------------------------------------------------------------
 namespace android {
diff --git a/services/surfaceflinger/RenderEngine/GLExtensions.h b/services/surfaceflinger/RenderEngine/include/renderengine/GLExtensions.h
similarity index 99%
rename from services/surfaceflinger/RenderEngine/GLExtensions.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/GLExtensions.h
index a6a5053..1ff0d24 100644
--- a/services/surfaceflinger/RenderEngine/GLExtensions.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/GLExtensions.h
@@ -20,15 +20,15 @@
 #include <stdint.h>
 #include <sys/types.h>
 
-#include <utils/Singleton.h>
-#include <utils/SortedVector.h>
-#include <utils/String8.h>
-
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 #include <GLES/gl.h>
 #include <GLES/glext.h>
 
+#include <utils/Singleton.h>
+#include <utils/SortedVector.h>
+#include <utils/String8.h>
+
 namespace android {
 // ---------------------------------------------------------------------------
 
diff --git a/services/surfaceflinger/RenderEngine/Image.h b/services/surfaceflinger/RenderEngine/include/renderengine/Image.h
similarity index 100%
rename from services/surfaceflinger/RenderEngine/Image.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/Image.h
diff --git a/services/surfaceflinger/RenderEngine/Mesh.h b/services/surfaceflinger/RenderEngine/include/renderengine/Mesh.h
similarity index 100%
rename from services/surfaceflinger/RenderEngine/Mesh.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/Mesh.h
diff --git a/services/surfaceflinger/RenderEngine/Program.h b/services/surfaceflinger/RenderEngine/include/renderengine/Program.h
similarity index 96%
rename from services/surfaceflinger/RenderEngine/Program.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/Program.h
index ae796c5..5e621cb 100644
--- a/services/surfaceflinger/RenderEngine/Program.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/Program.h
@@ -20,9 +20,8 @@
 #include <stdint.h>
 
 #include <GLES2/gl2.h>
-
-#include "Description.h"
-#include "ProgramCache.h"
+#include <renderengine/Description.h>
+#include <renderengine/ProgramCache.h>
 
 namespace android {
 
diff --git a/services/surfaceflinger/RenderEngine/ProgramCache.h b/services/surfaceflinger/RenderEngine/include/renderengine/ProgramCache.h
similarity index 99%
rename from services/surfaceflinger/RenderEngine/ProgramCache.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/ProgramCache.h
index 424633e..a5bee45 100644
--- a/services/surfaceflinger/RenderEngine/ProgramCache.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/ProgramCache.h
@@ -18,13 +18,11 @@
 #define SF_RENDER_ENGINE_PROGRAMCACHE_H
 
 #include <GLES2/gl2.h>
-
+#include <renderengine/Description.h>
 #include <utils/KeyedVector.h>
 #include <utils/Singleton.h>
 #include <utils/TypeHelpers.h>
 
-#include "Description.h"
-
 namespace android {
 
 class Description;
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.h b/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
similarity index 100%
rename from services/surfaceflinger/RenderEngine/RenderEngine.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
diff --git a/services/surfaceflinger/RenderEngine/Surface.h b/services/surfaceflinger/RenderEngine/include/renderengine/Surface.h
similarity index 100%
rename from services/surfaceflinger/RenderEngine/Surface.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/Surface.h
diff --git a/services/surfaceflinger/RenderEngine/Texture.h b/services/surfaceflinger/RenderEngine/include/renderengine/Texture.h
similarity index 100%
rename from services/surfaceflinger/RenderEngine/Texture.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/Texture.h
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index dbf2f30..9378756 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -47,7 +47,7 @@
 #include <gui/IDisplayEventConnection.h>
 #include <gui/LayerDebugInfo.h>
 #include <gui/Surface.h>
-
+#include <renderengine/RenderEngine.h>
 #include <ui/GraphicBufferAllocator.h>
 #include <ui/PixelFormat.h>
 #include <ui/UiConfig.h>
@@ -82,7 +82,6 @@
 #include "DisplayHardware/HWComposer.h"
 #include "DisplayHardware/VirtualDisplaySurface.h"
 #include "Effects/Daltonizer.h"
-#include "RenderEngine/RenderEngine.h"
 #include "Scheduler/DispSync.h"
 #include "Scheduler/DispSyncSource.h"
 #include "Scheduler/EventControlThread.h"
diff --git a/services/surfaceflinger/tests/fakehwc/Android.bp b/services/surfaceflinger/tests/fakehwc/Android.bp
index 6ad1b87..a5b522e 100644
--- a/services/surfaceflinger/tests/fakehwc/Android.bp
+++ b/services/surfaceflinger/tests/fakehwc/Android.bp
@@ -30,8 +30,9 @@
         "libutils",
     ],
     static_libs: [
+        "libgmock",
+        "librenderengine",
         "libtrace_proto",
-        "libgmock"
     ],
     header_libs: [
         "android.hardware.graphics.composer@2.1-command-buffer",
diff --git a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h
index 36f74b6..b907c49 100644
--- a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h
+++ b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h
@@ -18,11 +18,11 @@
 
 #include <gmock/gmock.h>
 
-#include "RenderEngine/Image.h"
-#include "RenderEngine/Mesh.h"
-#include "RenderEngine/RenderEngine.h"
-#include "RenderEngine/Surface.h"
-#include "RenderEngine/Texture.h"
+#include <renderengine/Image.h>
+#include <renderengine/Mesh.h>
+#include <renderengine/RenderEngine.h>
+#include <renderengine/Surface.h>
+#include <renderengine/Texture.h>
 
 namespace android {
 namespace RE {