diff options
Diffstat (limited to 'services/surfaceflinger/Layer.h')
-rw-r--r-- | services/surfaceflinger/Layer.h | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 9bc557e917..c234a75693 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -18,6 +18,7 @@ #include <android/gui/DropInputMode.h> #include <android/gui/ISurfaceComposerClient.h> +#include <com_android_graphics_surfaceflinger_flags.h> #include <ftl/small_map.h> #include <gui/BufferQueue.h> #include <gui/LayerState.h> @@ -44,6 +45,7 @@ #include <scheduler/Seamlessness.h> #include <cstdint> +#include <functional> #include <optional> #include <vector> @@ -95,7 +97,7 @@ public: struct State { int32_t sequence; // changes when visible regions can change // Crop is expressed in layer space coordinate. - Rect crop; + FloatRect crop; LayerMetadata metadata; ui::Dataspace dataspace; @@ -172,7 +174,7 @@ public: // be delayed until the resize completes. // Buffer space - bool setCrop(const Rect& crop); + bool setCrop(const FloatRect& crop); bool setTransform(uint32_t /*transform*/); bool setTransformToDisplayInverse(bool /*transformToDisplayInverse*/); @@ -198,7 +200,7 @@ public: Region getVisibleRegion(const DisplayDevice*) const; void updateLastLatchTime(nsecs_t latchtime); - Rect getCrop(const Layer::State& s) const { return s.crop; } + Rect getCrop(const Layer::State& s) const { return Rect(s.crop); } // from graphics API static ui::Dataspace translateDataspace(ui::Dataspace dataspace); @@ -242,6 +244,8 @@ public: sp<Fence> mFence; uint32_t mTransform{0}; ui::Dataspace mDataspace{ui::Dataspace::UNKNOWN}; + std::chrono::steady_clock::time_point mTimeSinceDataspaceUpdate = + std::chrono::steady_clock::time_point::min(); Rect mCrop; PixelFormat mPixelFormat{PIXEL_FORMAT_NONE}; bool mTransformToDisplayInverse{false}; @@ -257,8 +261,6 @@ public: bool fenceHasSignaled() const; void onPreComposition(nsecs_t refreshStartTime); - void onLayerDisplayed(ftl::SharedFuture<FenceResult>, ui::LayerStack layerStack, - std::function<FenceResult(FenceResult)>&& continuation = nullptr); // Tracks mLastClientCompositionFence and gets the callback handle for this layer. sp<CallbackHandle> findCallbackHandle(); @@ -369,7 +371,7 @@ public: // See mPendingBufferTransactions void decrementPendingBufferCount(); - std::atomic<int32_t>* getPendingBufferCounter() { return &mPendingBufferTransactions; } + std::atomic<int32_t>* getPendingBufferCounter() { return &mPendingBuffers; } std::string getPendingBufferCounterName() { return mBlastTransactionName; } void callReleaseBufferCallback(const sp<ITransactionCompletedListener>& listener, const sp<GraphicBuffer>& buffer, uint64_t framenumber, @@ -387,20 +389,6 @@ public: // from the layer. std::vector<ui::LayerStack> mPreviouslyPresentedLayerStacks; - struct FenceAndContinuation { - ftl::SharedFuture<FenceResult> future; - std::function<FenceResult(FenceResult)> continuation; - - ftl::SharedFuture<FenceResult> chain() const { - if (continuation) { - return ftl::Future(future).then(continuation).share(); - } else { - return future; - } - } - }; - std::vector<FenceAndContinuation> mPreviousReleaseFenceAndContinuations; - // Release fences for buffers that have not yet received a release // callback. A release callback may not be given when capturing // screenshots asynchronously. There may be no buffer update for the @@ -447,8 +435,12 @@ protected: uint32_t mTransactionFlags{0}; + // Leverages FrameTimeline to generate FrameStats. Since FrameTimeline already has the data, + // statistical history needs to only be tracked by count of frames. + // TODO: Deprecate the '--latency-clear' and get rid of this. + std::atomic<uint16_t> mFrameStatsHistorySize; // Timestamp history for UIAutomation. Thread safe. - FrameTracker mFrameTracker; + FrameTracker mDeprecatedFrameTracker; // main thread sp<NativeHandle> mSidebandStream; @@ -562,7 +554,7 @@ private: // - If the integer increases, a buffer arrived at the server. // - If the integer decreases in latchBuffer, that buffer was latched // - If the integer decreases in setBuffer, a buffer was dropped - std::atomic<int32_t> mPendingBufferTransactions{0}; + std::atomic<int32_t> mPendingBuffers{0}; // Contains requested position and matrix updates. This will be applied if the client does // not specify a destination frame. @@ -570,6 +562,9 @@ private: std::vector<std::pair<frontend::LayerHierarchy::TraversalPath, sp<LayerFE>>> mLayerFEs; bool mHandleAlive = false; + std::optional<std::reference_wrapper<frametimeline::FrameTimeline>> getTimeline() const { + return *mFlinger->mFrameTimeline; + } }; std::ostream& operator<<(std::ostream& stream, const Layer::FrameRate& rate); |