mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 13:58:40 +00:00
raddbg_cons: parameterize bake ctx with bucket sizes; make initial prediction based on symbol count
This commit is contained in:
@@ -72,7 +72,12 @@ cons_bake_file(Arena *arena, CONS_Root *root, String8List *out){
|
|||||||
CONS__DSections dss = {0};
|
CONS__DSections dss = {0};
|
||||||
cons__dsection(arena, &dss, 0, 0, RADDBG_DataSectionTag_NULL);
|
cons__dsection(arena, &dss, 0, 0, RADDBG_DataSectionTag_NULL);
|
||||||
|
|
||||||
CONS__BakeCtx *bctx = cons__bake_ctx_begin();
|
CONS__BakeParams bctx_params = {0};
|
||||||
|
{
|
||||||
|
bctx_params.strings_bucket_count = u64_up_to_pow2(root->symbol_map.pair_count*8);
|
||||||
|
bctx_params.idx_runs_bucket_count = u64_up_to_pow2(root->symbol_map.pair_count*8);
|
||||||
|
}
|
||||||
|
CONS__BakeCtx *bctx = cons__bake_ctx_begin(&bctx_params);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
// MAIN PART: allocating and filling out sections of the file
|
// MAIN PART: allocating and filling out sections of the file
|
||||||
@@ -1896,13 +1901,16 @@ cons__dsection(Arena *arena, CONS__DSections *dss, void *data, U64 size, RADDBG_
|
|||||||
}
|
}
|
||||||
|
|
||||||
static CONS__BakeCtx*
|
static CONS__BakeCtx*
|
||||||
cons__bake_ctx_begin(void){
|
cons__bake_ctx_begin(CONS__BakeParams *params)
|
||||||
|
{
|
||||||
Arena *arena = arena_alloc();
|
Arena *arena = arena_alloc();
|
||||||
CONS__BakeCtx *result = push_array(arena, CONS__BakeCtx, 1);
|
CONS__BakeCtx *result = push_array(arena, CONS__BakeCtx, 1);
|
||||||
result->arena = arena;
|
result->arena = arena;
|
||||||
result->strs.buckets_count = 16384;
|
#define BKTCOUNT(x) ((x)?(u64_up_to_pow2(x)):(16384))
|
||||||
|
result->strs.buckets_count = BKTCOUNT(params->strings_bucket_count);
|
||||||
|
result->idxs.buckets_count = BKTCOUNT(params->idx_runs_bucket_count);
|
||||||
|
#undef BKTCOUNT
|
||||||
result->strs.buckets = push_array(arena, CONS__StringNode *, result->strs.buckets_count);
|
result->strs.buckets = push_array(arena, CONS__StringNode *, result->strs.buckets_count);
|
||||||
result->idxs.buckets_count = 16384;
|
|
||||||
result->idxs.buckets = push_array(arena, CONS__IdxRunNode *, result->idxs.buckets_count);
|
result->idxs.buckets = push_array(arena, CONS__IdxRunNode *, result->idxs.buckets_count);
|
||||||
|
|
||||||
cons__string(result, str8_lit(""));
|
cons__string(result, str8_lit(""));
|
||||||
|
|||||||
@@ -728,11 +728,18 @@ typedef struct CONS__BakeCtx{
|
|||||||
CONS__PathTree *tree;
|
CONS__PathTree *tree;
|
||||||
} CONS__BakeCtx;
|
} CONS__BakeCtx;
|
||||||
|
|
||||||
|
typedef struct CONS__BakeParams CONS__BakeParams;
|
||||||
|
struct CONS__BakeParams
|
||||||
|
{
|
||||||
|
U64 strings_bucket_count;
|
||||||
|
U64 idx_runs_bucket_count;
|
||||||
|
};
|
||||||
|
|
||||||
//- cons intermediate functions
|
//- cons intermediate functions
|
||||||
static U32 cons__dsection(Arena *arena, CONS__DSections *dss,
|
static U32 cons__dsection(Arena *arena, CONS__DSections *dss,
|
||||||
void *data, U64 size, RADDBG_DataSectionTag tag);
|
void *data, U64 size, RADDBG_DataSectionTag tag);
|
||||||
|
|
||||||
static CONS__BakeCtx* cons__bake_ctx_begin(void);
|
static CONS__BakeCtx* cons__bake_ctx_begin(CONS__BakeParams *params);
|
||||||
static void cons__bake_ctx_release(CONS__BakeCtx *bake_ctx);
|
static void cons__bake_ctx_release(CONS__BakeCtx *bake_ctx);
|
||||||
|
|
||||||
static U32 cons__string(CONS__BakeCtx *bctx, String8 str);
|
static U32 cons__string(CONS__BakeCtx *bctx, String8 str);
|
||||||
@@ -908,4 +915,4 @@ typedef struct CONS__NameMapBaked{
|
|||||||
|
|
||||||
static CONS__NameMapBaked* cons__name_map_bake(Arena *arena, CONS_Root *root, CONS__BakeCtx *bctx, CONS__NameMap *map);
|
static CONS__NameMapBaked* cons__name_map_bake(Arena *arena, CONS_Root *root, CONS__BakeCtx *bctx, CONS__NameMap *map);
|
||||||
|
|
||||||
#endif //RADDBG_CONS_H
|
#endif // RADDBG_CONS_H
|
||||||
|
|||||||
Reference in New Issue
Block a user