summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/BufferStateLayer.cpp
diff options
context:
space:
mode:
author Ady Abraham <adyabr@google.com> 2020-12-15 18:45:12 -0800
committer Ady Abraham <adyabr@google.com> 2020-12-23 22:44:57 +0000
commitce4adf1b97be29a65f5b36c345f36651bff1e619 (patch)
tree845518f3e4e278a6cc43307fdd8b3901bfe778c6 /services/surfaceflinger/BufferStateLayer.cpp
parentf0c5649f2ed8ca5fba07389908b2491007d50b08 (diff)
SurfaceFlinger: fix early latching of buffers
Use the FrameTimeline::SurfaceFrame predicted present time to avoid latching a buffer too early (i.e. before the time SurfaceFlinger planned to latch this buffer when the app requested a vsync callback). Bug: 169901895 Test: expand notification shade and observe systrace Change-Id: I823546992c89f88c0c29b839ce21c79ff1ffcfbd
Diffstat (limited to 'services/surfaceflinger/BufferStateLayer.cpp')
-rw-r--r--services/surfaceflinger/BufferStateLayer.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp
index df1472d0d4..7ec7f36548 100644
--- a/services/surfaceflinger/BufferStateLayer.cpp
+++ b/services/surfaceflinger/BufferStateLayer.cpp
@@ -601,6 +601,14 @@ bool BufferStateLayer::hasFrameUpdate() const {
return mCurrentStateModified && (c.buffer != nullptr || c.bgColorLayer != nullptr);
}
+nsecs_t BufferStateLayer::nextPredictedPresentTime() const {
+ if (!getDrawingState().isAutoTimestamp || !mSurfaceFrame) {
+ return 0;
+ }
+
+ return mSurfaceFrame->getPredictions().presentTime;
+}
+
status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nsecs_t latchTime,
nsecs_t /*expectedPresentTime*/) {
const State& s(getDrawingState());