SF: Reduce present fence work
Optimizes the implementation of previousFramePending to only call into
the sync driver once (rather than 2-3 times).
Test: atest libsurfaceflinger_unittest
Bug: 153112939
Change-Id: I79cc96c6bf6aa4e94d79157431caa432f2652b9a
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 9c151c0..b9876d8 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1782,11 +1782,10 @@
return false;
}
- if (graceTimeMs > 0 && fence->getStatus() == Fence::Status::Unsignaled) {
- fence->wait(graceTimeMs);
- }
-
- return (fence->getStatus() == Fence::Status::Unsignaled);
+ const status_t status = fence->wait(graceTimeMs);
+ // This is the same as Fence::Status::Unsignaled, but it saves a getStatus() call,
+ // which calls wait(0) again internally
+ return status == -ETIME;
}
nsecs_t SurfaceFlinger::previousFramePresentTime() NO_THREAD_SAFETY_ANALYSIS {