diff options
| author | 2017-02-17 22:17:35 +0000 | |
|---|---|---|
| committer | 2017-02-17 22:17:36 +0000 | |
| commit | f810b29ebc8564f94ff7fb14f2d13a0f4d111703 (patch) | |
| tree | d99aec6c734c984cfb96779aedc1549646ebc3a5 /include | |
| parent | 873e2eee781f323a8aa0283cab5924fa4cd7ecfe (diff) | |
| parent | 5ea5e5905170f32d5cf45ad35c552d64743892c3 (diff) | |
Merge changes from topic 'GPU_replace_GL'
* changes:
Fix unexpected FrameEvents on BufferQueue reconnect
Add FrameEvents::isValidTimestamp
Change GL references to GPU for getFrameTimestamps.
Clean up FrameTimestamp log messages.
Diffstat (limited to 'include')
| -rw-r--r-- | include/gui/BufferQueue.h | 11 | ||||
| -rw-r--r-- | include/gui/FrameTimestamps.h | 45 | ||||
| -rw-r--r-- | include/gui/IConsumerListener.h | 3 |
3 files changed, 37 insertions, 22 deletions
diff --git a/include/gui/BufferQueue.h b/include/gui/BufferQueue.h index a523cd80bf..c95c535363 100644 --- a/include/gui/BufferQueue.h +++ b/include/gui/BufferQueue.h @@ -62,11 +62,12 @@ public: public: explicit ProxyConsumerListener(const wp<ConsumerListener>& consumerListener); virtual ~ProxyConsumerListener(); - virtual void onFrameAvailable(const BufferItem& item) override; - virtual void onFrameReplaced(const BufferItem& item) override; - virtual void onBuffersReleased() override; - virtual void onSidebandStreamChanged() override; - virtual void addAndGetFrameTimestamps( + void onDisconnect() override; + void onFrameAvailable(const BufferItem& item) override; + void onFrameReplaced(const BufferItem& item) override; + void onBuffersReleased() override; + void onSidebandStreamChanged() override; + void addAndGetFrameTimestamps( const NewFrameEventsEntry* newTimestamps, FrameEventHistoryDelta* outDelta) override; private: diff --git a/include/gui/FrameTimestamps.h b/include/gui/FrameTimestamps.h index 9e1ae9409e..bda3c5cf94 100644 --- a/include/gui/FrameTimestamps.h +++ b/include/gui/FrameTimestamps.h @@ -41,7 +41,7 @@ enum class FrameEvent { ACQUIRE, FIRST_REFRESH_START, LAST_REFRESH_START, - GL_COMPOSITION_DONE, + GPU_COMPOSITION_DONE, DISPLAY_PRESENT, DISPLAY_RETIRE, DEQUEUE_READY, @@ -52,6 +52,16 @@ enum class FrameEvent { // A collection of timestamps corresponding to a single frame. struct FrameEvents { + static constexpr auto EVENT_COUNT = + static_cast<size_t>(FrameEvent::EVENT_COUNT); + static_assert(EVENT_COUNT <= 32, "Event count sanity check failed."); + static constexpr nsecs_t TIMESTAMP_PENDING = + std::numeric_limits<nsecs_t>::max(); + + static inline bool isValidTimestamp(nsecs_t time) { + return time != TIMESTAMP_PENDING; + } + bool hasPostedInfo() const; bool hasRequestedPresentInfo() const; bool hasLatchInfo() const; @@ -67,11 +77,8 @@ struct FrameEvents { void checkFencesForCompletion(); void dump(String8& outString) const; - static constexpr size_t EVENT_COUNT = - static_cast<size_t>(FrameEvent::EVENT_COUNT); - static_assert(EVENT_COUNT <= 32, "Event count sanity check failed."); - bool valid{false}; + int connectId{0}; uint64_t frameNumber{0}; // Whether or not certain points in the frame's life cycle have been @@ -81,12 +88,12 @@ struct FrameEvents { bool addRetireCalled{false}; bool addReleaseCalled{false}; - nsecs_t postedTime{-1}; - nsecs_t requestedPresentTime{-1}; - nsecs_t latchTime{-1}; - nsecs_t firstRefreshStartTime{-1}; - nsecs_t lastRefreshStartTime{-1}; - nsecs_t dequeueReadyTime{-1}; + nsecs_t postedTime{TIMESTAMP_PENDING}; + nsecs_t requestedPresentTime{TIMESTAMP_PENDING}; + nsecs_t latchTime{TIMESTAMP_PENDING}; + nsecs_t firstRefreshStartTime{TIMESTAMP_PENDING}; + nsecs_t lastRefreshStartTime{TIMESTAMP_PENDING}; + nsecs_t dequeueReadyTime{TIMESTAMP_PENDING}; std::shared_ptr<FenceTime> acquireFence{FenceTime::NO_FENCE}; std::shared_ptr<FenceTime> gpuCompositionDoneFence{FenceTime::NO_FENCE}; @@ -206,6 +213,8 @@ class ConsumerFrameEventHistory : public FrameEventHistory { public: ~ConsumerFrameEventHistory() override; + void onDisconnect(); + void initializeCompositorTiming(const CompositorTiming& compositorTiming); void addQueue(const NewFrameEventsEntry& newEntry); @@ -227,11 +236,13 @@ private: const std::array<FrameEvents, MAX_FRAME_HISTORY>::iterator& frame); std::array<FrameEventDirtyFields, MAX_FRAME_HISTORY> mFramesDirty; + size_t mQueueOffset{0}; size_t mCompositionOffset{0}; size_t mRetireOffset{0}; size_t mReleaseOffset{0}; + int mCurrentConnectId{0}; bool mProducerWantsEvents{false}; }; @@ -273,12 +284,12 @@ private: bool mAddRetireCalled{0}; bool mAddReleaseCalled{0}; - nsecs_t mPostedTime{0}; - nsecs_t mRequestedPresentTime{0}; - nsecs_t mLatchTime{0}; - nsecs_t mFirstRefreshStartTime{0}; - nsecs_t mLastRefreshStartTime{0}; - nsecs_t mDequeueReadyTime{0}; + nsecs_t mPostedTime{FrameEvents::TIMESTAMP_PENDING}; + nsecs_t mRequestedPresentTime{FrameEvents::TIMESTAMP_PENDING}; + nsecs_t mLatchTime{FrameEvents::TIMESTAMP_PENDING}; + nsecs_t mFirstRefreshStartTime{FrameEvents::TIMESTAMP_PENDING}; + nsecs_t mLastRefreshStartTime{FrameEvents::TIMESTAMP_PENDING}; + nsecs_t mDequeueReadyTime{FrameEvents::TIMESTAMP_PENDING}; FenceTime::Snapshot mGpuCompositionDoneFence; FenceTime::Snapshot mDisplayPresentFence; diff --git a/include/gui/IConsumerListener.h b/include/gui/IConsumerListener.h index 93dd4acf96..a3c7d6496d 100644 --- a/include/gui/IConsumerListener.h +++ b/include/gui/IConsumerListener.h @@ -43,6 +43,9 @@ public: ConsumerListener() { } virtual ~ConsumerListener(); + // onDisconnect is called when a producer disconnects from the BufferQueue. + virtual void onDisconnect() {} /* Asynchronous */ + // onFrameAvailable is called from queueBuffer each time an additional // frame becomes available for consumption. This means that frames that // are queued while in asynchronous mode only trigger the callback if no |