dbg info conversion events

This commit is contained in:
Ryan Fleury
2025-10-02 12:44:42 -07:00
parent 871daf3f22
commit b88c45d737
3 changed files with 88 additions and 3 deletions
+43
View File
@@ -96,6 +96,8 @@ di_init(CmdLine *cmdline)
di_shared->conversion_completion_shared_memory_base = (U64 *)os_shared_memory_view_open(di_shared->conversion_completion_shared_memory, r1u64(0, KB(4)));
di_shared->completion_mutex = mutex_alloc();
di_shared->completion_arena = arena_alloc();
di_shared->event_mutex = mutex_alloc();
di_shared->event_arena = arena_alloc();
}
////////////////////////////////
@@ -486,6 +488,29 @@ di_rdi_from_key(Access *access, DI_Key key, B32 high_priority, U64 endt_us)
return rdi;
}
////////////////////////////////
//~ rjf: Events
internal DI_EventList
di_get_events(Arena *arena)
{
DI_EventList dst = {0};
MutexScope(di_shared->event_mutex)
{
for EachNode(src_n, DI_EventNode, di_shared->events.first)
{
DI_EventNode *dst_n = push_array(arena, DI_EventNode, 1);
MemoryCopyStruct(&dst_n->v, &src_n->v);
dst_n->v.string = str8_copy(arena, dst_n->v.string);
SLLQueuePush(dst.first, dst.last, dst_n);
dst.count += 1;
}
MemoryZeroStruct(&di_shared->events);
arena_clear(di_shared->event_arena);
}
return dst;
}
////////////////////////////////
//~ rjf: Asynchronous Tick
@@ -738,6 +763,16 @@ di_async_tick(void)
t->status = DI_LoadTaskStatus_Active;
di_shared->conversion_process_count += 1;
di_shared->conversion_thread_count += t->thread_count;
// rjf: send event
MutexScope(di_shared->event_mutex)
{
DI_EventNode *n = push_array(di_shared->event_arena, DI_EventNode, 1);
SLLQueuePush(di_shared->events.first, di_shared->events.last, n);
di_shared->events.count += 1;
n->v.kind = DI_EventKind_ConversionStarted;
n->v.string = str8_copy(di_shared->event_arena, rdi_path);
}
}
//- rjf: if active & process has completed, mark as done
@@ -785,6 +820,14 @@ di_async_tick(void)
//- rjf: if task is done, retire & recycle task; gather path to load
if(t->status == DI_LoadTaskStatus_Done)
{
if(!os_handle_match(t->process, os_handle_zero())) MutexScope(di_shared->event_mutex)
{
DI_EventNode *n = push_array(di_shared->event_arena, DI_EventNode, 1);
SLLQueuePush(di_shared->events.first, di_shared->events.last, n);
di_shared->events.count += 1;
n->v.kind = DI_EventKind_ConversionEnded;
n->v.string = str8_copy(di_shared->event_arena, rdi_path);
}
DLLRemove(di_shared->first_load_task, di_shared->last_load_task, t);
SLLStackPush(di_shared->free_load_task, t);
ParseTaskNode *n = push_array(scratch.arena, ParseTaskNode, 1);
+44
View File
@@ -204,6 +204,40 @@ struct DI_Match
U32 idx;
};
////////////////////////////////
//~ rjf: Events
typedef enum DI_EventKind
{
DI_EventKind_Null,
DI_EventKind_ConversionStarted,
DI_EventKind_ConversionEnded,
DI_EventKind_COUNT
}
DI_EventKind;
typedef struct DI_Event DI_Event;
struct DI_Event
{
DI_EventKind kind;
String8 string;
};
typedef struct DI_EventNode DI_EventNode;
struct DI_EventNode
{
DI_EventNode *next;
DI_Event v;
};
typedef struct DI_EventList DI_EventList;
struct DI_EventList
{
DI_EventNode *first;
DI_EventNode *last;
U64 count;
};
////////////////////////////////
//~ rjf: Shared State
@@ -254,6 +288,11 @@ struct DI_Shared
Arena *completion_arena;
DI_LoadCompletion *first_completion;
DI_LoadCompletion *last_completion;
// rjf: events
Mutex event_mutex;
Arena *event_arena;
DI_EventList events;
};
////////////////////////////////
@@ -292,6 +331,11 @@ internal U64 di_load_gen(void);
internal DI_KeyArray di_push_all_loaded_keys(Arena *arena);
internal RDI_Parsed *di_rdi_from_key(Access *access, DI_Key key, B32 high_priority, U64 endt_us);
////////////////////////////////
//~ rjf: Events
internal DI_EventList di_get_events(Arena *arena);
////////////////////////////////
//~ rjf: Asynchronous Tick
+1 -3
View File
@@ -11399,10 +11399,9 @@ rd_frame(void)
//////////////////////////////
//- rjf: sync with di parsers
//
#if 0 // TODO(rjf): @dbgi2
ProfScope("sync with di parsers")
{
DI_EventList events = di_p2u_pop_events(scratch.arena, 0);
DI_EventList events = di_get_events(scratch.arena);
for(DI_EventNode *n = events.first; n != 0; n = n->next)
{
DI_Event *event = &n->v;
@@ -11430,7 +11429,6 @@ rd_frame(void)
}
}
}
#endif
//////////////////////////////
//- rjf: animate all views