SF: call the timer's callback in case of an error

Bug: 210065990
Test: new SF unit test
Change-Id: I4ae70e82e9402fc7d7eecc1a17c1b992eb3efab6
diff --git a/services/surfaceflinger/Scheduler/Timer.h b/services/surfaceflinger/Scheduler/Timer.h
index 628d800..eb65954 100644
--- a/services/surfaceflinger/Scheduler/Timer.h
+++ b/services/surfaceflinger/Scheduler/Timer.h
@@ -36,6 +36,10 @@
     void alarmCancel() final;
     void dump(std::string& result) const final;
 
+protected:
+    // For unit testing
+    int mEpollFd = -1;
+
 private:
     enum class DebugState {
         Reset,
@@ -48,12 +52,12 @@
         ftl_last = Terminated
     };
 
-    void reset();
-    void cleanup();
+    void reset() EXCLUDES(mMutex);
+    void cleanup() REQUIRES(mMutex);
     void setDebugState(DebugState state) EXCLUDES(mMutex);
 
     int mTimerFd = -1;
-    int mEpollFd = -1;
+
     std::array<int, 2> mPipes = {-1, -1};
 
     std::thread mDispatchThread;
@@ -63,6 +67,7 @@
 
     mutable std::mutex mMutex;
     std::function<void()> mCallback GUARDED_BY(mMutex);
+    bool mExpectingCallback GUARDED_BY(mMutex) = false;
     DebugState mDebugState GUARDED_BY(mMutex);
 };