Fix transaction phase offsets

There are cases where we have multiple source of transactions
in one frame. In these cases, if a NORMAL gets submitted after an
EARLY, it will override the early one which will cause to use
the wrong phase offset for this frame.

In some cases an EARLY was then still scheduled before the frame
happened, so any kind of phase offset was observeable, which
looked like drifting.

Fix this by making sure an EARLY frame stays an EARLY frame.

Test: Open app. Ensure by looking really closely that vsync-sf is
happening at the supposed offset.
Bug: 75985430

Change-Id: I5dbf097d314767493b0f06b9eb6dd7c6b2f93919
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 183c1eb..982107b 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2121,7 +2121,7 @@
     // with mStateLock held to guarantee that mCurrentState won't change
     // until the transaction is committed.
 
-    mVsyncModulator.setTransactionStart(VSyncModulator::TransactionStart::NORMAL);
+    mVsyncModulator.onTransactionHandled();
     transactionFlags = getTransactionFlags(eTransactionMask);
     handleTransactionLocked(transactionFlags);