worker thread parameterization; sketch out wide-conversion scratch program; fix one common crash case in some pdb conversions

This commit is contained in:
Ryan Fleury
2024-11-20 15:36:13 -08:00
parent adbd7fbc97
commit f15a4f17d1
7 changed files with 91 additions and 8 deletions
+1
View File
@@ -123,6 +123,7 @@ if "%rdi_breakpad_from_pdb%"=="1" set didbuild=1 && %compile% ..\src\rdi_br
if "%tester%"=="1" set didbuild=1 && %compile% ..\src\tester\tester_main.c %compile_link% %out%tester.exe || exit /b 1
if "%ryan_scratch%"=="1" set didbuild=1 && %compile% ..\src\scratch\ryan_scratch.c %compile_link% %out%ryan_scratch.exe || exit /b 1
if "%textperf%"=="1" set didbuild=1 && %compile% ..\src\scratch\textperf.c %compile_link% %out%textperf.exe || exit /b 1
if "%convertperf%"=="1" set didbuild=1 && %compile% ..\src\scratch\convertperf.c %compile_link% %out%convertperf.exe || exit /b 1
if "%parse_inline_sites%"=="1" set didbuild=1 && %compile% ..\src\scratch\parse_inline_sites.c %compile_link% %out%parse_inline_sites.exe || exit /b 1
if "%mule_main%"=="1" set didbuild=1 && del vc*.pdb mule*.pdb && %compile_release% %only_compile% ..\src\mule\mule_inline.cpp && %compile_release% %only_compile% ..\src\mule\mule_o2.cpp && %compile_debug% %EHsc% ..\src\mule\mule_main.cpp ..\src\mule\mule_c.c mule_inline.obj mule_o2.obj %compile_link% %no_aslr% %out%mule_main.exe || exit /b 1
if "%mule_module%"=="1" set didbuild=1 && %compile% ..\src\mule\mule_module.cpp %compile_link% %link_dll% %out%mule_module.dll || exit /b 1
+7 -3
View File
@@ -5,7 +5,7 @@
//~ rjf: Top-Level Layer Initialization
internal void
async_init(void)
async_init(CmdLine *cmdline)
{
Arena *arena = arena_alloc();
async_shared = push_array(arena, ASYNC_Shared, 1);
@@ -20,8 +20,12 @@ async_init(void)
}
async_shared->ring_mutex = os_mutex_alloc();
async_shared->ring_cv = os_condition_variable_alloc();
async_shared->work_threads_count = Max(1, os_get_system_info()->logical_processor_count-1);
async_shared->work_threads = push_array(arena, OS_Handle, async_shared->work_threads_count);
String8 work_thread_count_string = cmd_line_string(cmdline, str8_lit("work_threads_count"));
if(work_thread_count_string.size == 0 || !try_u64_from_str8_c_rules(work_thread_count_string, &async_shared->work_threads_count))
{
async_shared->work_threads_count = Max(1, os_get_system_info()->logical_processor_count-1);
}
async_shared->work_threads = push_array(arena, OS_Handle, async_shared->work_threads_count);
for EachIndex(idx, async_shared->work_threads_count)
{
async_shared->work_threads[idx] = os_thread_launch(async_work_thread__entry_point, (void *)idx, 0);
+1 -1
View File
@@ -108,7 +108,7 @@ global ASYNC_Shared *async_shared = 0;
////////////////////////////////
//~ rjf: Top-Level Layer Initialization
internal void async_init(void);
internal void async_init(CmdLine *cmdline);
////////////////////////////////
//~ rjf: Top-Level Accessors
+1 -1
View File
@@ -34,7 +34,7 @@ main_thread_base_entry_point(int arguments_count, char **arguments)
//- rjf: initialize all included layers
#if defined(ASYNC_H) && !defined(ASYNC_INIT_MANUAL)
async_init();
async_init(&cmdline);
#endif
#if defined(RDI_FROM_PDB_H) && !defined(P2R_INIT_MANUAL)
p2r_init();
+1 -2
View File
@@ -166,7 +166,7 @@ pdb_strtbl_from_data(Arena *arena, String8 data){
header = (PDB_StringTableHeader *)data.str;
}
PDB_Strtbl *result = 0;
PDB_Strtbl *result = push_array(arena, PDB_Strtbl, 1);
if (header != 0 && header->magic == PDB_StringTableHeader_MAGIC && header->version == 1){
U32 strblock_size_off = sizeof(*header);
U32 strblock_size = 0;
@@ -185,7 +185,6 @@ pdb_strtbl_from_data(Arena *arena, String8 data){
U32 bucket_array_size = bucket_count*sizeof(PDB_StringIndex);
if (bucket_array_off + bucket_array_size <= data.size){
result = push_array(arena, PDB_Strtbl, 1);
result->data = data;
result->bucket_count = bucket_count;
result->strblock_min = strblock_off;
+80
View File
@@ -0,0 +1,80 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Build Options
#define BUILD_TITLE "convertperf"
////////////////////////////////
//~ rjf: Includes
//- rjf: [lib]
#include "third_party/rad_lzb_simple/rad_lzb_simple.h"
#include "third_party/rad_lzb_simple/rad_lzb_simple.c"
//- rjf: [h]
#include "base/base_inc.h"
#include "os/os_inc.h"
#include "path/path.h"
#include "async/async.h"
#include "rdi_format/rdi_format_local.h"
#include "dbgi/dbgi.h"
//- rjf: [c]
#include "base/base_inc.c"
#include "os/os_inc.c"
#include "path/path.c"
#include "async/async.c"
#include "rdi_format/rdi_format_local.c"
#include "dbgi/dbgi.c"
////////////////////////////////
//~ rjf: Entry Points
internal void
entry_point(CmdLine *cmdline)
{
Arena *arena = arena_alloc();
String8 list_path = str8_list_first(&cmdline->inputs);
String8 list_data = os_data_from_file_path(arena, list_path);
U8 splits[] = {'\n'};
String8List lines = str8_split(arena, list_data, splits, ArrayCount(splits), 0);
OS_HandleList processes = {0};
String8Node *processes_first_path_n = 0;
U64 limit = 32;
U64 idx = 0;
for(String8Node *n = lines.first; n != 0; n = n->next)
{
String8 dll_path = n->string;
ProfScope("kick off %.*s", str8_varg(dll_path))
{
String8 dll_path_no_ext = str8_chop_last_dot(dll_path);
String8 dll_name = str8_skip_last_slash(dll_path_no_ext);
String8 pdb_path = push_str8f(arena, "%S.pdb", dll_path_no_ext);
String8 rdi_path = push_str8f(arena, "dump/%S.rdi", dll_name);
OS_Handle handle = os_cmd_line_launchf("raddbg --convert --work_threads_count:1 --pdb:%S --out:%S", pdb_path, rdi_path);
os_handle_list_push(arena, &processes, handle);
if(processes_first_path_n == 0)
{
processes_first_path_n = n;
}
idx += 1;
}
if(idx >= limit)
{
String8Node *line_n = processes_first_path_n;
for(OS_HandleNode *n = processes.first; n != 0; n = n->next, line_n = line_n->next)
{
ProfScope("join %.*s", str8_varg(line_n->string))
{
os_process_join(n->v, max_U64);
}
}
idx = 0;
MemoryZeroStruct(&processes);
processes_first_path_n = 0;
}
}
}
-1
View File
@@ -1782,7 +1782,6 @@ ui_layout_enforce_constraints__in_place_rec(UI_Box *root, Axis2 axis)
}
}
}
}
//- rjf: fixup upwards-relative sizes