SF: Clean framebuffer cache on hotplug

This CL cleans the framebuffer cache when a hotplug event
for already connected display is processed. This way when we
destruct the DisplayDevice the framebuffers will be completely
deallocated, so they can later be reallocated.

Test: 1. unplug HDMI
      2. adb shell dumpsys SurfaceFlinger | grep FramebufferSurface
         verify only 3 framebuffers are allocated
      3. plug HDMI
      5. adb shell dumpsys SurfaceFlinger | grep FramebufferSurface
         verify only 3 framebuffers are allocated
Test: Using dev SurfaceFlinger backdoor (1036) which injects hotplug:
      adb shell service call SurfaceFlinger 1036 && \
        adb shell dumpsys SurfaceFlinger | grep FramebufferSurface
Bug: 160112047
Bug: 167670568
Change-Id: I96282bec439ebf413dcd5d57f6b884eccef19c5f
diff --git a/libs/renderengine/threaded/RenderEngineThreaded.cpp b/libs/renderengine/threaded/RenderEngineThreaded.cpp
index dc47070..9b79943 100644
--- a/libs/renderengine/threaded/RenderEngineThreaded.cpp
+++ b/libs/renderengine/threaded/RenderEngineThreaded.cpp
@@ -322,6 +322,21 @@
     return resultFuture.get();
 }
 
+void RenderEngineThreaded::cleanFramebufferCache() {
+    std::promise<void> resultPromise;
+    std::future<void> resultFuture = resultPromise.get_future();
+    {
+        std::lock_guard lock(mThreadMutex);
+        mFunctionCalls.push([&resultPromise](renderengine::RenderEngine& instance) {
+            ATRACE_NAME("REThreaded::cleanFramebufferCache");
+            instance.cleanFramebufferCache();
+            resultPromise.set_value();
+        });
+    }
+    mCondition.notify_one();
+    resultFuture.wait();
+}
+
 } // namespace threaded
 } // namespace renderengine
 } // namespace android