diff options
Diffstat (limited to 'services/surfaceflinger/BufferQueueLayer.h')
-rw-r--r-- | services/surfaceflinger/BufferQueueLayer.h | 95 |
1 files changed, 48 insertions, 47 deletions
diff --git a/services/surfaceflinger/BufferQueueLayer.h b/services/surfaceflinger/BufferQueueLayer.h index b3b7948935..5ebc22d2af 100644 --- a/services/surfaceflinger/BufferQueueLayer.h +++ b/services/surfaceflinger/BufferQueueLayer.h @@ -22,10 +22,6 @@ namespace android { -namespace frametimeline { -class SurfaceFrame; -} - /* * A new BufferQueue and a new BufferLayerConsumer are created when the * BufferLayer is first referenced. @@ -39,7 +35,10 @@ public: explicit BufferQueueLayer(const LayerCreationArgs&); ~BufferQueueLayer() override; - // Implements Layer. + // ----------------------------------------------------------------------- + // Interface implementation for Layer + // ----------------------------------------------------------------------- +public: const char* getType() const override { return "BufferQueueLayer"; } void onLayerDisplayed(const sp<Fence>& releaseFence) override; @@ -53,15 +52,43 @@ public: int32_t getQueuedFrameCount() const override; - // Returns true if the next buffer should be presented at the expected present time - bool isBufferDue(nsecs_t expectedPresentTime) const override; + bool shouldPresentNow(nsecs_t expectedPresentTime) const override; - // Implements BufferLayer. + // ----------------------------------------------------------------------- + + // ----------------------------------------------------------------------- + // Interface implementation for BufferLayer + // ----------------------------------------------------------------------- +public: bool fenceHasSignaled() const override; bool framePresentTimeIsCurrent(nsecs_t expectedPresentTime) const override; - status_t setDefaultBufferProperties(uint32_t w, uint32_t h, PixelFormat format); - sp<IGraphicBufferProducer> getProducer() const; +private: + uint64_t getFrameNumber(nsecs_t expectedPresentTime) const override; + + bool getAutoRefresh() const override; + bool getSidebandStreamChanged() const override; + + bool latchSidebandStream(bool& recomputeVisibleRegions) override; + void setTransformHint(ui::Transform::RotationFlags displayTransformHint) override; + + bool hasFrameUpdate() const override; + + status_t bindTextureImage() override; + status_t updateTexImage(bool& recomputeVisibleRegions, nsecs_t latchTime, + nsecs_t expectedPresentTime) override; + + status_t updateActiveBuffer() override; + status_t updateFrameNumber(nsecs_t latchTime) override; + + sp<Layer> createClone() override; + + void onFrameAvailable(const BufferItem& item); + void onFrameReplaced(const BufferItem& item); + void onSidebandStreamChanged(); + void onFrameDequeued(const uint64_t bufferId); + void onFrameDetached(const uint64_t bufferId); + void onFrameCancelled(const uint64_t bufferId); protected: void gatherBufferInfo() override; @@ -87,36 +114,19 @@ protected: BufferQueueLayer* mBufferQueueLayer = nullptr; Mutex mMutex; }; + // ----------------------------------------------------------------------- -private: - uint64_t getFrameNumber(nsecs_t expectedPresentTime) const override; - - bool latchSidebandStream(bool& recomputeVisibleRegions) override; - void setTransformHint(ui::Transform::RotationFlags displayTransformHint) override; - - bool hasFrameUpdate() const override; - - status_t updateTexImage(bool& recomputeVisibleRegions, nsecs_t latchTime, - nsecs_t expectedPresentTime) override; - - status_t updateActiveBuffer() override; - status_t updateFrameNumber(nsecs_t latchTime) override; - void setFrameTimelineInfoForBuffer(const FrameTimelineInfo& frameTimelineInfo) override; - - sp<Layer> createClone() override; - - void onFirstRef() override; +public: + status_t setDefaultBufferProperties(uint32_t w, uint32_t h, PixelFormat format); - void onFrameAvailable(const BufferItem& item); - void onFrameReplaced(const BufferItem& item); - void onSidebandStreamChanged(); - void onFrameDequeued(const uint64_t bufferId); - void onFrameDetached(const uint64_t bufferId); - void onFrameCancelled(const uint64_t bufferId); + sp<IGraphicBufferProducer> getProducer() const; +private: // Temporary - Used only for LEGACY camera mode. uint32_t getProducerStickyTransform() const; + void onFirstRef() override; + sp<BufferLayerConsumer> mConsumer; sp<IGraphicBufferProducer> mProducer; @@ -128,25 +138,16 @@ private: // Local copy of the queued contents of the incoming BufferQueue mutable Mutex mQueueItemLock; Condition mQueueItemCondition; - - struct BufferData { - BufferData(BufferItem item, std::shared_ptr<frametimeline::SurfaceFrame> surfaceFrame) - : item(item), surfaceFrame(surfaceFrame) {} - BufferItem item; - std::shared_ptr<frametimeline::SurfaceFrame> surfaceFrame; - }; - std::vector<BufferData> mQueueItems; + Vector<BufferItem> mQueueItems; std::atomic<uint64_t> mLastFrameNumberReceived{0}; + bool mAutoRefresh{false}; + // thread-safe std::atomic<int32_t> mQueuedFrames{0}; + std::atomic<bool> mSidebandStreamChanged{false}; sp<ContentsChangedListener> mContentsChangedListener; - - // The last vsync info received on this layer. This will be used when we get - // a buffer to correlate the buffer with the vsync id. Can only be accessed - // with the SF state lock held. - FrameTimelineInfo mFrameTimelineInfo; }; } // namespace android |