Pass a valid fence time if the acquire fence has not signaled
When we try to latch a buffer with an unsignaled fence, we were passing
Fence::SIGNAL_TIME_PENDING (MAX_INT) as the acquire fence time,
marking all the app frametimeline as missed. This is a short term solution
to provide a reasonable value instead.
Flag: EXEMPT bugfix
Fixes: 344175037
Test: cb test + perfetto
Change-Id: Ia226589c177457f28540b040086903e518796436
diff --git a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
index dac9265..e96e007 100644
--- a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
+++ b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
@@ -458,6 +458,16 @@
EXPECT_EQ(surfaceFrame->getActuals().endTime, 456);
}
+TEST_F(FrameTimelineTest, surfaceFrameEndTimeAcquireFenceUnsignaled) {
+ auto surfaceFrame = mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, 0, sLayerIdOne,
+ "acquireFenceAfterQueue",
+ "acquireFenceAfterQueue",
+ /*isBuffer*/ true, sGameMode);
+ surfaceFrame->setActualQueueTime(123);
+ surfaceFrame->setAcquireFenceTime(Fence::SIGNAL_TIME_PENDING);
+ EXPECT_EQ(surfaceFrame->getActuals().endTime, 123);
+}
+
TEST_F(FrameTimelineTest, surfaceFrameEndTimeAcquireFenceBeforeQueue) {
auto surfaceFrame = mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, 0, sLayerIdOne,
"acquireFenceAfterQueue",