[SurfaceFlinger] Store current offsets in VSyncModulator.

This way updated offsets are properly persisted to DispSyncSource.

Bug: 135770834
Test: systrace shows correct offsets
Change-Id: I34ed81ebecfa8a4f9826d4a7713da0ec0a8b23de
(cherry picked from commit b656aed06739e5a5ec7563970452237dca431edd)
Merged-In: I34ed81ebecfa8a4f9826d4a7713da0ec0a8b23de
diff --git a/services/surfaceflinger/Scheduler/VSyncModulator.cpp b/services/surfaceflinger/Scheduler/VSyncModulator.cpp
index 381308a..d452c19 100644
--- a/services/surfaceflinger/Scheduler/VSyncModulator.cpp
+++ b/services/surfaceflinger/Scheduler/VSyncModulator.cpp
@@ -102,7 +102,7 @@
 
 VSyncModulator::Offsets VSyncModulator::getOffsets() {
     std::lock_guard<std::mutex> lock(mMutex);
-    return mOffsetMap.at(mOffsetType);
+    return mOffsets;
 }
 
 VSyncModulator::Offsets VSyncModulator::getNextOffsets() {
@@ -129,13 +129,13 @@
 
 void VSyncModulator::updateOffsetsLocked() {
     const Offsets desired = getNextOffsets();
-    const Offsets current = mOffsetMap.at(mOffsetType);
+    const Offsets current = mOffsets;
 
     bool changed = false;
     if (desired.sf != current.sf) {
         if (mSfConnectionHandle != nullptr) {
             mScheduler->setPhaseOffset(mSfConnectionHandle, desired.sf);
-        } else {
+        } else if (mSfEventThread != nullptr) {
             mSfEventThread->setPhaseOffset(desired.sf);
         }
         changed = true;
@@ -143,36 +143,35 @@
     if (desired.app != current.app) {
         if (mAppConnectionHandle != nullptr) {
             mScheduler->setPhaseOffset(mAppConnectionHandle, desired.app);
-        } else {
+        } else if (mAppEventThread != nullptr) {
             mAppEventThread->setPhaseOffset(desired.app);
         }
         changed = true;
     }
 
     if (changed) {
-        updateOffsetType();
+        flushOffsets();
     }
 }
 
-void VSyncModulator::updateOffsetType() {
-    mOffsetType = getNextOffsetType();
+void VSyncModulator::flushOffsets() {
+    OffsetType type = getNextOffsetType();
+    mOffsets = mOffsetMap.at(type);
     if (!mTraceDetailedInfo) {
         return;
     }
-    OffsetType type = mOffsetType;
-    Offsets offsets = mOffsetMap.at(type);
     ATRACE_INT("Vsync-EarlyOffsetsOn",
-               offsets.fpsMode == RefreshRateType::DEFAULT && type == OffsetType::Early);
+               mOffsets.fpsMode == RefreshRateType::DEFAULT && type == OffsetType::Early);
     ATRACE_INT("Vsync-EarlyGLOffsetsOn",
-               offsets.fpsMode == RefreshRateType::DEFAULT && type == OffsetType::EarlyGl);
+               mOffsets.fpsMode == RefreshRateType::DEFAULT && type == OffsetType::EarlyGl);
     ATRACE_INT("Vsync-LateOffsetsOn",
-               offsets.fpsMode == RefreshRateType::DEFAULT && type == OffsetType::Late);
+               mOffsets.fpsMode == RefreshRateType::DEFAULT && type == OffsetType::Late);
     ATRACE_INT("Vsync-HighFpsEarlyOffsetsOn",
-               offsets.fpsMode == RefreshRateType::PERFORMANCE && type == OffsetType::Early);
+               mOffsets.fpsMode == RefreshRateType::PERFORMANCE && type == OffsetType::Early);
     ATRACE_INT("Vsync-HighFpsEarlyGLOffsetsOn",
-               offsets.fpsMode == RefreshRateType::PERFORMANCE && type == OffsetType::EarlyGl);
+               mOffsets.fpsMode == RefreshRateType::PERFORMANCE && type == OffsetType::EarlyGl);
     ATRACE_INT("Vsync-HighFpsLateOffsetsOn",
-               offsets.fpsMode == RefreshRateType::PERFORMANCE && type == OffsetType::Late);
+               mOffsets.fpsMode == RefreshRateType::PERFORMANCE && type == OffsetType::Late);
 }
 
 } // namespace android
diff --git a/services/surfaceflinger/Scheduler/VSyncModulator.h b/services/surfaceflinger/Scheduler/VSyncModulator.h
index c6374be..10cf8e6 100644
--- a/services/surfaceflinger/Scheduler/VSyncModulator.h
+++ b/services/surfaceflinger/Scheduler/VSyncModulator.h
@@ -114,8 +114,8 @@
     // Updates offsets and persists them into the scheduler framework.
     void updateOffsets() EXCLUDES(mMutex);
     void updateOffsetsLocked() REQUIRES(mMutex);
-    // Updates the internal offset type.
-    void updateOffsetType() REQUIRES(mMutex);
+    // Updates the internal offsets and offset type.
+    void flushOffsets() REQUIRES(mMutex);
 
     mutable std::mutex mMutex;
     std::unordered_map<OffsetType, Offsets> mOffsetMap GUARDED_BY(mMutex);
@@ -128,7 +128,7 @@
     Scheduler::ConnectionHandle* mAppConnectionHandle = nullptr;
     Scheduler::ConnectionHandle* mSfConnectionHandle = nullptr;
 
-    OffsetType mOffsetType GUARDED_BY(mMutex) = OffsetType::Late;
+    Offsets mOffsets GUARDED_BY(mMutex) = {Scheduler::RefreshRateType::DEFAULT, 0, 0};
 
     std::atomic<Scheduler::TransactionStart> mTransactionStart =
             Scheduler::TransactionStart::NORMAL;