57 lines
1.1 KiB
C
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);
|