diff options
Diffstat (limited to 'services/surfaceflinger/BufferQueueLayer.h')
| -rw-r--r-- | services/surfaceflinger/BufferQueueLayer.h | 95 |
1 files changed, 47 insertions, 48 deletions
diff --git a/services/surfaceflinger/BufferQueueLayer.h b/services/surfaceflinger/BufferQueueLayer.h index 5ebc22d2af..b3b7948935 100644 --- a/services/surfaceflinger/BufferQueueLayer.h +++ b/services/surfaceflinger/BufferQueueLayer.h @@ -22,6 +22,10 @@ namespace android { +namespace frametimeline { +class SurfaceFrame; +} + /* * A new BufferQueue and a new BufferLayerConsumer are created when the * BufferLayer is first referenced. @@ -35,10 +39,7 @@ public: explicit BufferQueueLayer(const LayerCreationArgs&); ~BufferQueueLayer() override; - // ----------------------------------------------------------------------- - // Interface implementation for Layer - // ----------------------------------------------------------------------- -public: + // Implements Layer. const char* getType() const override { return "BufferQueueLayer"; } void onLayerDisplayed(const sp<Fence>& releaseFence) override; @@ -52,43 +53,15 @@ public: int32_t getQueuedFrameCount() const override; - bool shouldPresentNow(nsecs_t expectedPresentTime) const override; + // Returns true if the next buffer should be presented at the expected present time + bool isBufferDue(nsecs_t expectedPresentTime) const override; - // ----------------------------------------------------------------------- - - // ----------------------------------------------------------------------- - // Interface implementation for BufferLayer - // ----------------------------------------------------------------------- -public: + // Implements BufferLayer. bool fenceHasSignaled() const override; bool framePresentTimeIsCurrent(nsecs_t expectedPresentTime) const override; -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); + status_t setDefaultBufferProperties(uint32_t w, uint32_t h, PixelFormat format); + sp<IGraphicBufferProducer> getProducer() const; protected: void gatherBufferInfo() override; @@ -114,19 +87,36 @@ protected: BufferQueueLayer* mBufferQueueLayer = nullptr; Mutex mMutex; }; - // ----------------------------------------------------------------------- -public: - status_t setDefaultBufferProperties(uint32_t w, uint32_t h, PixelFormat format); +private: + uint64_t getFrameNumber(nsecs_t expectedPresentTime) const override; - sp<IGraphicBufferProducer> getProducer() const; + bool latchSidebandStream(bool& recomputeVisibleRegions) override; + void setTransformHint(ui::Transform::RotationFlags displayTransformHint) override; -private: - // Temporary - Used only for LEGACY camera mode. - uint32_t getProducerStickyTransform() const; + 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; + 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); + + // Temporary - Used only for LEGACY camera mode. + uint32_t getProducerStickyTransform() const; + sp<BufferLayerConsumer> mConsumer; sp<IGraphicBufferProducer> mProducer; @@ -138,16 +128,25 @@ private: // Local copy of the queued contents of the incoming BufferQueue mutable Mutex mQueueItemLock; Condition mQueueItemCondition; - Vector<BufferItem> mQueueItems; - std::atomic<uint64_t> mLastFrameNumberReceived{0}; - bool mAutoRefresh{false}; + 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; + std::atomic<uint64_t> mLastFrameNumberReceived{0}; // 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 |