Cache frame event history producer-side.
* Producer maintains a recent history of frames.
* Producer only does a binder call if requested
informatiVon doesn't exist in the cache.
* Consumer sends fences to the producer, which
can be queried for timestamps without a
binder call.
Test: adb shell /data/nativetest/libgui_test/libgui_test
--gtest_filter=*GetFrameTimestamps*
Change-Id: I8a64579407cc2935f5c659462cb227b07ba27e43
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index 6bd1cfd..e27fd7a 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -975,7 +975,7 @@
requestedPresentTimestamp,
acquireFence
};
- addAndGetFrameTimestamps(&newFrameEventsEntry, 0, nullptr);
+ addAndGetFrameTimestamps(&newFrameEventsEntry, nullptr);
return NO_ERROR;
}
@@ -1464,16 +1464,15 @@
return NO_ERROR;
}
-bool BufferQueueProducer::getFrameTimestamps(
- uint64_t frameNumber, FrameTimestamps* outTimestamps) {
- return addAndGetFrameTimestamps(nullptr, frameNumber, outTimestamps);
+void BufferQueueProducer::getFrameTimestamps(FrameEventHistoryDelta* outDelta) {
+ addAndGetFrameTimestamps(nullptr, outDelta);
}
-bool BufferQueueProducer::addAndGetFrameTimestamps(
+void BufferQueueProducer::addAndGetFrameTimestamps(
const NewFrameEventsEntry* newTimestamps,
- uint64_t frameNumber, FrameTimestamps* outTimestamps) {
- if (newTimestamps == nullptr && outTimestamps == nullptr) {
- return false;
+ FrameEventHistoryDelta* outDelta) {
+ if (newTimestamps == nullptr && outDelta == nullptr) {
+ return;
}
ATRACE_CALL();
@@ -1484,10 +1483,8 @@
listener = mCore->mConsumerListener;
}
if (listener != NULL) {
- return listener->addAndGetFrameTimestamps(
- newTimestamps, frameNumber, outTimestamps);
+ listener->addAndGetFrameTimestamps(newTimestamps, outDelta);
}
- return false;
}
void BufferQueueProducer::binderDied(const wp<android::IBinder>& /* who */) {