summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
author Brian Anderson <brianderson@google.com> 2016-12-01 16:54:33 -0800
committer Brian Anderson <brianderson@google.com> 2017-02-15 16:41:26 -0800
commit5ea5e5905170f32d5cf45ad35c552d64743892c3 (patch)
treefbb4f89afcc0f593652fe722e2e2e351a12ca921 /include
parented816e6cb4ca15181bf6120890c85290b5f7c02b (diff)
Fix unexpected FrameEvents on BufferQueue reconnect
Helps reduce the number of ALOGE's being hit when switching between apps. * Notify Layer when the Producer disconnects. * Avoid sending event deltas from a previous connection. * Avoid releasing a frame more than once. Test: adb shell /data/nativetest/libgui_test/libgui_test --gtest_filter=*GetFrameTimestamps* Change-Id: I64f314be72ddb154b584d726ac382cd468e345bf
Diffstat (limited to 'include')
-rw-r--r--include/gui/BufferQueue.h11
-rw-r--r--include/gui/FrameTimestamps.h5
-rw-r--r--include/gui/IConsumerListener.h3
3 files changed, 14 insertions, 5 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 0c4af469c4..bda3c5cf94 100644
--- a/include/gui/FrameTimestamps.h
+++ b/include/gui/FrameTimestamps.h
@@ -78,6 +78,7 @@ struct FrameEvents {
void dump(String8& outString) const;
bool valid{false};
+ int connectId{0};
uint64_t frameNumber{0};
// Whether or not certain points in the frame's life cycle have been
@@ -212,6 +213,8 @@ class ConsumerFrameEventHistory : public FrameEventHistory {
public:
~ConsumerFrameEventHistory() override;
+ void onDisconnect();
+
void initializeCompositorTiming(const CompositorTiming& compositorTiming);
void addQueue(const NewFrameEventsEntry& newEntry);
@@ -233,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};
};
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