power_play/src/scratch.c

30 lines
879 B
C

#include "scratch.h"
INTERNAL THREAD_LOCAL_VAR_ALLOC_FUNC_DEF(scratch_context_alloc, vctx)
{
__prof;
struct scratch_ctx *ctx = vctx;
for (u32 i = 0; i < ARRAY_COUNT(ctx->arenas); ++i) {
ctx->arenas[i] = arena_alloc(SCRATCH_ARENA_RESERVE);
}
}
INTERNAL THREAD_LOCAL_VAR_RELEASE_FUNC_DEF(scratch_context_release, vctx)
{
__prof;
struct scratch_ctx *ctx = vctx;
#if RTC
/* If stack count is not 0, then a `scratch_end` is missing on a top-level
* scratch arena (The temp_arena with
* `scratch_id` = ctx->scratch_id_stack[ctx->scratch_id_stack_count - 1]) */
ASSERT(ctx->scratch_id_stack_count == 0);
#endif
for (u32 i = 0; i < ARRAY_COUNT(ctx->arenas); ++i) {
arena_release(&ctx->arenas[i]);
}
}
THREAD_LOCAL_VAR_DEF_EXTERN(tl_scratch_ctx, struct scratch_ctx, &scratch_context_alloc, &scratch_context_release);