diff options
| author | 2018-01-17 11:54:43 -0800 | |
|---|---|---|
| committer | 2018-02-16 14:37:30 -0800 | |
| commit | 12eb423785adba54be4c7112e5198a80d563896e (patch) | |
| tree | 8d362e7b926140b8ed28c86470d1c9c83914ed4b | |
| parent | 8c07c3367e2b4117d7e8e3b62919cb2c16ddc546 (diff) | |
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
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 8 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 135bfbefa9..e0dbfaded3 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -163,7 +163,7 @@ SurfaceFlingerBE::SurfaceFlingerBE() } SurfaceFlinger::SurfaceFlinger() - : BnSurfaceComposer(), + : BnSurfaceComposer(), mTransactionFlags(0), mTransactionPending(false), mAnimTransactionPending(false), @@ -193,8 +193,8 @@ SurfaceFlinger::SurfaceFlinger() 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 @@ void SurfaceFlinger::processDisplayChangesLocked() { 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 08c4a5e3b1..37024ae028 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -87,6 +87,8 @@ class ColorLayer; class DisplayEventConnection; class EventControlThread; class EventThread; +class IGraphicBufferConsumer; +class IGraphicBufferProducer; class InjectVSyncSource; class Layer; class Surface; @@ -822,6 +824,12 @@ private: 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 |