diff options
Diffstat (limited to 'services/surfaceflinger/EventControlThread.h')
-rw-r--r-- | services/surfaceflinger/EventControlThread.h | 51 |
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 |