SF: use FenceTime when possible
Fence::getSignalTime is calling a system call everytime,
where FenceTime caches the signal time.
This shows reduction in simpleperf for the main thread
2.23% -> 1.25%
Test: simpleperf for PIP + Notification shade expansion
Bug: 184378996
Change-Id: I182db2ddfcb7fdbde758f5d87357a16e60c1bb07
diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp
index a974dc4..d6becbf 100644
--- a/services/surfaceflinger/BufferStateLayer.cpp
+++ b/services/surfaceflinger/BufferStateLayer.cpp
@@ -432,10 +432,12 @@
}
bool BufferStateLayer::setAcquireFence(const sp<Fence>& fence) {
- // The acquire fences of BufferStateLayers have already signaled before they are set
- mCallbackHandleAcquireTime = fence->getSignalTime();
-
mCurrentState.acquireFence = fence;
+ mCurrentState.acquireFenceTime = std::make_unique<FenceTime>(fence);
+
+ // The acquire fences of BufferStateLayers have already signaled before they are set
+ mCallbackHandleAcquireTime = mCurrentState.acquireFenceTime->getSignalTime();
+
mCurrentState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
@@ -691,7 +693,8 @@
// bufferSurfaceFrame could be seen here if a pending state was applied successfully and we
// are processing the next state.
addSurfaceFramePresentedForBuffer(bufferSurfaceFrame,
- mDrawingState.acquireFence->getSignalTime(), latchTime);
+ mDrawingState.acquireFenceTime->getSignalTime(),
+ latchTime);
}
mCurrentStateModified = false;