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;
