SF: Extract PresentLatencyTracker

Present fences will eventually be tracked per display to compute per-
display CompositorTiming, but for now extract a class and add tests.

Bug: 185535769
Test: libscheduler_test
Change-Id: Ifa7f27059dc0ca5c8ee4747dd2640fb9638fd2bc
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 71b9d5e..e43735f 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -55,6 +55,7 @@
 #include <compositionengine/FenceResult.h>
 #include <compositionengine/OutputColorSetting.h>
 #include <scheduler/Fps.h>
+#include <scheduler/PresentLatencyTracker.h>
 
 #include "ClientCache.h"
 #include "DisplayDevice.h"
@@ -169,13 +170,6 @@
 using DisplayColorSetting = compositionengine::OutputColorSetting;
 
 struct SurfaceFlingerBE {
-    // Only accessed from the main thread.
-    struct CompositePresentTime {
-        nsecs_t composite = -1;
-        std::shared_ptr<FenceTime> display = FenceTime::NO_FENCE;
-    };
-    std::queue<CompositePresentTime> mCompositePresentTimes;
-
     static const size_t NUM_BUCKETS = 8; // < 1-7, 7+
     nsecs_t mFrameBuckets[NUM_BUCKETS] = {};
     nsecs_t mTotalTime = 0;
@@ -954,11 +948,7 @@
     /*
      * Compositing
      */
-    void postComposition();
-
-    // Returns the composite-to-present latency of the latest presented frame.
-    nsecs_t trackPresentLatency(nsecs_t compositeTime, std::shared_ptr<FenceTime> presentFenceTime);
-
+    void postComposition() REQUIRES(kMainThreadContext);
     void postFrame() REQUIRES(kMainThreadContext);
 
     /*
@@ -1326,6 +1316,7 @@
     sp<VsyncModulator> mVsyncModulator;
 
     std::unique_ptr<scheduler::RefreshRateStats> mRefreshRateStats;
+    scheduler::PresentLatencyTracker mPresentLatencyTracker GUARDED_BY(kMainThreadContext);
 
     struct FenceWithFenceTime {
         sp<Fence> fence = Fence::NO_FENCE;