power_play/src/base/base_async.h

57 lines
1.1 KiB
C

////////////////////////////////////////////////////////////
//~ Async types
Struct(AsyncFrameLaneCtx);
typedef void AsyncTickCallbackFunc(WaveLaneCtx *lane, AsyncFrameLaneCtx *async_lane_frame_ctx);
Struct(AsyncTickCallback)
{
AsyncTickCallbackFunc *func;
};
Struct(AsyncTickCallbackNode)
{
AsyncTickCallbackNode *next;
AsyncTickCallback callback;
};
Struct(AsyncFrameLaneCtx)
{
Arena *arena;
};
Struct(AsyncWorkerCtx)
{
i64 last_seen_signal;
u64 callbacks_count;
AsyncTickCallback *callbacks;
};
Struct(AsyncCtx)
{
Mutex mutex;
u64 callback_nodes_count;
AsyncTickCallbackNode *first_callback_node;
AsyncTickCallbackNode *last_callback_node;
AsyncWorkerCtx worker;
IsolatedAtomic64 signal;
};
////////////////////////////////////////////////////////////
//~ Bootstrap
void BootstrapAsync(void);
////////////////////////////////////////////////////////////
//~ Async ops
void OnAsyncTick(AsyncTickCallbackFunc *func);
void SignalAsyncTick(void);
////////////////////////////////////////////////////////////
//~ Async worker
void AsyncWorkerEntryPoint(WaveLaneCtx *lane);