Compare commits
No commits in common. "a8096d9b70ca645bdcd0177b894cc65005aae9a8" and "b0841afa3552c9da3f500c56a941ec48afa56167" have entirely different histories.
a8096d9b70
...
b0841afa35
|
@ -135,76 +135,3 @@ void rvprof_region_begin(const char* name){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rvprof_region_end(const char* name){
|
|
||||||
if (!g_rvprof.initialized || g_rvprof.stack_ptr < 0){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
region_t* region = &g_rvprof.regions.data[g_rvprof.stack_ptr];
|
|
||||||
|
|
||||||
// make sure name matches
|
|
||||||
if (strcmp(region->name, name) !=0) return;
|
|
||||||
|
|
||||||
// end timing
|
|
||||||
uint64_t end_time_ns = rvprof_timing_get_current();
|
|
||||||
uint64_t end_cycles = rvprof_timing_get_cycles();
|
|
||||||
uint64_t elapsed_time = end_time_ns - region->start_time_ns;
|
|
||||||
uint64_t elapsed_cycles = (end_cycles > region->start_cycles) ? (end_cycles - region->start_cycles) : 0;
|
|
||||||
|
|
||||||
// update region statistics
|
|
||||||
if (region->function_id >= 0){
|
|
||||||
function_stats_t* stats = &g_rvprof.functions.data[region->function_id];
|
|
||||||
uint64_t exclusive_time = elapsed_time - region->child_time;
|
|
||||||
uint64_t exclusive_cycles = (elapsed_cycles > region->child_cycles) ? (elapsed_cycles - region->child_cycles) : 0; \
|
|
||||||
|
|
||||||
stats->total_inclusive_time += elapsed_time;
|
|
||||||
stats->total_exclusive_time += exclusive_time;
|
|
||||||
|
|
||||||
stats->total_inclusive_cycles += elapsed_cycles;
|
|
||||||
stats->total_exclusive_cycles += exclusive_cycles;
|
|
||||||
}
|
|
||||||
|
|
||||||
// update parent statistics
|
|
||||||
if (g_rvprof.stack_ptr > 0) {
|
|
||||||
g_rvprof.regions.data[g_rvprof.stack_ptr-1].child_time += elapsed_time;
|
|
||||||
g_rvprof.regions.data[g_rvprof.stack_ptr-1].child_cycles += elapsed_cycles;
|
|
||||||
} else {
|
|
||||||
// this is the top-level region, updatre total program stats
|
|
||||||
if (elapsed_time > g_rvprof.total_program_time){
|
|
||||||
g_rvprof.total_program_time = elapsed_time;
|
|
||||||
g_rvprof.total_program_cycles = elapsed_cycles;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// region ended: decrease stack pointer
|
|
||||||
g_rvprof.stack_ptr--;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rvprof_finalize(void){
|
|
||||||
if (!g_rvprof.initialized) return;
|
|
||||||
|
|
||||||
rvprof_output_generate_report();
|
|
||||||
if(g_rvprof.output_file){
|
|
||||||
fclose(g_rvprof.output_file);
|
|
||||||
g_rvprof.output_file = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
region_array_cleanup(&g_rvprof.regions);
|
|
||||||
function_stats_array_cleanup(&g_rvprof.functions);
|
|
||||||
stack_info_array_cleanup(&g_rvprof.stacks);
|
|
||||||
symbol_array_cleanup(&g_rvprof.symbols);
|
|
||||||
|
|
||||||
if (g_rvprof.config.output_filename) {
|
|
||||||
rvprof_free(g_rvprof.config.output_filename, strlen(g_rvprof.config.output_filename) + 1);
|
|
||||||
g_rvprof.config.output_filename = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_rvprof.config.program_name) {
|
|
||||||
rvprof_free(g_rvprof.config.program_name, strlen(g_rvprof.config.program_name) + 1);
|
|
||||||
g_rvprof.config.program_name = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_rvprof.initialized = 0;
|
|
||||||
g_rvprof.auto_initialized = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue