summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/EventControlThread.h
diff options
context:
space:
mode:
Diffstat (limited to 'services/surfaceflinger/EventControlThread.h')
-rw-r--r--services/surfaceflinger/EventControlThread.h51
1 files changed, 33 insertions, 18 deletions
diff --git a/services/surfaceflinger/EventControlThread.h b/services/surfaceflinger/EventControlThread.h
index 1b1ef75b9d..cafae53400 100644
--- a/services/surfaceflinger/EventControlThread.h
+++ b/services/surfaceflinger/EventControlThread.h
@@ -14,35 +14,50 @@
* limitations under the License.
*/
-#ifndef ANDROID_EVENTCONTROLTHREAD_H
-#define ANDROID_EVENTCONTROLTHREAD_H
+#pragma once
-#include <stddef.h>
+#include <condition_variable>
+#include <cstddef>
+#include <functional>
+#include <mutex>
+#include <thread>
-#include <utils/Mutex.h>
-#include <utils/Thread.h>
+#include <android-base/thread_annotations.h>
namespace android {
-class SurfaceFlinger;
+class EventControlThread {
+public:
+ virtual ~EventControlThread();
+
+ virtual void setVsyncEnabled(bool enabled) = 0;
+};
+
+namespace impl {
-class EventControlThread: public Thread {
+class EventControlThread final : public android::EventControlThread {
public:
+ using SetVSyncEnabledFunction = std::function<void(bool)>;
- explicit EventControlThread(const sp<SurfaceFlinger>& flinger);
- virtual ~EventControlThread() {}
+ explicit EventControlThread(SetVSyncEnabledFunction function);
+ ~EventControlThread();
- void setVsyncEnabled(bool enabled);
- virtual bool threadLoop();
+ // EventControlThread implementation
+ void setVsyncEnabled(bool enabled) override;
private:
- sp<SurfaceFlinger> mFlinger;
- bool mVsyncEnabled;
+ void threadMain();
- Mutex mMutex;
- Condition mCond;
-};
+ std::mutex mMutex;
+ std::condition_variable mCondition;
+
+ const SetVSyncEnabledFunction mSetVSyncEnabled;
+ bool mVsyncEnabled GUARDED_BY(mMutex) = false;
+ bool mKeepRunning GUARDED_BY(mMutex) = true;
-}
+ // Must be last so that everything is initialized before the thread starts.
+ std::thread mThread{&EventControlThread::threadMain, this};
+};
-#endif // ANDROID_EVENTCONTROLTHREAD_H
+} // namespace impl
+} // namespace android