collapse user clock indices into base-layer-provided clock counter; fuzzy_search -> dbgi_search

This commit is contained in:
Ryan Fleury
2024-11-04 13:12:52 -08:00
parent 3cd32fa235
commit 4a0e21d447
19 changed files with 345 additions and 439 deletions
+13 -15
View File
@@ -1,6 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
global U64 global_update_tick_idx = 0;
internal void internal void
main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **arguments, U64 arguments_count) main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **arguments, U64 arguments_count)
{ {
@@ -48,11 +50,11 @@ main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **argum
#if defined(DASM_CACHE_H) && !defined(DASM_INIT_MANUAL) #if defined(DASM_CACHE_H) && !defined(DASM_INIT_MANUAL)
dasm_init(); dasm_init();
#endif #endif
#if defined(DBGI_H) && !defined(DBGI_INIT_MANUAL) #if defined(DBGI_H) && !defined(DI_INIT_MANUAL)
di_init(); di_init();
#endif #endif
#if defined(FUZZY_SEARCH_H) && !defined(FZY_INIT_MANUAL) #if defined(DBGI_SEARCH_H) && !defined(DIS_INIT_MANUAL)
fzy_init(); dis_init();
#endif #endif
#if defined(DEMON_CORE_H) && !defined(DMN_INIT_MANUAL) #if defined(DEMON_CORE_H) && !defined(DMN_INIT_MANUAL)
dmn_init(); dmn_init();
@@ -105,22 +107,18 @@ supplement_thread_base_entry_point(void (*entry_point)(void *params), void *para
tctx_release(); tctx_release();
} }
internal U64
update_tick_idx(void)
{
U64 result = ins_atomic_u64_eval(&global_update_tick_idx);
return result;
}
internal B32 internal B32
update(void) update(void)
{ {
ProfTick(0); ProfTick(0);
#if defined(TEXT_CACHE_H) ins_atomic_u64_inc_eval(&global_update_tick_idx);
txt_user_clock_tick();
#endif
#if defined(DASM_CACHE_H)
dasm_user_clock_tick();
#endif
#if defined(GEO_CACHE_H)
geo_user_clock_tick();
#endif
#if defined(TEXTURE_CACHE_H)
tex_user_clock_tick();
#endif
#if OS_FEATURE_GRAPHICAL #if OS_FEATURE_GRAPHICAL
B32 result = frame(); B32 result = frame();
#else #else
+1
View File
@@ -6,6 +6,7 @@
internal void main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **arguments, U64 arguments_count); internal void main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **arguments, U64 arguments_count);
internal void supplement_thread_base_entry_point(void (*entry_point)(void *params), void *params); internal void supplement_thread_base_entry_point(void (*entry_point)(void *params), void *params);
internal U64 update_tick_idx(void);
internal B32 update(void); internal B32 update(void);
#endif // BASE_ENTRY_POINT_H #endif // BASE_ENTRY_POINT_H
+2 -18
View File
@@ -277,22 +277,6 @@ dasm_init(void)
dasm_shared->evictor_detector_thread = os_thread_launch(dasm_evictor_detector_thread__entry_point, 0, 0); dasm_shared->evictor_detector_thread = os_thread_launch(dasm_evictor_detector_thread__entry_point, 0, 0);
} }
////////////////////////////////
//~ rjf: User Clock
internal void
dasm_user_clock_tick(void)
{
ins_atomic_u64_inc_eval(&dasm_shared->user_clock_idx);
}
internal U64
dasm_user_clock_idx(void)
{
U64 idx = ins_atomic_u64_eval(&dasm_shared->user_clock_idx);
return idx;
}
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access
@@ -342,7 +326,7 @@ dasm_scope_touch_node__stripe_r_guarded(DASM_Scope *scope, DASM_Node *node)
DASM_Touch *touch = push_array(dasm_tctx->arena, DASM_Touch, 1); DASM_Touch *touch = push_array(dasm_tctx->arena, DASM_Touch, 1);
ins_atomic_u64_inc_eval(&node->scope_ref_count); ins_atomic_u64_inc_eval(&node->scope_ref_count);
ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds()); ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds());
ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, dasm_user_clock_idx()); ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, update_tick_idx());
touch->hash = node->hash; touch->hash = node->hash;
MemoryCopyStruct(&touch->params, &node->params); MemoryCopyStruct(&touch->params, &node->params);
touch->params.dbgi_key = di_key_copy(dasm_tctx->arena, &touch->params.dbgi_key); touch->params.dbgi_key = di_key_copy(dasm_tctx->arena, &touch->params.dbgi_key);
@@ -804,7 +788,7 @@ dasm_evictor_detector_thread__entry_point(void *p)
{ {
U64 change_gen = fs_change_gen(); U64 change_gen = fs_change_gen();
U64 check_time_us = os_now_microseconds(); U64 check_time_us = os_now_microseconds();
U64 check_time_user_clocks = dasm_user_clock_idx(); U64 check_time_user_clocks = update_tick_idx();
U64 evict_threshold_us = 10*1000000; U64 evict_threshold_us = 10*1000000;
U64 retry_threshold_us = 1*1000000; U64 retry_threshold_us = 1*1000000;
U64 evict_threshold_user_clocks = 10; U64 evict_threshold_user_clocks = 10;
-9
View File
@@ -246,9 +246,6 @@ struct DASM_Shared
{ {
Arena *arena; Arena *arena;
// rjf: user clock
U64 user_clock_idx;
// rjf: cache // rjf: cache
U64 slots_count; U64 slots_count;
U64 stripes_count; U64 stripes_count;
@@ -301,12 +298,6 @@ internal U64 dasm_line_array_code_off_from_idx(DASM_LineArray *array, U64 idx);
internal void dasm_init(void); internal void dasm_init(void);
////////////////////////////////
//~ rjf: User Clock
internal void dasm_user_clock_tick(void);
internal U64 dasm_user_clock_idx(void);
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access
+3 -3
View File
@@ -72,7 +72,7 @@ di_key_array_from_list(Arena *arena, DI_KeyList *list)
MemoryCopyStruct(&array.v[idx], &n->v); MemoryCopyStruct(&array.v[idx], &n->v);
} }
return array; return array;
} }
//////////////////////////////// ////////////////////////////////
//~ rjf: Main Layer Initialization //~ rjf: Main Layer Initialization
@@ -96,7 +96,7 @@ di_init(void)
di_shared->u2p_ring_mutex = os_mutex_alloc(); di_shared->u2p_ring_mutex = os_mutex_alloc();
di_shared->u2p_ring_cv = os_condition_variable_alloc(); di_shared->u2p_ring_cv = os_condition_variable_alloc();
di_shared->u2p_ring_size = KB(64); di_shared->u2p_ring_size = KB(64);
di_shared->u2p_ring_base = push_array_no_zero(arena, U8, di_shared->u2p_ring_size); di_shared->u2p_ring_base = push_array_no_zero(arena, U8, di_shared->u2p_ring_size);
di_shared->p2u_ring_mutex = os_mutex_alloc(); di_shared->p2u_ring_mutex = os_mutex_alloc();
di_shared->p2u_ring_cv = os_condition_variable_alloc(); di_shared->p2u_ring_cv = os_condition_variable_alloc();
di_shared->p2u_ring_size = KB(64); di_shared->p2u_ring_size = KB(64);
@@ -470,7 +470,7 @@ di_rdi_from_key(DI_Scope *scope, DI_Key *key, U64 endt_us)
scratch_end(scratch); scratch_end(scratch);
} }
return result; return result;
} }
//////////////////////////////// ////////////////////////////////
//~ rjf: Parse Threads //~ rjf: Parse Threads
+3 -3
View File
@@ -72,7 +72,7 @@ struct DI_EventList
}; };
//////////////////////////////// ////////////////////////////////
//~ rjf: Cache Types //~ rjf: Debug Info Cache Types
typedef struct DI_StringChunkNode DI_StringChunkNode; typedef struct DI_StringChunkNode DI_StringChunkNode;
struct DI_StringChunkNode struct DI_StringChunkNode
@@ -161,7 +161,7 @@ struct DI_Shared
{ {
Arena *arena; Arena *arena;
// rjf: node cache // rjf: debug info cache
U64 slots_count; U64 slots_count;
DI_Slot *slots; DI_Slot *slots;
U64 stripes_count; U64 stripes_count;
@@ -239,7 +239,7 @@ internal void di_close(DI_Key *key);
internal RDI_Parsed *di_rdi_from_key(DI_Scope *scope, DI_Key *key, U64 endt_us); internal RDI_Parsed *di_rdi_from_key(DI_Scope *scope, DI_Key *key, U64 endt_us);
//////////////////////////////// ////////////////////////////////
//~ rjf: Parse Threads //~ rjf: Asynchronous Parse Work
internal B32 di_u2p_enqueue_key(DI_Key *key, U64 endt_us); internal B32 di_u2p_enqueue_key(DI_Key *key, U64 endt_us);
internal void di_u2p_dequeue_key(Arena *arena, DI_Key *out_key); internal void di_u2p_dequeue_key(Arena *arena, DI_Key *out_key);
@@ -5,7 +5,7 @@
//~ rjf: Helpers //~ rjf: Helpers
internal U64 internal U64
fzy_hash_from_string(U64 seed, String8 string) dis_hash_from_string(U64 seed, String8 string)
{ {
U64 result = seed; U64 result = seed;
for(U64 i = 0; i < string.size; i += 1) for(U64 i = 0; i < string.size; i += 1)
@@ -16,20 +16,20 @@ fzy_hash_from_string(U64 seed, String8 string)
} }
internal U64 internal U64
fzy_hash_from_params(FZY_Params *params) dis_hash_from_params(DIS_Params *params)
{ {
U64 hash = 5381; U64 hash = 5381;
hash = fzy_hash_from_string(hash, str8_struct(&params->target)); hash = dis_hash_from_string(hash, str8_struct(&params->target));
for(U64 idx = 0; idx < params->dbgi_keys.count; idx += 1) for(U64 idx = 0; idx < params->dbgi_keys.count; idx += 1)
{ {
hash = fzy_hash_from_string(hash, str8_struct(&params->dbgi_keys.v[idx].min_timestamp)); hash = dis_hash_from_string(hash, str8_struct(&params->dbgi_keys.v[idx].min_timestamp));
hash = fzy_hash_from_string(hash, params->dbgi_keys.v[idx].path); hash = dis_hash_from_string(hash, params->dbgi_keys.v[idx].path);
} }
return hash; return hash;
} }
internal U64 internal U64
fzy_item_num_from_array_element_idx__linear_search(FZY_ItemArray *array, U64 element_idx) dis_item_num_from_array_element_idx__linear_search(DIS_ItemArray *array, U64 element_idx)
{ {
U64 fuzzy_item_num = 0; U64 fuzzy_item_num = 0;
for(U64 idx = 0; idx < array->count; idx += 1) for(U64 idx = 0; idx < array->count; idx += 1)
@@ -44,7 +44,7 @@ fzy_item_num_from_array_element_idx__linear_search(FZY_ItemArray *array, U64 ele
} }
internal String8 internal String8
fzy_item_string_from_rdi_target_element_idx(RDI_Parsed *rdi, RDI_SectionKind target, U64 element_idx) dis_item_string_from_rdi_target_element_idx(RDI_Parsed *rdi, RDI_SectionKind target, U64 element_idx)
{ {
String8 result = {0}; String8 result = {0};
switch(target) switch(target)
@@ -83,10 +83,10 @@ fzy_item_string_from_rdi_target_element_idx(RDI_Parsed *rdi, RDI_SectionKind tar
return result; return result;
} }
internal FZY_Params internal DIS_Params
fzy_params_copy(Arena *arena, FZY_Params *src) dis_params_copy(Arena *arena, DIS_Params *src)
{ {
FZY_Params dst = zero_struct; DIS_Params dst = zero_struct;
MemoryCopyStruct(&dst, src); MemoryCopyStruct(&dst, src);
dst.dbgi_keys.v = push_array(arena, DI_Key, dst.dbgi_keys.count); dst.dbgi_keys.v = push_array(arena, DI_Key, dst.dbgi_keys.count);
MemoryCopy(dst.dbgi_keys.v, src->dbgi_keys.v, sizeof(DI_Key)*src->dbgi_keys.count); MemoryCopy(dst.dbgi_keys.v, src->dbgi_keys.v, sizeof(DI_Key)*src->dbgi_keys.count);
@@ -101,88 +101,88 @@ fzy_params_copy(Arena *arena, FZY_Params *src)
//~ rjf: Main Layer Initialization //~ rjf: Main Layer Initialization
internal void internal void
fzy_init(void) dis_init(void)
{ {
Arena *arena = arena_alloc(); Arena *arena = arena_alloc();
fzy_shared = push_array(arena, FZY_Shared, 1); dis_shared = push_array(arena, DIS_Shared, 1);
fzy_shared->arena = arena; dis_shared->arena = arena;
fzy_shared->slots_count = 256; dis_shared->slots_count = 256;
fzy_shared->stripes_count = os_get_system_info()->logical_processor_count; dis_shared->stripes_count = os_get_system_info()->logical_processor_count;
fzy_shared->slots = push_array(arena, FZY_Slot, fzy_shared->slots_count); dis_shared->slots = push_array(arena, DIS_Slot, dis_shared->slots_count);
fzy_shared->stripes = push_array(arena, FZY_Stripe, fzy_shared->stripes_count); dis_shared->stripes = push_array(arena, DIS_Stripe, dis_shared->stripes_count);
for(U64 idx = 0; idx < fzy_shared->stripes_count; idx += 1) for(U64 idx = 0; idx < dis_shared->stripes_count; idx += 1)
{ {
fzy_shared->stripes[idx].arena = arena_alloc(); dis_shared->stripes[idx].arena = arena_alloc();
fzy_shared->stripes[idx].rw_mutex = os_rw_mutex_alloc(); dis_shared->stripes[idx].rw_mutex = os_rw_mutex_alloc();
fzy_shared->stripes[idx].cv = os_condition_variable_alloc(); dis_shared->stripes[idx].cv = os_condition_variable_alloc();
} }
fzy_shared->thread_count = Min(os_get_system_info()->logical_processor_count, 2); dis_shared->thread_count = Min(os_get_system_info()->logical_processor_count, 2);
fzy_shared->threads = push_array(arena, FZY_Thread, fzy_shared->thread_count); dis_shared->threads = push_array(arena, DIS_Thread, dis_shared->thread_count);
for(U64 idx = 0; idx < fzy_shared->thread_count; idx += 1) for(U64 idx = 0; idx < dis_shared->thread_count; idx += 1)
{ {
fzy_shared->threads[idx].u2f_ring_mutex = os_mutex_alloc(); dis_shared->threads[idx].u2f_ring_mutex = os_mutex_alloc();
fzy_shared->threads[idx].u2f_ring_cv = os_condition_variable_alloc(); dis_shared->threads[idx].u2f_ring_cv = os_condition_variable_alloc();
fzy_shared->threads[idx].u2f_ring_size = KB(64); dis_shared->threads[idx].u2f_ring_size = KB(64);
fzy_shared->threads[idx].u2f_ring_base = push_array_no_zero(arena, U8, fzy_shared->threads[idx].u2f_ring_size); dis_shared->threads[idx].u2f_ring_base = push_array_no_zero(arena, U8, dis_shared->threads[idx].u2f_ring_size);
fzy_shared->threads[idx].thread = os_thread_launch(fzy_search_thread__entry_point, (void *)idx, 0); dis_shared->threads[idx].thread = os_thread_launch(dis_search_thread__entry_point, (void *)idx, 0);
} }
} }
//////////////////////////////// ////////////////////////////////
//~ rjf: Scope Functions //~ rjf: Scope Functions
internal FZY_Scope * internal DIS_Scope *
fzy_scope_open(void) dis_scope_open(void)
{ {
if(fzy_tctx == 0) if(dis_tctx == 0)
{ {
Arena *arena = arena_alloc(); Arena *arena = arena_alloc();
fzy_tctx = push_array(arena, FZY_TCTX, 1); dis_tctx = push_array(arena, DIS_TCTX, 1);
fzy_tctx->arena = arena; dis_tctx->arena = arena;
} }
FZY_Scope *scope = fzy_tctx->free_scope; DIS_Scope *scope = dis_tctx->free_scope;
if(scope != 0) if(scope != 0)
{ {
SLLStackPop(fzy_tctx->free_scope); SLLStackPop(dis_tctx->free_scope);
} }
else else
{ {
scope = push_array_no_zero(fzy_tctx->arena, FZY_Scope, 1); scope = push_array_no_zero(dis_tctx->arena, DIS_Scope, 1);
} }
MemoryZeroStruct(scope); MemoryZeroStruct(scope);
return scope; return scope;
} }
internal void internal void
fzy_scope_close(FZY_Scope *scope) dis_scope_close(DIS_Scope *scope)
{ {
for(FZY_Touch *t = scope->first_touch, *next = 0; t != 0; t = next) for(DIS_Touch *t = scope->first_touch, *next = 0; t != 0; t = next)
{ {
next = t->next; next = t->next;
SLLStackPush(fzy_tctx->free_touch, t); SLLStackPush(dis_tctx->free_touch, t);
if(t->node != 0) if(t->node != 0)
{ {
ins_atomic_u64_dec_eval(&t->node->touch_count); ins_atomic_u64_dec_eval(&t->node->touch_count);
} }
} }
SLLStackPush(fzy_tctx->free_scope, scope); SLLStackPush(dis_tctx->free_scope, scope);
} }
internal void internal void
fzy_scope_touch_node__stripe_mutex_r_guarded(FZY_Scope *scope, FZY_Node *node) dis_scope_touch_node__stripe_mutex_r_guarded(DIS_Scope *scope, DIS_Node *node)
{ {
if(node != 0) if(node != 0)
{ {
ins_atomic_u64_inc_eval(&node->touch_count); ins_atomic_u64_inc_eval(&node->touch_count);
} }
FZY_Touch *touch = fzy_tctx->free_touch; DIS_Touch *touch = dis_tctx->free_touch;
if(touch != 0) if(touch != 0)
{ {
SLLStackPop(fzy_tctx->free_touch); SLLStackPop(dis_tctx->free_touch);
} }
else else
{ {
touch = push_array_no_zero(fzy_tctx->arena, FZY_Touch, 1); touch = push_array_no_zero(dis_tctx->arena, DIS_Touch, 1);
} }
MemoryZeroStruct(touch); MemoryZeroStruct(touch);
SLLQueuePush(scope->first_touch, scope->last_touch, touch); SLLQueuePush(scope->first_touch, scope->last_touch, touch);
@@ -192,27 +192,27 @@ fzy_scope_touch_node__stripe_mutex_r_guarded(FZY_Scope *scope, FZY_Node *node)
//////////////////////////////// ////////////////////////////////
//~ rjf: Cache Lookup Functions //~ rjf: Cache Lookup Functions
internal FZY_ItemArray internal DIS_ItemArray
fzy_items_from_key_params_query(FZY_Scope *scope, U128 key, FZY_Params *params, String8 query, U64 endt_us, B32 *stale_out) dis_items_from_key_params_query(DIS_Scope *scope, U128 key, DIS_Params *params, String8 query, U64 endt_us, B32 *stale_out)
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
FZY_ItemArray items = {0}; DIS_ItemArray items = {0};
//- rjf: hash parameters //- rjf: hash parameters
U64 params_hash = fzy_hash_from_params(params); U64 params_hash = dis_hash_from_params(params);
//- rjf: unpack key //- rjf: unpack key
U64 slot_idx = key.u64[1]%fzy_shared->slots_count; U64 slot_idx = key.u64[1]%dis_shared->slots_count;
U64 stripe_idx = slot_idx%fzy_shared->stripes_count; U64 stripe_idx = slot_idx%dis_shared->stripes_count;
FZY_Slot *slot = &fzy_shared->slots[slot_idx]; DIS_Slot *slot = &dis_shared->slots[slot_idx];
FZY_Stripe *stripe = &fzy_shared->stripes[stripe_idx]; DIS_Stripe *stripe = &dis_shared->stripes[stripe_idx];
//- rjf: query and/or request //- rjf: query and/or request
OS_MutexScopeR(stripe->rw_mutex) for(;;) OS_MutexScopeR(stripe->rw_mutex) for(;;)
{ {
// rjf: map key -> node // rjf: map key -> node
FZY_Node *node = 0; DIS_Node *node = 0;
for(FZY_Node *n = slot->first; n != 0; n = n->next) for(DIS_Node *n = slot->first; n != 0; n = n->next)
{ {
if(u128_match(n->key, key)) if(u128_match(n->key, key))
{ {
@@ -224,7 +224,7 @@ fzy_items_from_key_params_query(FZY_Scope *scope, U128 key, FZY_Params *params,
// rjf: no node? -> allocate // rjf: no node? -> allocate
if(node == 0) OS_MutexScopeRWPromote(stripe->rw_mutex) if(node == 0) OS_MutexScopeRWPromote(stripe->rw_mutex)
{ {
node = push_array(stripe->arena, FZY_Node, 1); node = push_array(stripe->arena, DIS_Node, 1);
SLLQueuePush(slot->first, slot->last, node); SLLQueuePush(slot->first, slot->last, node);
node->key = key; node->key = key;
for(U64 idx = 0; idx < ArrayCount(node->buckets); idx += 1) for(U64 idx = 0; idx < ArrayCount(node->buckets); idx += 1)
@@ -238,7 +238,7 @@ fzy_items_from_key_params_query(FZY_Scope *scope, U128 key, FZY_Params *params,
if(params_hash == node->buckets[node->gen%ArrayCount(node->buckets)].params_hash && if(params_hash == node->buckets[node->gen%ArrayCount(node->buckets)].params_hash &&
node->gen != 0) node->gen != 0)
{ {
fzy_scope_touch_node__stripe_mutex_r_guarded(scope, node); dis_scope_touch_node__stripe_mutex_r_guarded(scope, node);
items = node->gen_items; items = node->gen_items;
stale = !str8_match(query, node->buckets[node->gen%ArrayCount(node->buckets)].query, 0); stale = !str8_match(query, node->buckets[node->gen%ArrayCount(node->buckets)].query, 0);
if(stale_out != 0) if(stale_out != 0)
@@ -255,11 +255,11 @@ fzy_items_from_key_params_query(FZY_Scope *scope, U128 key, FZY_Params *params,
node->submit_gen += 1; node->submit_gen += 1;
arena_clear(node->buckets[node->submit_gen%ArrayCount(node->buckets)].arena); arena_clear(node->buckets[node->submit_gen%ArrayCount(node->buckets)].arena);
node->buckets[node->submit_gen%ArrayCount(node->buckets)].query = push_str8_copy(node->buckets[node->submit_gen%ArrayCount(node->buckets)].arena, query); node->buckets[node->submit_gen%ArrayCount(node->buckets)].query = push_str8_copy(node->buckets[node->submit_gen%ArrayCount(node->buckets)].arena, query);
node->buckets[node->submit_gen%ArrayCount(node->buckets)].params = fzy_params_copy(node->buckets[node->submit_gen%ArrayCount(node->buckets)].arena, params); node->buckets[node->submit_gen%ArrayCount(node->buckets)].params = dis_params_copy(node->buckets[node->submit_gen%ArrayCount(node->buckets)].arena, params);
node->buckets[node->submit_gen%ArrayCount(node->buckets)].params_hash = params_hash; node->buckets[node->submit_gen%ArrayCount(node->buckets)].params_hash = params_hash;
} }
if((node->submit_gen > node->gen+1 || os_now_microseconds() >= node->last_time_submitted_us+100000) && if((node->submit_gen > node->gen+1 || os_now_microseconds() >= node->last_time_submitted_us+100000) &&
fzy_u2s_enqueue_req(key, endt_us)) dis_u2s_enqueue_req(key, endt_us))
{ {
node->last_time_submitted_us = os_now_microseconds(); node->last_time_submitted_us = os_now_microseconds();
} }
@@ -283,10 +283,10 @@ fzy_items_from_key_params_query(FZY_Scope *scope, U128 key, FZY_Params *params,
//~ rjf: Searcher Threads //~ rjf: Searcher Threads
internal B32 internal B32
fzy_u2s_enqueue_req(U128 key, U64 endt_us) dis_u2s_enqueue_req(U128 key, U64 endt_us)
{ {
B32 sent = 0; B32 sent = 0;
FZY_Thread *thread = &fzy_shared->threads[key.u64[1]%fzy_shared->thread_count]; DIS_Thread *thread = &dis_shared->threads[key.u64[1]%dis_shared->thread_count];
OS_MutexScope(thread->u2f_ring_mutex) for(;;) OS_MutexScope(thread->u2f_ring_mutex) for(;;)
{ {
U64 unconsumed_size = thread->u2f_ring_write_pos - thread->u2f_ring_read_pos; U64 unconsumed_size = thread->u2f_ring_write_pos - thread->u2f_ring_read_pos;
@@ -307,7 +307,7 @@ fzy_u2s_enqueue_req(U128 key, U64 endt_us)
} }
internal void internal void
fzy_u2s_dequeue_req(Arena *arena, FZY_Thread *thread, U128 *key_out) dis_u2s_dequeue_req(Arena *arena, DIS_Thread *thread, U128 *key_out)
{ {
OS_MutexScope(thread->u2f_ring_mutex) for(;;) OS_MutexScope(thread->u2f_ring_mutex) for(;;)
{ {
@@ -323,7 +323,7 @@ fzy_u2s_dequeue_req(Arena *arena, FZY_Thread *thread, U128 *key_out)
} }
internal int internal int
fzy_qsort_compare_items(FZY_Item *a, FZY_Item *b) dis_qsort_compare_items(DIS_Item *a, DIS_Item *b)
{ {
int result = 0; int result = 0;
if(a->match_ranges.count > b->match_ranges.count) if(a->match_ranges.count > b->match_ranges.count)
@@ -346,10 +346,10 @@ fzy_qsort_compare_items(FZY_Item *a, FZY_Item *b)
} }
internal void internal void
fzy_search_thread__entry_point(void *p) dis_search_thread__entry_point(void *p)
{ {
ThreadNameF("[fzy] searcher #%I64u", (U64)p); ThreadNameF("[fzy] searcher #%I64u", (U64)p);
FZY_Thread *thread = &fzy_shared->threads[(U64)p]; DIS_Thread *thread = &dis_shared->threads[(U64)p];
for(;;) for(;;)
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
@@ -359,11 +359,11 @@ fzy_search_thread__entry_point(void *p)
//- rjf: dequeue next request //- rjf: dequeue next request
// //
U128 key = {0}; U128 key = {0};
fzy_u2s_dequeue_req(scratch.arena, thread, &key); dis_u2s_dequeue_req(scratch.arena, thread, &key);
U64 slot_idx = key.u64[1]%fzy_shared->slots_count; U64 slot_idx = key.u64[1]%dis_shared->slots_count;
U64 stripe_idx = slot_idx%fzy_shared->stripes_count; U64 stripe_idx = slot_idx%dis_shared->stripes_count;
FZY_Slot *slot = &fzy_shared->slots[slot_idx]; DIS_Slot *slot = &dis_shared->slots[slot_idx];
FZY_Stripe *stripe = &fzy_shared->stripes[stripe_idx]; DIS_Stripe *stripe = &dis_shared->stripes[stripe_idx];
//////////////////////////// ////////////////////////////
//- rjf: grab next exe_path/query for this key //- rjf: grab next exe_path/query for this key
@@ -371,15 +371,15 @@ fzy_search_thread__entry_point(void *p)
B32 task_is_good = 0; B32 task_is_good = 0;
Arena *task_arena = 0; Arena *task_arena = 0;
String8 query = {0}; String8 query = {0};
FZY_Params params = {RDI_SectionKind_Procedures}; DIS_Params params = {RDI_SectionKind_Procedures};
U64 initial_submit_gen = 0; U64 initial_submit_gen = 0;
OS_MutexScopeW(stripe->rw_mutex) OS_MutexScopeW(stripe->rw_mutex)
{ {
for(FZY_Node *n = slot->first; n != 0; n = n->next) for(DIS_Node *n = slot->first; n != 0; n = n->next)
{ {
if(u128_match(n->key, key)) if(u128_match(n->key, key))
{ {
FZY_Bucket *bucket = &n->buckets[n->submit_gen%ArrayCount(n->buckets)]; DIS_Bucket *bucket = &n->buckets[n->submit_gen%ArrayCount(n->buckets)];
task_is_good = 1; task_is_good = 1;
initial_submit_gen = n->submit_gen; initial_submit_gen = n->submit_gen;
task_arena = bucket->arena; task_arena = bucket->arena;
@@ -434,7 +434,7 @@ fzy_search_thread__entry_point(void *p)
//////////////////////////// ////////////////////////////
//- rjf: rdis * query * params -> item list //- rjf: rdis * query * params -> item list
// //
FZY_ItemChunkList items_list = {0}; DIS_ItemChunkList items_list = {0};
if(task_is_good) if(task_is_good)
{ {
U64 base_idx = 0; U64 base_idx = 0;
@@ -462,13 +462,13 @@ fzy_search_thread__entry_point(void *p)
FuzzyMatchRangeList matches = fuzzy_match_find(task_arena, query, name); FuzzyMatchRangeList matches = fuzzy_match_find(task_arena, query, name);
if(matches.count == matches.needle_part_count) if(matches.count == matches.needle_part_count)
{ {
FZY_ItemChunk *chunk = items_list.last; DIS_ItemChunk *chunk = items_list.last;
if(chunk == 0 || chunk->count >= chunk->cap) if(chunk == 0 || chunk->count >= chunk->cap)
{ {
chunk = push_array(scratch.arena, FZY_ItemChunk, 1); chunk = push_array(scratch.arena, DIS_ItemChunk, 1);
chunk->cap = 1024; chunk->cap = 1024;
chunk->count = 0; chunk->count = 0;
chunk->v = push_array_no_zero(scratch.arena, FZY_Item, chunk->cap); chunk->v = push_array_no_zero(scratch.arena, DIS_Item, chunk->cap);
SLLQueuePush(items_list.first, items_list.last, chunk); SLLQueuePush(items_list.first, items_list.last, chunk);
items_list.chunk_count += 1; items_list.chunk_count += 1;
} }
@@ -480,7 +480,7 @@ fzy_search_thread__entry_point(void *p)
} }
if(idx%100 == 99) OS_MutexScopeR(stripe->rw_mutex) if(idx%100 == 99) OS_MutexScopeR(stripe->rw_mutex)
{ {
for(FZY_Node *n = slot->first; n != 0; n = n->next) for(DIS_Node *n = slot->first; n != 0; n = n->next)
{ {
if(u128_match(n->key, key) && n->submit_gen > initial_submit_gen) if(u128_match(n->key, key) && n->submit_gen > initial_submit_gen)
{ {
@@ -495,15 +495,15 @@ fzy_search_thread__entry_point(void *p)
} }
//- rjf: item list -> item array //- rjf: item list -> item array
FZY_ItemArray items = {0}; DIS_ItemArray items = {0};
if(task_is_good) if(task_is_good)
{ {
items.count = items_list.total_count; items.count = items_list.total_count;
items.v = push_array_no_zero(task_arena, FZY_Item, items.count); items.v = push_array_no_zero(task_arena, DIS_Item, items.count);
U64 idx = 0; U64 idx = 0;
for(FZY_ItemChunk *chunk = items_list.first; chunk != 0; chunk = chunk->next) for(DIS_ItemChunk *chunk = items_list.first; chunk != 0; chunk = chunk->next)
{ {
MemoryCopy(items.v+idx, chunk->v, sizeof(FZY_Item)*chunk->count); MemoryCopy(items.v+idx, chunk->v, sizeof(DIS_Item)*chunk->count);
idx += chunk->count; idx += chunk->count;
} }
} }
@@ -511,7 +511,7 @@ fzy_search_thread__entry_point(void *p)
//- rjf: sort item array //- rjf: sort item array
if(items.count != 0 && query.size != 0) if(items.count != 0 && query.size != 0)
{ {
quick_sort(items.v, items.count, sizeof(FZY_Item), fzy_qsort_compare_items); quick_sort(items.v, items.count, sizeof(DIS_Item), dis_qsort_compare_items);
} }
//- rjf: commit to cache - busyloop on scope touches //- rjf: commit to cache - busyloop on scope touches
@@ -520,7 +520,7 @@ fzy_search_thread__entry_point(void *p)
for(B32 done = 0; !done;) for(B32 done = 0; !done;)
{ {
B32 found = 0; B32 found = 0;
OS_MutexScopeW(stripe->rw_mutex) for(FZY_Node *n = slot->first; n != 0; n = n->next) OS_MutexScopeW(stripe->rw_mutex) for(DIS_Node *n = slot->first; n != 0; n = n->next)
{ {
if(u128_match(n->key, key)) if(u128_match(n->key, key))
{ {
+192
View File
@@ -0,0 +1,192 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef DBGI_SEARCH_H
#define DBGI_SEARCH_H
////////////////////////////////
//~ rjf: Result Types
typedef struct DIS_Item DIS_Item;
struct DIS_Item
{
U64 idx; // indexes into whole space of parameter tables. [rdis[0] element count) [rdis[1] element count) ... [rdis[n] element count)
U64 missed_size;
FuzzyMatchRangeList match_ranges;
};
typedef struct DIS_ItemChunk DIS_ItemChunk;
struct DIS_ItemChunk
{
DIS_ItemChunk *next;
DIS_Item *v;
U64 count;
U64 cap;
};
typedef struct DIS_ItemChunkList DIS_ItemChunkList;
struct DIS_ItemChunkList
{
DIS_ItemChunk *first;
DIS_ItemChunk *last;
U64 chunk_count;
U64 total_count;
};
typedef struct DIS_ItemArray DIS_ItemArray;
struct DIS_ItemArray
{
DIS_Item *v;
U64 count;
};
////////////////////////////////
//~ rjf: Search Parameter Types
typedef struct DIS_Params DIS_Params;
struct DIS_Params
{
RDI_SectionKind target;
DI_KeyArray dbgi_keys;
};
////////////////////////////////
//~ rjf: Cache Types
typedef struct DIS_Bucket DIS_Bucket;
struct DIS_Bucket
{
Arena *arena;
String8 query;
DIS_Params params;
U64 params_hash;
};
typedef struct DIS_Node DIS_Node;
struct DIS_Node
{
DIS_Node *next;
U128 key;
U64 touch_count;
U64 last_time_submitted_us;
DIS_Bucket buckets[3];
U64 gen;
U64 submit_gen;
DIS_ItemArray gen_items;
};
typedef struct DIS_Slot DIS_Slot;
struct DIS_Slot
{
DIS_Node *first;
DIS_Node *last;
};
typedef struct DIS_Stripe DIS_Stripe;
struct DIS_Stripe
{
Arena *arena;
OS_Handle rw_mutex;
OS_Handle cv;
};
////////////////////////////////
//~ rjf: Scoped Access Types
typedef struct DIS_Touch DIS_Touch;
struct DIS_Touch
{
DIS_Touch *next;
DIS_Node *node;
};
typedef struct DIS_Scope DIS_Scope;
struct DIS_Scope
{
DIS_Scope *next;
DIS_Touch *first_touch;
DIS_Touch *last_touch;
};
typedef struct DIS_TCTX DIS_TCTX;
struct DIS_TCTX
{
Arena *arena;
DIS_Scope *free_scope;
DIS_Touch *free_touch;
};
////////////////////////////////
//~ rjf: Shared State Types
typedef struct DIS_Thread DIS_Thread;
struct DIS_Thread
{
OS_Handle thread;
OS_Handle u2f_ring_mutex;
OS_Handle u2f_ring_cv;
U64 u2f_ring_size;
U8 *u2f_ring_base;
U64 u2f_ring_write_pos;
U64 u2f_ring_read_pos;
};
typedef struct DIS_Shared DIS_Shared;
struct DIS_Shared
{
Arena *arena;
// rjf: search artifact cache table
U64 slots_count;
U64 stripes_count;
DIS_Slot *slots;
DIS_Stripe *stripes;
// rjf: threads
U64 thread_count;
DIS_Thread *threads;
};
////////////////////////////////
//~ rjf: Globals
global DIS_Shared *dis_shared = 0;
thread_static DIS_TCTX *dis_tctx = 0;
////////////////////////////////
//~ rjf: Helpers
internal U64 dis_hash_from_string(U64 seed, String8 string);
internal U64 dis_hash_from_params(DIS_Params *params);
internal U64 dis_item_num_from_array_element_idx__linear_search(DIS_ItemArray *array, U64 element_idx);
internal String8 dis_item_string_from_rdi_target_element_idx(RDI_Parsed *rdi, RDI_SectionKind target, U64 element_idx);
internal DIS_Params dis_params_copy(Arena *arena, DIS_Params *src);
////////////////////////////////
//~ rjf: Main Layer Initialization
internal void dis_init(void);
////////////////////////////////
//~ rjf: Scope Functions
internal DIS_Scope *dis_scope_open(void);
internal void dis_scope_close(DIS_Scope *scope);
internal void dis_scope_touch_node__stripe_mutex_r_guarded(DIS_Scope *scope, DIS_Node *node);
////////////////////////////////
//~ rjf: Cache Lookup Functions
internal DIS_ItemArray dis_items_from_key_params_query(DIS_Scope *scope, U128 key, DIS_Params *params, String8 query, U64 endt_us, B32 *stale_out);
////////////////////////////////
//~ rjf: Searcher Threads
internal B32 dis_u2s_enqueue_req(U128 key, U64 endt_us);
internal void dis_u2s_dequeue_req(Arena *arena, DIS_Thread *thread, U128 *key_out);
internal int dis_qsort_compare_items(DIS_Item *a, DIS_Item *b);
internal void dis_search_thread__entry_point(void *p);
#endif // DBGI_SEARCH_H
-192
View File
@@ -1,192 +0,0 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef FUZZY_SEARCH_H
#define FUZZY_SEARCH_H
////////////////////////////////
//~ rjf: Result Types
typedef struct FZY_Item FZY_Item;
struct FZY_Item
{
U64 idx; // indexes into whole space of parameter tables. [rdis[0] element count) [rdis[1] element count) ... [rdis[n] element count)
U64 missed_size;
FuzzyMatchRangeList match_ranges;
};
typedef struct FZY_ItemChunk FZY_ItemChunk;
struct FZY_ItemChunk
{
FZY_ItemChunk *next;
FZY_Item *v;
U64 count;
U64 cap;
};
typedef struct FZY_ItemChunkList FZY_ItemChunkList;
struct FZY_ItemChunkList
{
FZY_ItemChunk *first;
FZY_ItemChunk *last;
U64 chunk_count;
U64 total_count;
};
typedef struct FZY_ItemArray FZY_ItemArray;
struct FZY_ItemArray
{
FZY_Item *v;
U64 count;
};
////////////////////////////////
//~ rjf: Search Parameter Types
typedef struct FZY_Params FZY_Params;
struct FZY_Params
{
RDI_SectionKind target;
DI_KeyArray dbgi_keys;
};
////////////////////////////////
//~ rjf: Cache Types
typedef struct FZY_Bucket FZY_Bucket;
struct FZY_Bucket
{
Arena *arena;
String8 query;
FZY_Params params;
U64 params_hash;
};
typedef struct FZY_Node FZY_Node;
struct FZY_Node
{
FZY_Node *next;
U128 key;
U64 touch_count;
U64 last_time_submitted_us;
FZY_Bucket buckets[3];
U64 gen;
U64 submit_gen;
FZY_ItemArray gen_items;
};
typedef struct FZY_Slot FZY_Slot;
struct FZY_Slot
{
FZY_Node *first;
FZY_Node *last;
};
typedef struct FZY_Stripe FZY_Stripe;
struct FZY_Stripe
{
Arena *arena;
OS_Handle rw_mutex;
OS_Handle cv;
};
////////////////////////////////
//~ rjf: Scoped Access Types
typedef struct FZY_Touch FZY_Touch;
struct FZY_Touch
{
FZY_Touch *next;
FZY_Node *node;
};
typedef struct FZY_Scope FZY_Scope;
struct FZY_Scope
{
FZY_Scope *next;
FZY_Touch *first_touch;
FZY_Touch *last_touch;
};
typedef struct FZY_TCTX FZY_TCTX;
struct FZY_TCTX
{
Arena *arena;
FZY_Scope *free_scope;
FZY_Touch *free_touch;
};
////////////////////////////////
//~ rjf: Shared State Types
typedef struct FZY_Thread FZY_Thread;
struct FZY_Thread
{
OS_Handle thread;
OS_Handle u2f_ring_mutex;
OS_Handle u2f_ring_cv;
U64 u2f_ring_size;
U8 *u2f_ring_base;
U64 u2f_ring_write_pos;
U64 u2f_ring_read_pos;
};
typedef struct FZY_Shared FZY_Shared;
struct FZY_Shared
{
Arena *arena;
// rjf: search artifact cache table
U64 slots_count;
U64 stripes_count;
FZY_Slot *slots;
FZY_Stripe *stripes;
// rjf: threads
U64 thread_count;
FZY_Thread *threads;
};
////////////////////////////////
//~ rjf: Globals
global FZY_Shared *fzy_shared = 0;
thread_static FZY_TCTX *fzy_tctx = 0;
////////////////////////////////
//~ rjf: Helpers
internal U64 fzy_hash_from_string(U64 seed, String8 string);
internal U64 fzy_hash_from_params(FZY_Params *params);
internal U64 fzy_item_num_from_array_element_idx__linear_search(FZY_ItemArray *array, U64 element_idx);
internal String8 fzy_item_string_from_rdi_target_element_idx(RDI_Parsed *rdi, RDI_SectionKind target, U64 element_idx);
internal FZY_Params fzy_params_copy(Arena *arena, FZY_Params *src);
////////////////////////////////
//~ rjf: Main Layer Initialization
internal void fzy_init(void);
////////////////////////////////
//~ rjf: Scope Functions
internal FZY_Scope *fzy_scope_open(void);
internal void fzy_scope_close(FZY_Scope *scope);
internal void fzy_scope_touch_node__stripe_mutex_r_guarded(FZY_Scope *scope, FZY_Node *node);
////////////////////////////////
//~ rjf: Cache Lookup Functions
internal FZY_ItemArray fzy_items_from_key_params_query(FZY_Scope *scope, U128 key, FZY_Params *params, String8 query, U64 endt_us, B32 *stale_out);
////////////////////////////////
//~ rjf: Searcher Threads
internal B32 fzy_u2s_enqueue_req(U128 key, U64 endt_us);
internal void fzy_u2s_dequeue_req(Arena *arena, FZY_Thread *thread, U128 *key_out);
internal int fzy_qsort_compare_items(FZY_Item *a, FZY_Item *b);
internal void fzy_search_thread__entry_point(void *p);
#endif // FUZZY_SEARCH_H
+2 -17
View File
@@ -42,21 +42,6 @@ geo_tctx_ensure_inited(void)
} }
} }
////////////////////////////////
//~ rjf: User Clock
internal void
geo_user_clock_tick(void)
{
ins_atomic_u64_inc_eval(&geo_shared->user_clock_idx);
}
internal U64
geo_user_clock_idx(void)
{
return ins_atomic_u64_eval(&geo_shared->user_clock_idx);
}
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access
@@ -110,7 +95,7 @@ geo_scope_touch_node__stripe_r_guarded(GEO_Scope *scope, GEO_Node *node)
GEO_Touch *touch = geo_tctx->free_touch; GEO_Touch *touch = geo_tctx->free_touch;
ins_atomic_u64_inc_eval(&node->scope_ref_count); ins_atomic_u64_inc_eval(&node->scope_ref_count);
ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds()); ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds());
ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, geo_user_clock_idx()); ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, update_tick_idx());
if(touch != 0) if(touch != 0)
{ {
SLLStackPop(geo_tctx->free_touch); SLLStackPop(geo_tctx->free_touch);
@@ -325,7 +310,7 @@ geo_evictor_thread__entry_point(void *p)
for(;;) for(;;)
{ {
U64 check_time_us = os_now_microseconds(); U64 check_time_us = os_now_microseconds();
U64 check_time_user_clocks = geo_user_clock_idx(); U64 check_time_user_clocks = update_tick_idx();
U64 evict_threshold_us = 10*1000000; U64 evict_threshold_us = 10*1000000;
U64 evict_threshold_user_clocks = 10; U64 evict_threshold_user_clocks = 10;
for(U64 slot_idx = 0; slot_idx < geo_shared->slots_count; slot_idx += 1) for(U64 slot_idx = 0; slot_idx < geo_shared->slots_count; slot_idx += 1)
-9
View File
@@ -72,9 +72,6 @@ struct GEO_Shared
{ {
Arena *arena; Arena *arena;
// rjf: user clock
U64 user_clock_idx;
// rjf: cache // rjf: cache
U64 slots_count; U64 slots_count;
U64 stripes_count; U64 stripes_count;
@@ -110,12 +107,6 @@ internal void geo_init(void);
internal void geo_tctx_ensure_inited(void); internal void geo_tctx_ensure_inited(void);
////////////////////////////////
//~ rjf: User Clock
internal void geo_user_clock_tick(void);
internal U64 geo_user_clock_idx(void);
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access
+29 -29
View File
@@ -4880,7 +4880,7 @@ rd_window_frame(RD_Window *ws)
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
DI_Scope *di_scope = di_scope_open(); DI_Scope *di_scope = di_scope_open();
FZY_Scope *fzy_scope = fzy_scope_open(); DIS_Scope *dis_scope = dis_scope_open();
DI_KeyList dbgi_keys_list = d_push_active_dbgi_key_list(scratch.arena); DI_KeyList dbgi_keys_list = d_push_active_dbgi_key_list(scratch.arena);
DI_KeyArray dbgi_keys = di_key_array_from_list(scratch.arena, &dbgi_keys_list); DI_KeyArray dbgi_keys = di_key_array_from_list(scratch.arena, &dbgi_keys_list);
@@ -5012,14 +5012,14 @@ rd_window_frame(RD_Window *ws)
//- rjf: gather globals //- rjf: gather globals
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Globals && query_word.size != 0) if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Globals && query_word.size != 0)
{ {
U128 fzy_key = {d_hash_from_string(str8_lit("autocomp_globals_fzy_key"))}; U128 dis_key = {d_hash_from_string(str8_lit("autocomp_globals_dis_key"))};
FZY_Params fzy_params = DIS_Params dis_params =
{ {
RDI_SectionKind_GlobalVariables, RDI_SectionKind_GlobalVariables,
dbgi_keys, dbgi_keys,
}; };
B32 is_stale = 0; B32 is_stale = 0;
FZY_ItemArray items = fzy_items_from_key_params_query(fzy_scope, fzy_key, &fzy_params, query_word, 0, &is_stale); DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1) for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
{ {
// rjf: determine dbgi/rdi to which this item belongs // rjf: determine dbgi/rdi to which this item belongs
@@ -5030,7 +5030,7 @@ rd_window_frame(RD_Window *ws)
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1) for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
{ {
U64 table_count = 0; U64 table_count = 0;
rdi_section_raw_table_from_kind(rdis[rdi_idx], fzy_params.target, &table_count); rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count) if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
{ {
dbgi_key = dbgi_keys.v[rdi_idx]; dbgi_key = dbgi_keys.v[rdi_idx];
@@ -5042,7 +5042,7 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: unpack info // rjf: unpack info
String8 name = fzy_item_string_from_rdi_target_element_idx(rdi, fzy_params.target, items.v[idx].idx-base_idx); String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
// rjf: push item // rjf: push item
RD_AutoCompListerItem item = {0}; RD_AutoCompListerItem item = {0};
@@ -5059,14 +5059,14 @@ rd_window_frame(RD_Window *ws)
//- rjf: gather thread locals //- rjf: gather thread locals
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_ThreadLocals && query_word.size != 0) if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_ThreadLocals && query_word.size != 0)
{ {
U128 fzy_key = {d_hash_from_string(str8_lit("autocomp_tvars_fzy_key"))}; U128 dis_key = {d_hash_from_string(str8_lit("autocomp_tvars_dis_key"))};
FZY_Params fzy_params = DIS_Params dis_params =
{ {
RDI_SectionKind_ThreadVariables, RDI_SectionKind_ThreadVariables,
dbgi_keys, dbgi_keys,
}; };
B32 is_stale = 0; B32 is_stale = 0;
FZY_ItemArray items = fzy_items_from_key_params_query(fzy_scope, fzy_key, &fzy_params, query_word, 0, &is_stale); DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1) for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
{ {
// rjf: determine dbgi/rdi to which this item belongs // rjf: determine dbgi/rdi to which this item belongs
@@ -5077,7 +5077,7 @@ rd_window_frame(RD_Window *ws)
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1) for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
{ {
U64 table_count = 0; U64 table_count = 0;
rdi_section_raw_table_from_kind(rdis[rdi_idx], fzy_params.target, &table_count); rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count) if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
{ {
dbgi_key = dbgi_keys.v[rdi_idx]; dbgi_key = dbgi_keys.v[rdi_idx];
@@ -5089,7 +5089,7 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: unpack info // rjf: unpack info
String8 name = fzy_item_string_from_rdi_target_element_idx(rdi, fzy_params.target, items.v[idx].idx-base_idx); String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
// rjf: push item // rjf: push item
RD_AutoCompListerItem item = {0}; RD_AutoCompListerItem item = {0};
@@ -5106,14 +5106,14 @@ rd_window_frame(RD_Window *ws)
//- rjf: gather procedures //- rjf: gather procedures
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Procedures && query_word.size != 0) if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Procedures && query_word.size != 0)
{ {
U128 fzy_key = {d_hash_from_string(str8_lit("autocomp_procedures_fzy_key"))}; U128 dis_key = {d_hash_from_string(str8_lit("autocomp_procedures_dis_key"))};
FZY_Params fzy_params = DIS_Params dis_params =
{ {
RDI_SectionKind_Procedures, RDI_SectionKind_Procedures,
dbgi_keys, dbgi_keys,
}; };
B32 is_stale = 0; B32 is_stale = 0;
FZY_ItemArray items = fzy_items_from_key_params_query(fzy_scope, fzy_key, &fzy_params, query_word, 0, &is_stale); DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1) for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
{ {
// rjf: determine dbgi/rdi to which this item belongs // rjf: determine dbgi/rdi to which this item belongs
@@ -5124,7 +5124,7 @@ rd_window_frame(RD_Window *ws)
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1) for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
{ {
U64 table_count = 0; U64 table_count = 0;
rdi_section_raw_table_from_kind(rdis[rdi_idx], fzy_params.target, &table_count); rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count) if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
{ {
dbgi_key = dbgi_keys.v[rdi_idx]; dbgi_key = dbgi_keys.v[rdi_idx];
@@ -5136,7 +5136,7 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: unpack info // rjf: unpack info
String8 name = fzy_item_string_from_rdi_target_element_idx(rdi, fzy_params.target, items.v[idx].idx-base_idx); String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
// rjf: push item // rjf: push item
RD_AutoCompListerItem item = {0}; RD_AutoCompListerItem item = {0};
@@ -5153,14 +5153,14 @@ rd_window_frame(RD_Window *ws)
//- rjf: gather types //- rjf: gather types
if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Types && query_word.size != 0) if(ws->autocomp_lister_params.flags & RD_AutoCompListerFlag_Types && query_word.size != 0)
{ {
U128 fzy_key = {d_hash_from_string(str8_lit("autocomp_types_fzy_key"))}; U128 dis_key = {d_hash_from_string(str8_lit("autocomp_types_dis_key"))};
FZY_Params fzy_params = DIS_Params dis_params =
{ {
RDI_SectionKind_UDTs, RDI_SectionKind_UDTs,
dbgi_keys, dbgi_keys,
}; };
B32 is_stale = 0; B32 is_stale = 0;
FZY_ItemArray items = fzy_items_from_key_params_query(fzy_scope, fzy_key, &fzy_params, query_word, 0, &is_stale); DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, dis_key, &dis_params, query_word, 0, &is_stale);
for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1) for(U64 idx = 0; idx < 20 && idx < items.count; idx += 1)
{ {
// rjf: determine dbgi/rdi to which this item belongs // rjf: determine dbgi/rdi to which this item belongs
@@ -5171,7 +5171,7 @@ rd_window_frame(RD_Window *ws)
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1) for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
{ {
U64 table_count = 0; U64 table_count = 0;
rdi_section_raw_table_from_kind(rdis[rdi_idx], fzy_params.target, &table_count); rdi_section_raw_table_from_kind(rdis[rdi_idx], dis_params.target, &table_count);
if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count) if(base_idx <= items.v[idx].idx && items.v[idx].idx < base_idx + table_count)
{ {
dbgi_key = dbgi_keys.v[rdi_idx]; dbgi_key = dbgi_keys.v[rdi_idx];
@@ -5183,7 +5183,7 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: unpack info // rjf: unpack info
String8 name = fzy_item_string_from_rdi_target_element_idx(rdi, fzy_params.target, items.v[idx].idx-base_idx); String8 name = dis_item_string_from_rdi_target_element_idx(rdi, dis_params.target, items.v[idx].idx-base_idx);
// rjf: push item // rjf: push item
RD_AutoCompListerItem item = {0}; RD_AutoCompListerItem item = {0};
@@ -5467,7 +5467,7 @@ rd_window_frame(RD_Window *ws)
} }
} }
fzy_scope_close(fzy_scope); dis_scope_close(dis_scope);
di_scope_close(di_scope); di_scope_close(di_scope);
scratch_end(scratch); scratch_end(scratch);
} }
@@ -9323,7 +9323,7 @@ rd_ev_view_rule_expr_num_from_id__meta_ctrl_entities(U64 id, void *user_data, CT
typedef struct RD_DebugInfoTableExpandAccel RD_DebugInfoTableExpandAccel; typedef struct RD_DebugInfoTableExpandAccel RD_DebugInfoTableExpandAccel;
struct RD_DebugInfoTableExpandAccel struct RD_DebugInfoTableExpandAccel
{ {
FZY_ItemArray items; DIS_ItemArray items;
}; };
internal EV_ExpandInfo internal EV_ExpandInfo
@@ -9348,8 +9348,8 @@ rd_ev_view_rule_expr_expand_info__debug_info_tables(Arena *arena, EV_View *view,
//- rjf: query all filtered items from dbgi searching system //- rjf: query all filtered items from dbgi searching system
U128 fuzzy_search_key = {(U64)view, (U64)section}; U128 fuzzy_search_key = {(U64)view, (U64)section};
B32 items_stale = 0; B32 items_stale = 0;
FZY_Params params = {section, dbgi_keys}; DIS_Params params = {section, dbgi_keys};
accel->items = fzy_items_from_key_params_query(rd_state->frame_fzy_scope, fuzzy_search_key, &params, filter, endt_us, &items_stale); accel->items = dis_items_from_key_params_query(rd_state->frame_dis_scope, fuzzy_search_key, &params, filter, endt_us, &items_stale);
if(items_stale) if(items_stale)
{ {
rd_request_frame(); rd_request_frame();
@@ -9376,7 +9376,7 @@ rd_ev_view_rule_expr_expand_range_info__debug_info_tables(Arena *arena, EV_View
for EachIndex(row_expr_idx, result.row_exprs_count) for EachIndex(row_expr_idx, result.row_exprs_count)
{ {
// rjf: unpack row info // rjf: unpack row info
FZY_Item *item = &accel->items.v[idx_range.min + row_expr_idx]; DIS_Item *item = &accel->items.v[idx_range.min + row_expr_idx];
// rjf: determine module to which this item belongs // rjf: determine module to which this item belongs
E_Module *module = e_parse_ctx->primary_module; E_Module *module = e_parse_ctx->primary_module;
@@ -9488,7 +9488,7 @@ internal U64
rd_ev_view_rule_expr_num_from_id__debug_info_tables(U64 id, void *user_data, RDI_SectionKind section) rd_ev_view_rule_expr_num_from_id__debug_info_tables(U64 id, void *user_data, RDI_SectionKind section)
{ {
RD_DebugInfoTableExpandAccel *accel = (RD_DebugInfoTableExpandAccel *)user_data; RD_DebugInfoTableExpandAccel *accel = (RD_DebugInfoTableExpandAccel *)user_data;
U64 num = fzy_item_num_from_array_element_idx__linear_search(&accel->items, id-1); U64 num = dis_item_num_from_array_element_idx__linear_search(&accel->items, id-1);
return num; return num;
} }
@@ -11704,7 +11704,7 @@ rd_frame(void)
if(depth == 0) if(depth == 0)
{ {
rd_state->frame_di_scope = di_scope_open(); rd_state->frame_di_scope = di_scope_open();
rd_state->frame_fzy_scope = fzy_scope_open(); rd_state->frame_dis_scope = dis_scope_open();
} }
B32 allow_text_hotkeys = !rd_state->text_edit_mode; B32 allow_text_hotkeys = !rd_state->text_edit_mode;
rd_state->text_edit_mode = 0; rd_state->text_edit_mode = 0;
@@ -16739,7 +16739,7 @@ rd_frame(void)
if(depth == 0) if(depth == 0)
{ {
di_scope_close(rd_state->frame_di_scope); di_scope_close(rd_state->frame_di_scope);
fzy_scope_close(rd_state->frame_fzy_scope); dis_scope_close(rd_state->frame_dis_scope);
} }
////////////////////////////// //////////////////////////////
+1 -1
View File
@@ -822,7 +822,7 @@ struct RD_State
// rjf: frame parameters // rjf: frame parameters
F32 frame_dt; F32 frame_dt;
DI_Scope *frame_di_scope; DI_Scope *frame_di_scope;
FZY_Scope *frame_fzy_scope; DIS_Scope *frame_dis_scope;
// rjf: ambiguous path table // rjf: ambiguous path table
U64 ambiguous_path_slots_count; U64 ambiguous_path_slots_count;
+3 -2
View File
@@ -595,8 +595,8 @@
#include "regs/regs.h" #include "regs/regs.h"
#include "regs/rdi/regs_rdi.h" #include "regs/rdi/regs_rdi.h"
#include "dbgi/dbgi.h" #include "dbgi/dbgi.h"
#include "dbgi_search/dbgi_search.h"
#include "dasm_cache/dasm_cache.h" #include "dasm_cache/dasm_cache.h"
#include "fuzzy_search/fuzzy_search.h"
#include "demon/demon_inc.h" #include "demon/demon_inc.h"
#include "eval/eval_inc.h" #include "eval/eval_inc.h"
#include "eval_visualization/eval_visualization_inc.h" #include "eval_visualization/eval_visualization_inc.h"
@@ -637,8 +637,8 @@
#include "regs/regs.c" #include "regs/regs.c"
#include "regs/rdi/regs_rdi.c" #include "regs/rdi/regs_rdi.c"
#include "dbgi/dbgi.c" #include "dbgi/dbgi.c"
#include "dbgi_search/dbgi_search.c"
#include "dasm_cache/dasm_cache.c" #include "dasm_cache/dasm_cache.c"
#include "fuzzy_search/fuzzy_search.c"
#include "demon/demon_inc.c" #include "demon/demon_inc.c"
#include "eval/eval_inc.c" #include "eval/eval_inc.c"
#include "eval_visualization/eval_visualization_inc.c" #include "eval_visualization/eval_visualization_inc.c"
@@ -693,6 +693,7 @@ global OS_Handle ipc_s2m_ring_cv = {0};
internal void internal void
ipc_signaler_thread__entry_point(void *p) ipc_signaler_thread__entry_point(void *p)
{ {
ThreadNameF("[rd] ipc signaler thread");
for(;;) for(;;)
{ {
if(os_semaphore_take(ipc_signal_semaphore, max_U64)) if(os_semaphore_take(ipc_signal_semaphore, max_U64))
+8 -8
View File
@@ -1264,7 +1264,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{ {
ProfBeginFunction(); ProfBeginFunction();
DI_Scope *di_scope = di_scope_open(); DI_Scope *di_scope = di_scope_open();
FZY_Scope *fzy_scope = fzy_scope_open(); DIS_Scope *dis_scope = dis_scope_open();
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
UI_ScrollPt2 scroll_pos = rd_view_scroll_pos(); UI_ScrollPt2 scroll_pos = rd_view_scroll_pos();
F32 entity_hover_t_rate = rd_setting_val_from_code(RD_SettingCode_HoverAnimations).s32 ? (1 - pow_f32(2, (-20.f * rd_state->frame_dt))) : 1.f; F32 entity_hover_t_rate = rd_setting_val_from_code(RD_SettingCode_HoverAnimations).s32 ? (1 - pow_f32(2, (-20.f * rd_state->frame_dt))) : 1.f;
@@ -3407,7 +3407,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
if(!is_top_level_hook) { rd_store_view_scroll_pos(scroll_pos); } if(!is_top_level_hook) { rd_store_view_scroll_pos(scroll_pos); }
scratch_end(scratch); scratch_end(scratch);
fzy_scope_close(fzy_scope); dis_scope_close(dis_scope);
di_scope_close(di_scope); di_scope_close(di_scope);
ProfEnd(); ProfEnd();
} }
@@ -5214,11 +5214,11 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(symbol_lister)
ProfBeginFunction(); ProfBeginFunction();
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
DI_Scope *di_scope = di_scope_open(); DI_Scope *di_scope = di_scope_open();
FZY_Scope *fzy_scope = fzy_scope_open(); DIS_Scope *dis_scope = dis_scope_open();
F32 row_height_px = floor_f32(ui_top_font_size()*2.5f); F32 row_height_px = floor_f32(ui_top_font_size()*2.5f);
DI_KeyList dbgi_keys_list = d_push_active_dbgi_key_list(scratch.arena); DI_KeyList dbgi_keys_list = d_push_active_dbgi_key_list(scratch.arena);
DI_KeyArray dbgi_keys = di_key_array_from_list(scratch.arena, &dbgi_keys_list); DI_KeyArray dbgi_keys = di_key_array_from_list(scratch.arena, &dbgi_keys_list);
FZY_Params fuzzy_search_params = {RDI_SectionKind_Procedures, dbgi_keys}; DIS_Params fuzzy_search_params = {RDI_SectionKind_Procedures, dbgi_keys};
U64 endt_us = os_now_microseconds()+200; U64 endt_us = os_now_microseconds()+200;
//- rjf: grab rdis //- rjf: grab rdis
@@ -5245,7 +5245,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(symbol_lister)
//- rjf: query -> raddbg, filtered items //- rjf: query -> raddbg, filtered items
U128 fuzzy_search_key = {rd_regs()->view.u64[0], rd_regs()->view.u64[1]}; U128 fuzzy_search_key = {rd_regs()->view.u64[0], rd_regs()->view.u64[1]};
B32 items_stale = 0; B32 items_stale = 0;
FZY_ItemArray items = fzy_items_from_key_params_query(fzy_scope, fuzzy_search_key, &fuzzy_search_params, string, endt_us, &items_stale); DIS_ItemArray items = dis_items_from_key_params_query(dis_scope, fuzzy_search_key, &fuzzy_search_params, string, endt_us, &items_stale);
if(items_stale) if(items_stale)
{ {
rd_request_frame(); rd_request_frame();
@@ -5254,7 +5254,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(symbol_lister)
//- rjf: submit best match when hitting enter w/ no selection //- rjf: submit best match when hitting enter w/ no selection
if(slv->cursor.y == 0 && items.count != 0 && ui_slot_press(UI_EventActionSlot_Accept)) if(slv->cursor.y == 0 && items.count != 0 && ui_slot_press(UI_EventActionSlot_Accept))
{ {
FZY_Item *item = &items.v[0]; DIS_Item *item = &items.v[0];
U64 base_idx = 0; U64 base_idx = 0;
for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1) for(U64 rdi_idx = 0; rdi_idx < rdis_count; rdi_idx += 1)
{ {
@@ -5306,7 +5306,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(symbol_lister)
idx += 1) idx += 1)
UI_Focus((slv->cursor.y == idx+1) ? UI_FocusKind_On : UI_FocusKind_Off) UI_Focus((slv->cursor.y == idx+1) ? UI_FocusKind_On : UI_FocusKind_Off)
{ {
FZY_Item *item = &items.v[idx]; DIS_Item *item = &items.v[idx];
//- rjf: determine dbgi/rdi to which this item belongs //- rjf: determine dbgi/rdi to which this item belongs
DI_Key dbgi_key = {0}; DI_Key dbgi_key = {0};
@@ -5385,7 +5385,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(symbol_lister)
} }
rd_store_view_scroll_pos(scroll_pos); rd_store_view_scroll_pos(scroll_pos);
fzy_scope_close(fzy_scope); dis_scope_close(dis_scope);
di_scope_close(di_scope); di_scope_close(di_scope);
scratch_end(scratch); scratch_end(scratch);
ProfEnd(); ProfEnd();
+2 -17
View File
@@ -1628,21 +1628,6 @@ txt_tctx_ensure_inited(void)
} }
} }
////////////////////////////////
//~ rjf: User Clock
internal void
txt_user_clock_tick(void)
{
ins_atomic_u64_inc_eval(&txt_shared->user_clock_idx);
}
internal U64
txt_user_clock_idx(void)
{
return ins_atomic_u64_eval(&txt_shared->user_clock_idx);
}
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access
@@ -1696,7 +1681,7 @@ txt_scope_touch_node__stripe_r_guarded(TXT_Scope *scope, TXT_Node *node)
TXT_Touch *touch = txt_tctx->free_touch; TXT_Touch *touch = txt_tctx->free_touch;
ins_atomic_u64_inc_eval(&node->scope_ref_count); ins_atomic_u64_inc_eval(&node->scope_ref_count);
ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds()); ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds());
ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, txt_user_clock_idx()); ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, update_tick_idx());
if(touch != 0) if(touch != 0)
{ {
SLLStackPop(txt_tctx->free_touch); SLLStackPop(txt_tctx->free_touch);
@@ -2351,7 +2336,7 @@ txt_evictor_thread__entry_point(void *p)
for(;;) for(;;)
{ {
U64 check_time_us = os_now_microseconds(); U64 check_time_us = os_now_microseconds();
U64 check_time_user_clocks = txt_user_clock_idx(); U64 check_time_user_clocks = update_tick_idx();
U64 evict_threshold_us = 10*1000000; U64 evict_threshold_us = 10*1000000;
U64 evict_threshold_user_clocks = 10; U64 evict_threshold_user_clocks = 10;
for(U64 slot_idx = 0; slot_idx < txt_shared->slots_count; slot_idx += 1) for(U64 slot_idx = 0; slot_idx < txt_shared->slots_count; slot_idx += 1)
-6
View File
@@ -263,12 +263,6 @@ internal void txt_init(void);
internal void txt_tctx_ensure_inited(void); internal void txt_tctx_ensure_inited(void);
////////////////////////////////
//~ rjf: User Clock
internal void txt_user_clock_tick(void);
internal U64 txt_user_clock_idx(void);
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access
+2 -17
View File
@@ -55,21 +55,6 @@ tex_tctx_ensure_inited(void)
} }
} }
////////////////////////////////
//~ rjf: User Clock
internal void
tex_user_clock_tick(void)
{
ins_atomic_u64_inc_eval(&tex_shared->user_clock_idx);
}
internal U64
tex_user_clock_idx(void)
{
return ins_atomic_u64_eval(&tex_shared->user_clock_idx);
}
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access
@@ -123,7 +108,7 @@ tex_scope_touch_node__stripe_r_guarded(TEX_Scope *scope, TEX_Node *node)
TEX_Touch *touch = tex_tctx->free_touch; TEX_Touch *touch = tex_tctx->free_touch;
ins_atomic_u64_inc_eval(&node->scope_ref_count); ins_atomic_u64_inc_eval(&node->scope_ref_count);
ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds()); ins_atomic_u64_eval_assign(&node->last_time_touched_us, os_now_microseconds());
ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, tex_user_clock_idx()); ins_atomic_u64_eval_assign(&node->last_user_clock_idx_touched, update_tick_idx());
if(touch != 0) if(touch != 0)
{ {
SLLStackPop(tex_tctx->free_touch); SLLStackPop(tex_tctx->free_touch);
@@ -347,7 +332,7 @@ tex_evictor_thread__entry_point(void *p)
for(;;) for(;;)
{ {
U64 check_time_us = os_now_microseconds(); U64 check_time_us = os_now_microseconds();
U64 check_time_user_clocks = tex_user_clock_idx(); U64 check_time_user_clocks = update_tick_idx();
U64 evict_threshold_us = 10*1000000; U64 evict_threshold_us = 10*1000000;
U64 evict_threshold_user_clocks = 10; U64 evict_threshold_user_clocks = 10;
for(U64 slot_idx = 0; slot_idx < tex_shared->slots_count; slot_idx += 1) for(U64 slot_idx = 0; slot_idx < tex_shared->slots_count; slot_idx += 1)
-9
View File
@@ -84,9 +84,6 @@ struct TEX_Shared
{ {
Arena *arena; Arena *arena;
// rjf: user clock
U64 user_clock_idx;
// rjf: cache // rjf: cache
U64 slots_count; U64 slots_count;
U64 stripes_count; U64 stripes_count;
@@ -127,12 +124,6 @@ internal void tex_init(void);
internal void tex_tctx_ensure_inited(void); internal void tex_tctx_ensure_inited(void);
////////////////////////////////
//~ rjf: User Clock
internal void tex_user_clock_tick(void);
internal U64 tex_user_clock_idx(void);
//////////////////////////////// ////////////////////////////////
//~ rjf: Scoped Access //~ rjf: Scoped Access