SurfaceFlinger: support negative phase offset
Store the last 2 present frames to accommodate negative phase offsets.
Test: systrace
Bug: 130191039
Change-Id: Ie4460d4a1b14a2a12f5d2f3c1542e0b837cb761c
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 72e2ff9..fc89f53 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -824,6 +824,8 @@
return hwcDisplayId ? getHwComposer().toPhysicalDisplayId(*hwcDisplayId) : std::nullopt;
}
+ bool previousFrameMissed();
+
/*
* Debugging & dumpsys
*/
@@ -956,7 +958,7 @@
std::vector<sp<Layer>> mLayersWithQueuedFrames;
// Tracks layers that need to update a display's dirty region.
std::vector<sp<Layer>> mLayersPendingRefresh;
- sp<Fence> mPreviousPresentFence = Fence::NO_FENCE;
+ std::array<sp<Fence>, 2> mPreviousPresentFences = {Fence::NO_FENCE, Fence::NO_FENCE};
// True if in the previous frame at least one layer was composed via the GPU.
bool mHadClientComposition = false;
// True if in the previous frame at least one layer was composed via HW Composer.