SF: Abstract out buffer queue creation

Modifies SurfaceFlinger so that the type of the buffer queue
producer/consumer pair produced for framebuffers can be changed at
runtime.

Test: Builds
Bug: None
Change-Id: If108059c43e5c0d03de9645966d9b8eca2b9ed16
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 135bfbe..e0dbfad 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -163,7 +163,7 @@
 }
 
 SurfaceFlinger::SurfaceFlinger()
-    :   BnSurfaceComposer(),
+      : BnSurfaceComposer(),
         mTransactionFlags(0),
         mTransactionPending(false),
         mAnimTransactionPending(false),
@@ -193,8 +193,8 @@
         mHasPoweredOff(false),
         mNumLayers(0),
         mVrFlingerRequestsDisplay(false),
-        mMainThreadId(std::this_thread::get_id())
-{
+        mMainThreadId(std::this_thread::get_id()),
+        mCreateBufferQueue(&BufferQueue::createBufferQueue) {
     ALOGI("SurfaceFlinger is starting");
 
     vsyncPhaseOffsetNs = getInt64< ISurfaceFlingerConfigs,
@@ -2213,7 +2213,7 @@
                 sp<IGraphicBufferProducer> producer;
                 sp<IGraphicBufferProducer> bqProducer;
                 sp<IGraphicBufferConsumer> bqConsumer;
-                BufferQueue::createBufferQueue(&bqProducer, &bqConsumer);
+                mCreateBufferQueue(&bqProducer, &bqConsumer, false);
 
                 int32_t hwcId = -1;
                 if (state.isVirtualDisplay()) {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 08c4a5e..37024ae 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -87,6 +87,8 @@
 class DisplayEventConnection;
 class EventControlThread;
 class EventThread;
+class IGraphicBufferConsumer;
+class IGraphicBufferProducer;
 class InjectVSyncSource;
 class Layer;
 class Surface;
@@ -822,6 +824,12 @@
     float mSaturation = 1.0f;
     bool mForceNativeColorMode = false;
 
+    using CreateBufferQueueFunction =
+            std::function<void(sp<IGraphicBufferProducer>* /* outProducer */,
+                               sp<IGraphicBufferConsumer>* /* outConsumer */,
+                               bool /* consumerIsSurfaceFlinger */)>;
+    CreateBufferQueueFunction mCreateBufferQueue;
+
     SurfaceFlingerBE mBE;
 };
 }; // namespace android