Compare commits

..

3 Commits

Author SHA1 Message Date
Patrick Lipka b0841afa35 add rvprof_region_begin 2025-08-07 18:02:06 +02:00
Patrick Lipka 60ce804e36 add set_program_name implementation 2025-08-07 17:41:07 +02:00
Patrick Lipka cc9a7ece7a include rvprof.h 2025-08-07 17:37:11 +02:00
2 changed files with 65 additions and 2 deletions

View File

@ -55,7 +55,6 @@ void rvprof_init(const char* output_file){
rvprof_symbols_init(g_rvprof.config.program_name); // in case symbol resolution fails, just addresses are printed later
// rest of global state
g_rvprof.stack_ptr = -1;
g_rvprof.initialized = 1;
@ -72,4 +71,67 @@ void rvprof_init(const char* output_file){
// register atexit handler to automate cleanup
register_atexit_handler();
}
}
void rvprof_set_program_name(const char* program_name){
if (g_rvprof.config.program_name){
rvprof_free(g_rvprof.config.program_name, strlen(g_rvprof.config.program_name)+1);
}
if (program_name) {
g_rvprof.config.program_name = rvprof_malloc(strlen(program_name)+1);
if (g_rvprof.config.program_name) {
strcpy(g_rvprof.config.program_name, program_name);
}
}
}
void rvprof_region_begin(const char* name){
// auto-initialize with default settings if not yet initialized
if (!g_rvprof.initialized){
rvprof_init(NULL);
g_rvprof.auto_initialized = 1;
}
g_rvprof.stack_ptr++;
if(region_array_ensure_capacity(&g_rvprof.regions, g_rvprof.stack_ptr) < 0) {
g_rvprof.stack_ptr--;
return;
}
region_t* region = &g_rvprof.regions.data[g_rvprof.stack_ptr];
// initialize region
strncpy(region->name, name, MAX_NAME_LEN-1);
region->name[MAX_NAME_LEN-1] = '\0';
region->depth = g_rvprof.stack_ptr;
region->child_time = 0;
region->child_cycles = 0;
region->func_addr = NULL;
region->stack_id = rvprof_stats_get_or_create_stack_id;
// look up or create ID for region
const char* caller;
if(g_rvprof.stack_ptr > 0){
caller = g_rvprof.regions.data[g_rvprof.stack_ptr-1].name;
} else {
caller = "---";
}
region->function_id = rvprof_stats_find_or_create_function(name, caller);
// increase call count for ID and record call stack
if (region->function_id >= 0){
g_rvprof.functions.data[region->function_id].call_count++;
rvprof_stats_add_stack_id_to_function(region->function_id, region->stack_id);
if (g_rvprof.config.merge_regions){
rvprof_stats_add_caller_to_function(region->function_id, caller);
}
}
// start timing
region->start_time_ns = rvprof_timing_get_current();
region->start_cycles = rvprof_timing_get_cycles();
}

View File

@ -7,6 +7,7 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "rvprof.h"
#ifdef __cplusplus
extern "C"{