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
diff --git a/include/gui/FrameTimestamps.h b/include/gui/FrameTimestamps.h
index 0c4af46..bda3c5c 100644
--- a/include/gui/FrameTimestamps.h
+++ b/include/gui/FrameTimestamps.h
@@ -78,6 +78,7 @@
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 @@
public:
~ConsumerFrameEventHistory() override;
+ void onDisconnect();
+
void initializeCompositorTiming(const CompositorTiming& compositorTiming);
void addQueue(const NewFrameEventsEntry& newEntry);
@@ -233,11 +236,13 @@
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};
};