diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index c9d53065..245b967a 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -6597,6 +6597,25 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt) df_entity_equip_stack_base(entity, event->stack_base); df_entity_equip_tls_root(entity, event->tls_root); df_entity_equip_vaddr(entity, event->rip_vaddr); + if(event->string.size != 0) + { + df_entity_equip_name(0, entity, event->string); + } + + // rjf: find any pending thread names correllating with this TID -> equip name if found match + { + DF_EntityList pending_thread_names = df_query_cached_entity_list_with_kind(DF_EntityKind_PendingThreadName); + for(DF_EntityNode *n = pending_thread_names.first; n != 0; n = n->next) + { + DF_Entity *pending_thread_name = n->entity; + if(event->machine_id == pending_thread_name->ctrl_machine_id && event->entity_id == pending_thread_name->ctrl_id) + { + df_entity_mark_for_deletion(pending_thread_name); + df_entity_equip_name(0, entity, pending_thread_name->name); + break; + } + } + } // rjf: determine index in process U64 thread_idx_in_process = 0; @@ -6730,14 +6749,25 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt) case CTRL_EventKind_ThreadName: { String8 string = event->string; - DF_Entity *thread = df_entity_from_ctrl_handle(event->machine_id, event->entity); + DF_Entity *entity = df_entity_from_ctrl_handle(event->machine_id, event->entity); if(event->entity_id != 0) { - thread = df_entity_from_ctrl_id(event->machine_id, event->entity_id); + entity = df_entity_from_ctrl_id(event->machine_id, event->entity_id); } - if(!df_entity_is_nil(thread)) + if(df_entity_is_nil(entity)) { - df_entity_equip_name(0, thread, string); + DF_Entity *process = df_entity_from_ctrl_handle(event->machine_id, event->parent); + if(!df_entity_is_nil(process)) + { + entity = df_entity_alloc(0, process, DF_EntityKind_PendingThreadName); + df_entity_equip_name(0, entity, string); + df_entity_equip_ctrl_machine_id(entity, event->machine_id); + df_entity_equip_ctrl_id(entity, event->entity_id); + } + } + if(!df_entity_is_nil(entity)) + { + df_entity_equip_name(0, entity, string); } }break; diff --git a/src/df/core/df_core.mdesk b/src/df/core/df_core.mdesk index bc6cd1a7..c373b467 100644 --- a/src/df/core/df_core.mdesk +++ b/src/df/core/df_core.mdesk @@ -66,6 +66,7 @@ DF_EntityKindTable: {Thread thread 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Thread "Thread" } {Module module 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Module "Module" } {DebugInfoOverride debug_info_override 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 "Label" Null "Debug Info Override" } + {PendingThreadName pending_thread_name 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Threads "Pending Thread Name" } //- rjf: parser task entities {ConversionTask conversion_task 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Conversion Task" } diff --git a/src/df/core/generated/df_core.meta.h b/src/df/core/generated/df_core.meta.h index c3eaee86..86b026f0 100644 --- a/src/df/core/generated/df_core.meta.h +++ b/src/df/core/generated/df_core.meta.h @@ -40,6 +40,7 @@ DF_EntityKind_Process, DF_EntityKind_Thread, DF_EntityKind_Module, DF_EntityKind_DebugInfoOverride, +DF_EntityKind_PendingThreadName, DF_EntityKind_ConversionTask, DF_EntityKind_ConversionFail, DF_EntityKind_EndedProcess, @@ -1555,6 +1556,7 @@ DF_IconKind_Threads, DF_IconKind_Thread, DF_IconKind_Module, DF_IconKind_Null, +DF_IconKind_Threads, DF_IconKind_Null, DF_IconKind_Null, DF_IconKind_Null, @@ -1585,6 +1587,7 @@ str8_lit_comp("Process"), str8_lit_comp("Thread"), str8_lit_comp("Module"), str8_lit_comp("Debug Info Override"), +str8_lit_comp("Pending Thread Name"), str8_lit_comp("Conversion Task"), str8_lit_comp("Conversion Failure"), str8_lit_comp("EndedProcess"), @@ -1618,6 +1621,7 @@ str8_lit_comp("Label"), str8_lit_comp("Label"), str8_lit_comp("Label"), str8_lit_comp("Label"), +str8_lit_comp("Label"), }; DF_EntityKindFlags df_g_entity_kind_flags_table[] = @@ -1648,6 +1652,7 @@ DF_EntityKindFlags df_g_entity_kind_flags_table[] = (0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), (0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), +(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime), }; DF_EntityOpFlags df_g_entity_kind_op_flags_table[] = @@ -1675,6 +1680,7 @@ DF_EntityOpFlags df_g_entity_kind_op_flags_table[] = (0*DF_EntityOpFlag_Delete) | (1*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate), (0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate), (0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate), +(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate), (0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate), (0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate), (1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),