re-introduce timeout-based re-requests for dbgi & fs layers; further adjust pre-emptive conversion heuristic

This commit is contained in:
Ryan Fleury
2024-11-14 09:29:01 -08:00
parent fa4f9621b0
commit ff45952f07
6 changed files with 26 additions and 6 deletions
+4 -1
View File
@@ -491,6 +491,7 @@ di_open(DI_Key *key)
if(node->ref_count == 1)
{
di_u2p_enqueue_key(&key_normalized, max_U64);
ins_atomic_u64_eval_assign(&node->last_time_requested_us, os_now_microseconds());
ins_atomic_u64_inc_eval(&node->request_count);
async_push_work(di_parse_work, .completion_counter = &node->completion_count);
}
@@ -609,9 +610,11 @@ di_rdi_from_key(DI_Scope *scope, DI_Key *key, U64 endt_us)
//- rjf: parse not done, not working -> ask for parse
if(node != 0 &&
!node->parse_done &&
ins_atomic_u64_eval(&node->request_count) == ins_atomic_u64_eval(&node->completion_count) &&
(ins_atomic_u64_eval(&node->request_count) == ins_atomic_u64_eval(&node->completion_count) ||
ins_atomic_u64_eval(&node->last_time_requested_us)+100000 < os_now_microseconds()) &&
di_u2p_enqueue_key(&key_normalized, endt_us))
{
ins_atomic_u64_eval_assign(&node->last_time_requested_us, os_now_microseconds());
ins_atomic_u64_inc_eval(&node->request_count);
async_push_work(di_parse_work, .completion_counter = &node->completion_count);
}
+1
View File
@@ -94,6 +94,7 @@ struct DI_Node
U64 request_count;
U64 completion_count;
U64 is_working;
U64 last_time_requested_us;
// rjf: key
DI_Key key;