DispatchQueueWorkItemEfl.h [plain text]
#ifndef DispatchQueueWorkItemEfl_h
#define DispatchQueueWorkItemEfl_h
#include <wtf/Assertions.h>
#include <wtf/CurrentTime.h>
#include <wtf/FunctionDispatcher.h>
#include <wtf/RefCounted.h>
#include <wtf/WorkQueue.h>
class WorkItem {
public:
WorkItem(Ref<WorkQueue>&& workQueue, Function<void ()>&& function)
: m_workQueue(WTFMove(workQueue))
, m_function(WTFMove(function))
{
}
void dispatch() { m_function(); }
private:
Ref<WorkQueue> m_workQueue;
Function<void ()> m_function;
};
class TimerWorkItem : public WorkItem {
public:
static std::unique_ptr<TimerWorkItem> create(Ref<WorkQueue>&& workQueue, Function<void ()>&& function, std::chrono::nanoseconds delayNanoSeconds)
{
ASSERT(delayNanoSeconds.count() >= 0);
return std::unique_ptr<TimerWorkItem>(new TimerWorkItem(WTFMove(workQueue), WTFMove(function), monotonicallyIncreasingTime() * 1000000000.0 + delayNanoSeconds.count()));
}
double expirationTimeNanoSeconds() const { return m_expirationTimeNanoSeconds; }
bool hasExpired(double currentTimeNanoSeconds) const { return currentTimeNanoSeconds >= m_expirationTimeNanoSeconds; }
protected:
TimerWorkItem(Ref<WorkQueue>&& workQueue, Function<void ()>&& function, double expirationTimeNanoSeconds)
: WorkItem(WTFMove(workQueue), WTFMove(function))
, m_expirationTimeNanoSeconds(expirationTimeNanoSeconds)
{
}
private:
double m_expirationTimeNanoSeconds;
};
#endif // DispatchQueueWorkItemEfl_h