set up ctrl thread log scopes; ditch ctrl -> user log stuff, just make each log site in control of exporting to a separate file

This commit is contained in:
Ryan Fleury
2024-04-18 15:09:43 -07:00
parent 62d1c6b130
commit 856c59a949
4 changed files with 44 additions and 11 deletions
+24 -8
View File
@@ -851,6 +851,14 @@ ctrl_init(void)
ctrl_state->c2u_ring_base = push_array_no_zero(arena, U8, ctrl_state->c2u_ring_size);
ctrl_state->c2u_ring_mutex = os_mutex_alloc();
ctrl_state->c2u_ring_cv = os_condition_variable_alloc();
{
Temp scratch = scratch_begin(0, 0);
String8 user_program_data_path = os_string_from_system_path(scratch.arena, OS_SystemPath_UserProgramData);
String8 user_data_folder = push_str8f(scratch.arena, "%S/raddbg/logs", user_program_data_path);
os_make_directory(user_data_folder);
ctrl_state->ctrl_thread_log_path = push_str8f(ctrl_state->arena, "%S/ctrl_thread.raddbg_log", user_data_folder);
scratch_end(scratch);
}
ctrl_state->ctrl_thread_entity_store = ctrl_entity_store_alloc();
ctrl_state->dmn_event_arena = arena_alloc();
ctrl_state->user_entry_point_arena = arena_alloc();
@@ -1745,6 +1753,7 @@ ctrl_thread__entry_point(void *p)
for(;;)
{
temp_end(scratch);
log_scope_begin();
//- rjf: get next messages
CTRL_MsgList msgs = ctrl_u2c_pop_msgs(scratch.arena);
@@ -1783,6 +1792,9 @@ ctrl_thread__entry_point(void *p)
}
}
}
String8 log = log_scope_end(scratch.arena);
ctrl_thread__flush_log(log);
}
scratch_end(scratch);
@@ -1941,14 +1953,7 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg,
log_msgf("string: \"%S\"\n", ev->string);
log_msgf("ip_vaddr: 0x%I64x\n", ev->instruction_pointer);
String8 log = log_scope_end(scratch.arena);
if(log.size != 0)
{
CTRL_EventList evts = {0};
CTRL_Event *evt = ctrl_event_list_push(scratch.arena, &evts);
evt->kind = CTRL_EventKind_Log;
evt->string = log;
ctrl_c2u_push_events(&evts);
}
ctrl_thread__flush_log(log);
}
// rjf: determine if we should filter
@@ -2288,6 +2293,17 @@ ctrl_eval_memory_read(void *u, void *out, U64 addr, U64 size)
return result;
}
//- rjf: log flusher
internal void
ctrl_thread__flush_log(String8 string)
{
if(string.size != 0)
{
os_append_data_to_file_path(ctrl_state->ctrl_thread_log_path, string);
}
}
//- rjf: msg kind implementations
internal void
+4 -3
View File
@@ -302,9 +302,6 @@ typedef enum CTRL_EventKind
CTRL_EventKind_MemDecommit,
CTRL_EventKind_MemRelease,
//- rjf: log
CTRL_EventKind_Log,
CTRL_EventKind_COUNT
}
CTRL_EventKind;
@@ -517,6 +514,7 @@ struct CTRL_State
OS_Handle c2u_ring_cv;
// rjf: ctrl thread state
String8 ctrl_thread_log_path;
OS_Handle ctrl_thread;
Log *ctrl_thread_log;
CTRL_EntityStore *ctrl_thread_entity_store;
@@ -712,6 +710,9 @@ internal DMN_Event *ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_
//- rjf: eval helpers
internal B32 ctrl_eval_memory_read(void *u, void *out, U64 addr, U64 size);
//- rjf: log flusher
internal void ctrl_thread__flush_log(String8 string);
//- rjf: msg kind implementations
internal void ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg);
internal void ctrl_thread__attach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg);
+15
View File
@@ -113,6 +113,21 @@ os_write_data_list_to_file_path(String8 path, String8List list)
return good;
}
internal B32
os_append_data_to_file_path(String8 path, String8 data)
{
B32 good = 0;
OS_Handle file = os_file_open(OS_AccessFlag_Write, path);
if(!os_handle_match(file, os_handle_zero()))
{
good = 1;
U64 pos = os_properties_from_file(file).size;
os_file_write(file, r1u64(pos, pos+data.size), data.str);
os_file_close(file);
}
return good;
}
internal OS_FileID
os_id_from_file_path(String8 path)
{
+1
View File
@@ -171,6 +171,7 @@ internal String8List os_string_list_from_argcv(Arena *arena, int argc, char **ar
internal String8 os_data_from_file_path(Arena *arena, String8 path);
internal B32 os_write_data_to_file_path(String8 path, String8 data);
internal B32 os_write_data_list_to_file_path(String8 path, String8List list);
internal B32 os_append_data_to_file_path(String8 path, String8 data);
internal OS_FileID os_id_from_file_path(String8 path);
internal S64 os_file_id_compare(OS_FileID a, OS_FileID b);
internal String8 os_string_from_file_range(Arena *arena, OS_Handle file, Rng1U64 range);