Loading libs/gui/BLASTBufferQueue.cpp +10 −7 Original line number Diff line number Diff line Loading @@ -358,10 +358,8 @@ private: sp<BLASTBufferQueue> mBbq; public: BBQSurface(const sp<IGraphicBufferProducer>& igbp, bool controlledByApp, const sp<BLASTBufferQueue>& bbq) : Surface(igbp, controlledByApp), mBbq(bbq) { } const sp<IBinder>& scHandle, const sp<BLASTBufferQueue>& bbq) : Surface(igbp, controlledByApp, scHandle), mBbq(bbq) {} void allocateBuffers() override { uint32_t reqWidth = mReqWidth ? mReqWidth : mUserWidth; Loading Loading @@ -405,8 +403,13 @@ status_t BLASTBufferQueue::setFrameTimelineVsync(int64_t frameTimelineVsyncId) { .apply(); } sp<Surface> BLASTBufferQueue::getSurface() { return new BBQSurface(mProducer, true, this); sp<Surface> BLASTBufferQueue::getSurface(bool includeSurfaceControlHandle) { std::unique_lock _lock{mMutex}; sp<IBinder> scHandle = nullptr; if (includeSurfaceControlHandle && mSurfaceControl) { scHandle = mSurfaceControl->getHandle(); } return new BBQSurface(mProducer, true, scHandle, this); } } // namespace android libs/gui/Surface.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -63,7 +63,8 @@ bool isInterceptorRegistrationOp(int op) { } // namespace Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp) Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp, const sp<IBinder>& surfaceControlHandle) : mGraphicBufferProducer(bufferProducer), mCrop(Rect::EMPTY_RECT), mBufferAge(0), Loading Loading @@ -111,6 +112,7 @@ Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controll mProducerControlledByApp = controlledByApp; mSwapIntervalZero = false; mMaxBufferCount = NUM_BUFFER_SLOTS; mSurfaceControlHandle = surfaceControlHandle; } Surface::~Surface() { Loading libs/gui/SurfaceComposerClient.cpp +4 −8 Original line number Diff line number Diff line Loading @@ -1628,11 +1628,11 @@ void SurfaceComposerClient::dispose() { sp<SurfaceControl> SurfaceComposerClient::createSurface(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, SurfaceControl* parent, const sp<IBinder>& parentHandle, LayerMetadata metadata, uint32_t* outTransformHint) { sp<SurfaceControl> s; createSurfaceChecked(name, w, h, format, &s, flags, parent, std::move(metadata), createSurfaceChecked(name, w, h, format, &s, flags, parentHandle, std::move(metadata), outTransformHint); return s; } Loading Loading @@ -1669,20 +1669,16 @@ sp<SurfaceControl> SurfaceComposerClient::createWithSurfaceParent(const String8& status_t SurfaceComposerClient::createSurfaceChecked(const String8& name, uint32_t w, uint32_t h, PixelFormat format, sp<SurfaceControl>* outSurface, uint32_t flags, SurfaceControl* parent, LayerMetadata metadata, const sp<IBinder>& parentHandle, LayerMetadata metadata, uint32_t* outTransformHint) { sp<SurfaceControl> sur; status_t err = mStatus; if (mStatus == NO_ERROR) { sp<IBinder> handle; sp<IBinder> parentHandle; sp<IGraphicBufferProducer> gbp; if (parent != nullptr) { parentHandle = parent->getHandle(); } uint32_t transformHint = 0; int32_t id = -1; err = mClient->createSurface(name, w, h, format, flags, parentHandle, std::move(metadata), Loading libs/gui/include/gui/BLASTBufferQueue.h +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public: sp<IGraphicBufferProducer> getIGraphicBufferProducer() const { return mProducer; } sp<Surface> getSurface(); sp<Surface> getSurface(bool includeSurfaceControlHandle); void onBufferFreed(const wp<GraphicBuffer>&/* graphicBuffer*/) override { /* TODO */ } void onFrameReplaced(const BufferItem& item) override {onFrameAvailable(item);} Loading libs/gui/include/gui/Surface.h +15 −3 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ class Surface : public ANativeObjectBase<ANativeWindow, Surface, RefBase> { public: /* * creates a Surface from the given IGraphicBufferProducer (which concrete * implementation is a BufferQueue). Loading @@ -83,9 +82,15 @@ public: * * the controlledByApp flag indicates that this Surface (producer) is * controlled by the application. This flag is used at connect time. * * Pass in the SurfaceControlHandle to store a weak reference to the layer * that the Surface was created from. This handle can be used to create a * child surface without using the IGBP to identify the layer. This is used * for surfaces created by the BlastBufferQueue whose IGBP is created on the * client and cannot be verified in SF. */ explicit Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp = false); explicit Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp = false, const sp<IBinder>& surfaceControlHandle = nullptr); /* getIGraphicBufferProducer() returns the IGraphicBufferProducer this * Surface was created with. Usually it's an error to use the Loading @@ -93,6 +98,8 @@ public: */ sp<IGraphicBufferProducer> getIGraphicBufferProducer() const; sp<IBinder> getSurfaceControlHandle() const { return mSurfaceControlHandle; } /* convenience function to check that the given surface is non NULL as * well as its IGraphicBufferProducer */ static bool isValid(const sp<Surface>& surface) { Loading Loading @@ -541,6 +548,11 @@ protected: bool mEnableFrameTimestamps = false; std::unique_ptr<ProducerFrameEventHistory> mFrameEventHistory; // Reference to the SurfaceFlinger layer that was used to create this // surface. This is only populated when the Surface is created from // a BlastBufferQueue. sp<IBinder> mSurfaceControlHandle; bool mReportRemovedBuffers = false; std::vector<sp<GraphicBuffer>> mRemovedBuffers; int mMaxBufferCount; Loading Loading
libs/gui/BLASTBufferQueue.cpp +10 −7 Original line number Diff line number Diff line Loading @@ -358,10 +358,8 @@ private: sp<BLASTBufferQueue> mBbq; public: BBQSurface(const sp<IGraphicBufferProducer>& igbp, bool controlledByApp, const sp<BLASTBufferQueue>& bbq) : Surface(igbp, controlledByApp), mBbq(bbq) { } const sp<IBinder>& scHandle, const sp<BLASTBufferQueue>& bbq) : Surface(igbp, controlledByApp, scHandle), mBbq(bbq) {} void allocateBuffers() override { uint32_t reqWidth = mReqWidth ? mReqWidth : mUserWidth; Loading Loading @@ -405,8 +403,13 @@ status_t BLASTBufferQueue::setFrameTimelineVsync(int64_t frameTimelineVsyncId) { .apply(); } sp<Surface> BLASTBufferQueue::getSurface() { return new BBQSurface(mProducer, true, this); sp<Surface> BLASTBufferQueue::getSurface(bool includeSurfaceControlHandle) { std::unique_lock _lock{mMutex}; sp<IBinder> scHandle = nullptr; if (includeSurfaceControlHandle && mSurfaceControl) { scHandle = mSurfaceControl->getHandle(); } return new BBQSurface(mProducer, true, scHandle, this); } } // namespace android
libs/gui/Surface.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -63,7 +63,8 @@ bool isInterceptorRegistrationOp(int op) { } // namespace Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp) Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp, const sp<IBinder>& surfaceControlHandle) : mGraphicBufferProducer(bufferProducer), mCrop(Rect::EMPTY_RECT), mBufferAge(0), Loading Loading @@ -111,6 +112,7 @@ Surface::Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controll mProducerControlledByApp = controlledByApp; mSwapIntervalZero = false; mMaxBufferCount = NUM_BUFFER_SLOTS; mSurfaceControlHandle = surfaceControlHandle; } Surface::~Surface() { Loading
libs/gui/SurfaceComposerClient.cpp +4 −8 Original line number Diff line number Diff line Loading @@ -1628,11 +1628,11 @@ void SurfaceComposerClient::dispose() { sp<SurfaceControl> SurfaceComposerClient::createSurface(const String8& name, uint32_t w, uint32_t h, PixelFormat format, uint32_t flags, SurfaceControl* parent, const sp<IBinder>& parentHandle, LayerMetadata metadata, uint32_t* outTransformHint) { sp<SurfaceControl> s; createSurfaceChecked(name, w, h, format, &s, flags, parent, std::move(metadata), createSurfaceChecked(name, w, h, format, &s, flags, parentHandle, std::move(metadata), outTransformHint); return s; } Loading Loading @@ -1669,20 +1669,16 @@ sp<SurfaceControl> SurfaceComposerClient::createWithSurfaceParent(const String8& status_t SurfaceComposerClient::createSurfaceChecked(const String8& name, uint32_t w, uint32_t h, PixelFormat format, sp<SurfaceControl>* outSurface, uint32_t flags, SurfaceControl* parent, LayerMetadata metadata, const sp<IBinder>& parentHandle, LayerMetadata metadata, uint32_t* outTransformHint) { sp<SurfaceControl> sur; status_t err = mStatus; if (mStatus == NO_ERROR) { sp<IBinder> handle; sp<IBinder> parentHandle; sp<IGraphicBufferProducer> gbp; if (parent != nullptr) { parentHandle = parent->getHandle(); } uint32_t transformHint = 0; int32_t id = -1; err = mClient->createSurface(name, w, h, format, flags, parentHandle, std::move(metadata), Loading
libs/gui/include/gui/BLASTBufferQueue.h +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public: sp<IGraphicBufferProducer> getIGraphicBufferProducer() const { return mProducer; } sp<Surface> getSurface(); sp<Surface> getSurface(bool includeSurfaceControlHandle); void onBufferFreed(const wp<GraphicBuffer>&/* graphicBuffer*/) override { /* TODO */ } void onFrameReplaced(const BufferItem& item) override {onFrameAvailable(item);} Loading
libs/gui/include/gui/Surface.h +15 −3 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ class Surface : public ANativeObjectBase<ANativeWindow, Surface, RefBase> { public: /* * creates a Surface from the given IGraphicBufferProducer (which concrete * implementation is a BufferQueue). Loading @@ -83,9 +82,15 @@ public: * * the controlledByApp flag indicates that this Surface (producer) is * controlled by the application. This flag is used at connect time. * * Pass in the SurfaceControlHandle to store a weak reference to the layer * that the Surface was created from. This handle can be used to create a * child surface without using the IGBP to identify the layer. This is used * for surfaces created by the BlastBufferQueue whose IGBP is created on the * client and cannot be verified in SF. */ explicit Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp = false); explicit Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp = false, const sp<IBinder>& surfaceControlHandle = nullptr); /* getIGraphicBufferProducer() returns the IGraphicBufferProducer this * Surface was created with. Usually it's an error to use the Loading @@ -93,6 +98,8 @@ public: */ sp<IGraphicBufferProducer> getIGraphicBufferProducer() const; sp<IBinder> getSurfaceControlHandle() const { return mSurfaceControlHandle; } /* convenience function to check that the given surface is non NULL as * well as its IGraphicBufferProducer */ static bool isValid(const sp<Surface>& surface) { Loading Loading @@ -541,6 +548,11 @@ protected: bool mEnableFrameTimestamps = false; std::unique_ptr<ProducerFrameEventHistory> mFrameEventHistory; // Reference to the SurfaceFlinger layer that was used to create this // surface. This is only populated when the Surface is created from // a BlastBufferQueue. sp<IBinder> mSurfaceControlHandle; bool mReportRemovedBuffers = false; std::vector<sp<GraphicBuffer>> mRemovedBuffers; int mMaxBufferCount; Loading