mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 05:18:40 +00:00
do not broadcast unnecessarily in task system kickoff
This commit is contained in:
+1
-1
@@ -74,7 +74,7 @@ commands =
|
|||||||
},
|
},
|
||||||
.rjf_f4 =
|
.rjf_f4 =
|
||||||
{
|
{
|
||||||
.win = "build rdi_from_pdb release telemetry && pushd build && rdi_from_pdb.exe --exe:UnrealEditorFortnite.exe --pdb:UnrealEditorFortnite.pdb --out:UnrealEditorFortnite.rdi --capture && popd",
|
.win = "build rdi_from_pdb release telemetry && pushd build && rdi_from_pdb.exe --pdb:mule_main.pdb --out:mule_main.rdi --capture && popd",
|
||||||
.linux = "",
|
.linux = "",
|
||||||
.out = "*compilation*",
|
.out = "*compilation*",
|
||||||
.footer_panel = true,
|
.footer_panel = true,
|
||||||
|
|||||||
@@ -1588,13 +1588,17 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
|||||||
}
|
}
|
||||||
if(resume_good)
|
if(resume_good)
|
||||||
{
|
{
|
||||||
evt_good = !!WaitForDebugEvent(&evt, INFINITE);
|
evt_good = !!WaitForDebugEvent(&evt, 100);
|
||||||
if(evt_good)
|
if(evt_good)
|
||||||
{
|
{
|
||||||
dmn_w32_shared->resume_needed = 1;
|
dmn_w32_shared->resume_needed = 1;
|
||||||
dmn_w32_shared->resume_pid = evt.dwProcessId;
|
dmn_w32_shared->resume_pid = evt.dwProcessId;
|
||||||
dmn_w32_shared->resume_tid = evt.dwThreadId;
|
dmn_w32_shared->resume_tid = evt.dwThreadId;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
keep_going = 1;
|
||||||
|
}
|
||||||
ins_atomic_u64_inc_eval(&dmn_w32_shared->run_gen);
|
ins_atomic_u64_inc_eval(&dmn_w32_shared->run_gen);
|
||||||
ins_atomic_u64_inc_eval(&dmn_w32_shared->mem_gen);
|
ins_atomic_u64_inc_eval(&dmn_w32_shared->mem_gen);
|
||||||
ins_atomic_u64_inc_eval(&dmn_w32_shared->reg_gen);
|
ins_atomic_u64_inc_eval(&dmn_w32_shared->reg_gen);
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ ts_thread_count(void)
|
|||||||
internal TS_Ticket
|
internal TS_Ticket
|
||||||
ts_kickoff(TS_TaskFunctionType *entry_point, Arena **optional_arena_ptr, void *p)
|
ts_kickoff(TS_TaskFunctionType *entry_point, Arena **optional_arena_ptr, void *p)
|
||||||
{
|
{
|
||||||
|
ProfBeginFunction();
|
||||||
|
|
||||||
// rjf: obtain number & slot/stripe for next artifact
|
// rjf: obtain number & slot/stripe for next artifact
|
||||||
U64 artifact_num = ins_atomic_u64_inc_eval(&ts_shared->artifact_num_gen);
|
U64 artifact_num = ins_atomic_u64_inc_eval(&ts_shared->artifact_num_gen);
|
||||||
U64 slot_idx = artifact_num%ts_shared->artifact_slots_count;
|
U64 slot_idx = artifact_num%ts_shared->artifact_slots_count;
|
||||||
@@ -73,51 +75,58 @@ ts_kickoff(TS_TaskFunctionType *entry_point, Arena **optional_arena_ptr, void *p
|
|||||||
|
|
||||||
// rjf: allocate artifact
|
// rjf: allocate artifact
|
||||||
TS_TaskArtifact *artifact = 0;
|
TS_TaskArtifact *artifact = 0;
|
||||||
OS_MutexScopeW(stripe->rw_mutex)
|
ProfScope("allocate artifact")
|
||||||
{
|
{
|
||||||
artifact = stripe->free_artifact;
|
OS_MutexScopeW(stripe->rw_mutex)
|
||||||
if(artifact != 0)
|
|
||||||
{
|
{
|
||||||
SLLStackPop(stripe->free_artifact);
|
artifact = stripe->free_artifact;
|
||||||
|
if(artifact != 0)
|
||||||
|
{
|
||||||
|
SLLStackPop(stripe->free_artifact);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
artifact = push_array_no_zero(stripe->arena, TS_TaskArtifact, 1);
|
||||||
|
}
|
||||||
|
artifact->num = artifact_num;
|
||||||
|
artifact->task_is_done = 0;
|
||||||
|
artifact->result = 0;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
artifact = push_array_no_zero(stripe->arena, TS_TaskArtifact, 1);
|
|
||||||
}
|
|
||||||
artifact->num = artifact_num;
|
|
||||||
artifact->task_is_done = 0;
|
|
||||||
artifact->result = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: form ticket out of artifact info
|
// rjf: form ticket out of artifact info
|
||||||
TS_Ticket ticket = {artifact_num, (U64)artifact};
|
TS_Ticket ticket = {artifact_num, (U64)artifact};
|
||||||
|
|
||||||
// rjf: push task info to task ring buffer
|
// rjf: push task info to task ring buffer
|
||||||
OS_MutexScope(ts_shared->u2t_ring_mutex) for(;;)
|
ProfScope("push task info to task ring buffer")
|
||||||
{
|
{
|
||||||
U64 unconsumed_size = ts_shared->u2t_ring_write_pos - ts_shared->u2t_ring_read_pos;
|
OS_MutexScope(ts_shared->u2t_ring_mutex) for(;;)
|
||||||
U64 available_size = ts_shared->u2t_ring_size-unconsumed_size;
|
|
||||||
if(available_size >= sizeof(entry_point) + sizeof(p) + sizeof(ticket))
|
|
||||||
{
|
{
|
||||||
Arena *task_arena = 0;
|
U64 unconsumed_size = ts_shared->u2t_ring_write_pos - ts_shared->u2t_ring_read_pos;
|
||||||
if(optional_arena_ptr != 0)
|
U64 available_size = ts_shared->u2t_ring_size-unconsumed_size;
|
||||||
|
if(available_size >= sizeof(entry_point) + sizeof(p) + sizeof(ticket))
|
||||||
{
|
{
|
||||||
task_arena = *optional_arena_ptr;
|
Arena *task_arena = 0;
|
||||||
|
if(optional_arena_ptr != 0)
|
||||||
|
{
|
||||||
|
task_arena = *optional_arena_ptr;
|
||||||
|
}
|
||||||
|
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &entry_point);
|
||||||
|
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &task_arena);
|
||||||
|
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &p);
|
||||||
|
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &ticket);
|
||||||
|
if(optional_arena_ptr != 0)
|
||||||
|
{
|
||||||
|
*optional_arena_ptr = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &entry_point);
|
os_condition_variable_wait(ts_shared->u2t_ring_cv, ts_shared->u2t_ring_mutex, max_U64);
|
||||||
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &task_arena);
|
|
||||||
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &p);
|
|
||||||
ts_shared->u2t_ring_write_pos += ring_write_struct(ts_shared->u2t_ring_base, ts_shared->u2t_ring_size, ts_shared->u2t_ring_write_pos, &ticket);
|
|
||||||
if(optional_arena_ptr != 0)
|
|
||||||
{
|
|
||||||
*optional_arena_ptr = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
os_condition_variable_wait(ts_shared->u2t_ring_cv, ts_shared->u2t_ring_mutex, max_U64);
|
os_condition_variable_signal(ts_shared->u2t_ring_cv);
|
||||||
}
|
}
|
||||||
os_condition_variable_broadcast(ts_shared->u2t_ring_cv);
|
|
||||||
|
|
||||||
|
ProfEnd();
|
||||||
return ticket;
|
return ticket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user