Loading services/surfaceflinger/DisplayHardware/FramebufferSurface.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -31,10 +31,11 @@ #include <utils/String8.h> #include <log/log.h> #include <hardware/hardware.h> #include <com_android_graphics_libgui_flags.h> #include <gui/BufferItem.h> #include <gui/BufferQueue.h> #include <gui/Surface.h> #include <hardware/hardware.h> #include <ui/DebugUtils.h> #include <ui/GraphicBuffer.h> Loading @@ -48,10 +49,18 @@ namespace android { using ui::Dataspace; #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) FramebufferSurface::FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferProducer>& producer, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize) : ConsumerBase(producer, consumer), #else FramebufferSurface::FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize) : ConsumerBase(consumer), #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mDisplayId(displayId), mMaxSize(maxSize), mCurrentBufferSlot(-1), Loading services/surfaceflinger/DisplayHardware/FramebufferSurface.h +8 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <stdint.h> #include <sys/types.h> #include <com_android_graphics_libgui_flags.h> #include <compositionengine/DisplaySurface.h> #include <gui/BufferQueue.h> #include <gui/ConsumerBase.h> Loading @@ -40,9 +41,16 @@ class HWComposer; class FramebufferSurface : public ConsumerBase, public compositionengine::DisplaySurface { public: #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferProducer>& producer, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize); #else FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) virtual status_t beginFrame(bool mustRecompose); virtual status_t prepareFrame(CompositionType compositionType); Loading services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <cinttypes> #include <com_android_graphics_libgui_flags.h> #include <ftl/enum.h> #include <ftl/flags.h> #include <gui/BufferItem.h> Loading Loading @@ -51,7 +52,11 @@ VirtualDisplaySurface::VirtualDisplaySurface(HWComposer& hwc, VirtualDisplayId d const sp<IGraphicBufferProducer>& bqProducer, const sp<IGraphicBufferConsumer>& bqConsumer, const std::string& name) #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) : ConsumerBase(bqProducer, bqConsumer), #else : ConsumerBase(bqConsumer), #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mHwc(hwc), mDisplayId(displayId), mDisplayName(name), Loading services/surfaceflinger/SurfaceFlinger.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/PermissionCache.h> #include <com_android_graphics_libgui_flags.h> #include <com_android_graphics_surfaceflinger_flags.h> #include <common/FlagManager.h> #include <common/trace.h> Loading Loading @@ -3728,11 +3729,20 @@ void SurfaceFlinger::processDisplayAdded(const wp<IBinder>& displayToken, state.surface.get()); const auto displayId = PhysicalDisplayId::tryCast(compositionDisplay->getId()); LOG_FATAL_IF(!displayId); #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) const auto frameBufferSurface = sp<FramebufferSurface>::make(getHwComposer(), *displayId, bqProducer, bqConsumer, state.physical->activeMode->getResolution(), ui::Size(maxGraphicsWidth, maxGraphicsHeight)); displaySurface = frameBufferSurface; producer = frameBufferSurface->getSurface()->getIGraphicBufferProducer(); #else displaySurface = sp<FramebufferSurface>::make(getHwComposer(), *displayId, bqConsumer, state.physical->activeMode->getResolution(), ui::Size(maxGraphicsWidth, maxGraphicsHeight)); producer = bqProducer; #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } LOG_FATAL_IF(!displaySurface); Loading services/surfaceflinger/tests/BufferGenerator.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -42,8 +42,13 @@ public: * through saved callback. */ class BufferListener : public ConsumerBase::FrameAvailableListener { public: #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) BufferListener(sp<BufferItemConsumer> consumer, BufferCallback callback) #else BufferListener(sp<IGraphicBufferConsumer> consumer, BufferCallback callback) : mConsumer(consumer), mCallback(callback) {} #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) : mConsumer(consumer), mCallback(callback) { } void onFrameAvailable(const BufferItem& /*item*/) { BufferItem item; Loading @@ -55,7 +60,11 @@ public: } private: #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<BufferItemConsumer> mConsumer; #else sp<IGraphicBufferConsumer> mConsumer; #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) BufferCallback mCallback; }; Loading @@ -63,6 +72,16 @@ public: * queue. */ void initialize(uint32_t width, uint32_t height, android_pixel_format_t format, BufferCallback callback) { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mBufferItemConsumer = sp<BufferItemConsumer>::make(GraphicBuffer::USAGE_HW_TEXTURE); mBufferItemConsumer->setDefaultBufferSize(width, height); mBufferItemConsumer->setDefaultBufferFormat(format); mListener = sp<BufferListener>::make(mBufferItemConsumer, callback); mBufferItemConsumer->setFrameAvailableListener(mListener); mSurface = mBufferItemConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -77,6 +96,7 @@ public: mBufferItemConsumer->setFrameAvailableListener(mListener); mSurface = sp<Surface>::make(producer, true); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } /* Used by Egl manager. The surface is never displayed. */ Loading Loading
services/surfaceflinger/DisplayHardware/FramebufferSurface.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -31,10 +31,11 @@ #include <utils/String8.h> #include <log/log.h> #include <hardware/hardware.h> #include <com_android_graphics_libgui_flags.h> #include <gui/BufferItem.h> #include <gui/BufferQueue.h> #include <gui/Surface.h> #include <hardware/hardware.h> #include <ui/DebugUtils.h> #include <ui/GraphicBuffer.h> Loading @@ -48,10 +49,18 @@ namespace android { using ui::Dataspace; #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) FramebufferSurface::FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferProducer>& producer, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize) : ConsumerBase(producer, consumer), #else FramebufferSurface::FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize) : ConsumerBase(consumer), #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mDisplayId(displayId), mMaxSize(maxSize), mCurrentBufferSlot(-1), Loading
services/surfaceflinger/DisplayHardware/FramebufferSurface.h +8 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <stdint.h> #include <sys/types.h> #include <com_android_graphics_libgui_flags.h> #include <compositionengine/DisplaySurface.h> #include <gui/BufferQueue.h> #include <gui/ConsumerBase.h> Loading @@ -40,9 +41,16 @@ class HWComposer; class FramebufferSurface : public ConsumerBase, public compositionengine::DisplaySurface { public: #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferProducer>& producer, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize); #else FramebufferSurface(HWComposer& hwc, PhysicalDisplayId displayId, const sp<IGraphicBufferConsumer>& consumer, const ui::Size& size, const ui::Size& maxSize); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) virtual status_t beginFrame(bool mustRecompose); virtual status_t prepareFrame(CompositionType compositionType); Loading
services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <cinttypes> #include <com_android_graphics_libgui_flags.h> #include <ftl/enum.h> #include <ftl/flags.h> #include <gui/BufferItem.h> Loading Loading @@ -51,7 +52,11 @@ VirtualDisplaySurface::VirtualDisplaySurface(HWComposer& hwc, VirtualDisplayId d const sp<IGraphicBufferProducer>& bqProducer, const sp<IGraphicBufferConsumer>& bqConsumer, const std::string& name) #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) : ConsumerBase(bqProducer, bqConsumer), #else : ConsumerBase(bqConsumer), #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mHwc(hwc), mDisplayId(displayId), mDisplayName(name), Loading
services/surfaceflinger/SurfaceFlinger.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/PermissionCache.h> #include <com_android_graphics_libgui_flags.h> #include <com_android_graphics_surfaceflinger_flags.h> #include <common/FlagManager.h> #include <common/trace.h> Loading Loading @@ -3728,11 +3729,20 @@ void SurfaceFlinger::processDisplayAdded(const wp<IBinder>& displayToken, state.surface.get()); const auto displayId = PhysicalDisplayId::tryCast(compositionDisplay->getId()); LOG_FATAL_IF(!displayId); #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) const auto frameBufferSurface = sp<FramebufferSurface>::make(getHwComposer(), *displayId, bqProducer, bqConsumer, state.physical->activeMode->getResolution(), ui::Size(maxGraphicsWidth, maxGraphicsHeight)); displaySurface = frameBufferSurface; producer = frameBufferSurface->getSurface()->getIGraphicBufferProducer(); #else displaySurface = sp<FramebufferSurface>::make(getHwComposer(), *displayId, bqConsumer, state.physical->activeMode->getResolution(), ui::Size(maxGraphicsWidth, maxGraphicsHeight)); producer = bqProducer; #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } LOG_FATAL_IF(!displaySurface); Loading
services/surfaceflinger/tests/BufferGenerator.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -42,8 +42,13 @@ public: * through saved callback. */ class BufferListener : public ConsumerBase::FrameAvailableListener { public: #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) BufferListener(sp<BufferItemConsumer> consumer, BufferCallback callback) #else BufferListener(sp<IGraphicBufferConsumer> consumer, BufferCallback callback) : mConsumer(consumer), mCallback(callback) {} #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) : mConsumer(consumer), mCallback(callback) { } void onFrameAvailable(const BufferItem& /*item*/) { BufferItem item; Loading @@ -55,7 +60,11 @@ public: } private: #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<BufferItemConsumer> mConsumer; #else sp<IGraphicBufferConsumer> mConsumer; #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) BufferCallback mCallback; }; Loading @@ -63,6 +72,16 @@ public: * queue. */ void initialize(uint32_t width, uint32_t height, android_pixel_format_t format, BufferCallback callback) { #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mBufferItemConsumer = sp<BufferItemConsumer>::make(GraphicBuffer::USAGE_HW_TEXTURE); mBufferItemConsumer->setDefaultBufferSize(width, height); mBufferItemConsumer->setDefaultBufferFormat(format); mListener = sp<BufferListener>::make(mBufferItemConsumer, callback); mBufferItemConsumer->setFrameAvailableListener(mListener); mSurface = mBufferItemConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -77,6 +96,7 @@ public: mBufferItemConsumer->setFrameAvailableListener(mListener); mSurface = sp<Surface>::make(producer, true); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } /* Used by Egl manager. The surface is never displayed. */ Loading