summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
author Brian C. Anderson <brianderson@google.com> 2017-02-17 22:17:35 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-02-17 22:17:36 +0000
commitf810b29ebc8564f94ff7fb14f2d13a0f4d111703 (patch)
treed99aec6c734c984cfb96779aedc1549646ebc3a5 /include
parent873e2eee781f323a8aa0283cab5924fa4cd7ecfe (diff)
parent5ea5e5905170f32d5cf45ad35c552d64743892c3 (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.h11
-rw-r--r--include/gui/FrameTimestamps.h45
-rw-r--r--include/gui/IConsumerListener.h3
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