SurfaceFlinger: rename FrameTimeline's setActualEndTime
Rename setActualEndTime to setAcquireFenceTime to better reflect what
the method keeps track of.
Change-Id: I1865a48d0cc4fbb55c4ec0fe2ff172fd31735ccb
Test: SF unit tests
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index a574549..0863a22 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -340,7 +340,7 @@
FrameTracer::FrameEvent::LATCH);
if (mQueueItems[0].surfaceFrame) {
- mQueueItems[0].surfaceFrame->setActualEndTime(
+ mQueueItems[0].surfaceFrame->setAcquireFenceTime(
mQueueItems[0].item.mFenceTime->getSignalTime());
mFlinger->mFrameTimeline->addSurfaceFrame(std::move(mQueueItems[0].surfaceFrame),
PresentState::Presented);
diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp
index 2033f8e..361c1f3 100644
--- a/services/surfaceflinger/BufferStateLayer.cpp
+++ b/services/surfaceflinger/BufferStateLayer.cpp
@@ -162,8 +162,8 @@
mCurrentStateModified = mCurrentState.modified;
bool stateUpdateAvailable = Layer::applyPendingStates(stateToCommit);
if (stateUpdateAvailable && mCallbackHandleAcquireTime != -1) {
- // Update the actual end time if we have a buffer
- mSurfaceFrame->setActualEndTime(mCallbackHandleAcquireTime);
+ // Update the acquire fence time if we have a buffer
+ mSurfaceFrame->setAcquireFenceTime(mCallbackHandleAcquireTime);
}
mCurrentStateModified = stateUpdateAvailable && mCurrentStateModified;
mCurrentState.modified = false;
diff --git a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
index a12f4c7..9985253 100644
--- a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
+++ b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
@@ -20,6 +20,7 @@
#include "FrameTimeline.h"
#include <android-base/stringprintf.h>
+#include <utils/Log.h>
#include <utils/Trace.h>
#include <cinttypes>
@@ -104,9 +105,9 @@
std::lock_guard<std::mutex> lock(mMutex);
mActualQueueTime = actualQueueTime;
}
-void SurfaceFrame::setActualEndTime(nsecs_t actualEndTime) {
+void SurfaceFrame::setAcquireFenceTime(nsecs_t acquireFenceTime) {
std::lock_guard<std::mutex> lock(mMutex);
- mActuals.endTime = actualEndTime;
+ mActuals.endTime = std::max(acquireFenceTime, mActualQueueTime);
}
void SurfaceFrame::setActualPresentTime(nsecs_t presentTime) {
diff --git a/services/surfaceflinger/FrameTimeline/FrameTimeline.h b/services/surfaceflinger/FrameTimeline/FrameTimeline.h
index 2ca1e23..cfe8170 100644
--- a/services/surfaceflinger/FrameTimeline/FrameTimeline.h
+++ b/services/surfaceflinger/FrameTimeline/FrameTimeline.h
@@ -85,10 +85,10 @@
// Actual timestamps of the app are set individually at different functions.
// Start time (if the app provides) and Queue time are accessible after queueing the frame,
- // whereas End time is available only during latch.
+ // whereas Acquire Fence time is available only during latch.
virtual void setActualStartTime(nsecs_t actualStartTime) = 0;
virtual void setActualQueueTime(nsecs_t actualQueueTime) = 0;
- virtual void setActualEndTime(nsecs_t actualEndTime) = 0;
+ virtual void setAcquireFenceTime(nsecs_t acquireFenceTime) = 0;
};
/*
@@ -163,7 +163,7 @@
void setActualStartTime(nsecs_t actualStartTime) override;
void setActualQueueTime(nsecs_t actualQueueTime) override;
- void setActualEndTime(nsecs_t actualEndTime) override;
+ void setAcquireFenceTime(nsecs_t acquireFenceTime) override;
void setPresentState(PresentState state) override;
void setActualPresentTime(nsecs_t presentTime);
void dump(std::string& result);
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index df2ef80..08801c9 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -894,7 +894,10 @@
auto surfaceFrame =
mFlinger->mFrameTimeline->createSurfaceFrameForToken(mTransactionName, vsyncId);
surfaceFrame->setActualQueueTime(stateToCommit->postTime);
- surfaceFrame->setActualEndTime(stateToCommit->postTime);
+ // For transactions we set the acquire fence time to the post time as we
+ // don't have a buffer. For BufferStateLayer it is overridden in
+ // BufferStateLayer::applyPendingStates
+ surfaceFrame->setAcquireFenceTime(stateToCommit->postTime);
mSurfaceFrame = std::move(surfaceFrame);
}
diff --git a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
index 85d2834..617f95a 100644
--- a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
+++ b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
@@ -217,4 +217,20 @@
true);
}
+TEST_F(FrameTimelineTest, surfaceFrameEndTimeAcquireFenceAfterQueue) {
+ auto surfaceFrame =
+ mFrameTimeline->createSurfaceFrameForToken("acquireFenceAfterQueue", std::nullopt);
+ surfaceFrame->setActualQueueTime(123);
+ surfaceFrame->setAcquireFenceTime(456);
+ EXPECT_EQ(surfaceFrame->getActuals().endTime, 456);
+}
+
+TEST_F(FrameTimelineTest, surfaceFrameEndTimeAcquireFenceBeforeQueue) {
+ auto surfaceFrame =
+ mFrameTimeline->createSurfaceFrameForToken("acquireFenceAfterQueue", std::nullopt);
+ surfaceFrame->setActualQueueTime(456);
+ surfaceFrame->setAcquireFenceTime(123);
+ EXPECT_EQ(surfaceFrame->getActuals().endTime, 456);
+}
+
} // namespace android::frametimeline