summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-05-24 01:46:14 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-05-24 01:46:14 +0000
commitdac7a213b2bc3d341e549c7d9164e401834efa0f (patch)
tree7b354273465767114c0f84bbe94147f50469329c
parentf8e689cfd25f27c4af36a27e145d4cac1d0bb9cb (diff)
parent5a1021000dabfad591dc1afa6525b7165c046bf9 (diff)
Merge "[SurfaceFlinger] add minimum frame count for early gl offsets." into qt-r1-dev
-rw-r--r--services/surfaceflinger/Scheduler/VSyncModulator.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/services/surfaceflinger/Scheduler/VSyncModulator.h b/services/surfaceflinger/Scheduler/VSyncModulator.h
index 21dad12797..41c3a3a605 100644
--- a/services/surfaceflinger/Scheduler/VSyncModulator.h
+++ b/services/surfaceflinger/Scheduler/VSyncModulator.h
@@ -35,6 +35,11 @@ private:
// sending new transactions.
const int MIN_EARLY_FRAME_COUNT_TRANSACTION = 2;
+ // Number of frames we'll keep the early gl phase offsets once they are activated.
+ // This acts as a low-pass filter to avoid scenarios where we rapidly
+ // switch in and out of gl composition.
+ const int MIN_EARLY_GL_FRAME_COUNT_TRANSACTION = 2;
+
public:
struct Offsets {
nsecs_t sf;
@@ -130,10 +135,14 @@ public:
mRemainingEarlyFrameCount--;
updateOffsetsNeeded = true;
}
- if (usedRenderEngine != mLastFrameUsedRenderEngine) {
- mLastFrameUsedRenderEngine = usedRenderEngine;
+ if (usedRenderEngine) {
+ mRemainingRenderEngineUsageCount = MIN_EARLY_GL_FRAME_COUNT_TRANSACTION;
+ updateOffsetsNeeded = true;
+ } else if (mRemainingRenderEngineUsageCount > 0) {
+ mRemainingRenderEngineUsageCount--;
updateOffsetsNeeded = true;
}
+
if (updateOffsetsNeeded) {
updateOffsets();
}
@@ -145,7 +154,7 @@ public:
if (mTransactionStart == Scheduler::TransactionStart::EARLY ||
mRemainingEarlyFrameCount > 0 || mRefreshRateChangePending) {
return mEarlyOffsets;
- } else if (mLastFrameUsedRenderEngine) {
+ } else if (mRemainingRenderEngineUsageCount > 0) {
return mEarlyGlOffsets;
} else {
return mLateOffsets;
@@ -195,9 +204,9 @@ private:
std::atomic<Scheduler::TransactionStart> mTransactionStart =
Scheduler::TransactionStart::NORMAL;
- std::atomic<bool> mLastFrameUsedRenderEngine = false;
std::atomic<bool> mRefreshRateChangePending = false;
std::atomic<int> mRemainingEarlyFrameCount = 0;
+ std::atomic<int> mRemainingRenderEngineUsageCount = 0;
};
} // namespace android