CompositingRunLoop.h [plain text]
#ifndef CompositingRunLoop_h
#define CompositingRunLoop_h
#if USE(COORDINATED_GRAPHICS_THREADED)
#include <wtf/Atomics.h>
#include <wtf/Condition.h>
#include <wtf/FastMalloc.h>
#include <wtf/Function.h>
#include <wtf/NeverDestroyed.h>
#include <wtf/Noncopyable.h>
#include <wtf/RunLoop.h>
namespace WebKit {
class CompositingRunLoop {
WTF_MAKE_NONCOPYABLE(CompositingRunLoop);
WTF_MAKE_FAST_ALLOCATED;
public:
CompositingRunLoop(Function<void ()>&&);
~CompositingRunLoop();
void performTask(Function<void ()>&&);
void performTaskSync(Function<void ()>&&);
Lock& stateLock() { return m_state.lock; }
void scheduleUpdate();
void scheduleUpdate(LockHolder&);
void stopUpdates();
void compositionCompleted(LockHolder&);
void updateCompleted(LockHolder&);
private:
enum class CompositionState {
Idle,
InProgress,
};
enum class UpdateState {
Idle,
Scheduled,
InProgress,
PendingCompletion,
};
void updateTimerFired();
RunLoop::Timer<CompositingRunLoop> m_updateTimer;
Function<void ()> m_updateFunction;
Lock m_dispatchSyncConditionMutex;
Condition m_dispatchSyncCondition;
struct {
Lock lock;
CompositionState composition { CompositionState::Idle };
UpdateState update { UpdateState::Idle };
bool pendingUpdate { false };
} m_state;
};
}
#endif // USE(COORDINATED_GRAPHICS_THREADED)
#endif // CompositingRunLoop_h