| 748 | }; |
| 749 | |
| 750 | struct detail_stats |
| 751 | { |
| 752 | // Info fields |
| 753 | std::string filename; |
| 754 | std::string function_name; |
| 755 | int line{}; |
| 756 | std::chrono::nanoseconds time_acc{}; // Simple sum of all execution times (can exceed wall clock in MT) |
| 757 | std::chrono::nanoseconds sd{}; // Standard deviation |
| 758 | double cv{}; // Coefficient of variation (sd/mean) |
| 759 | int calls{}; // Total number of calls |
| 760 | int threads{}; // Number of different threads that called this function |
| 761 | |
| 762 | // Summary-like fields (for unified access) |
| 763 | double percent_ae_bracket{}; // ae[center]% as percentage of total time |
| 764 | double percent_ae_all{}; // ae[0-100]% as percentage of total time |
| 765 | std::chrono::nanoseconds time_ae_all{}; // Active exclusive time (wall clock minus child functions) |
| 766 | std::chrono::nanoseconds time_a_all{}; // Active time (actual wall clock time, handles MT overlap) |
| 767 | |
| 768 | // Fastest/Center/Slowest stats |
| 769 | std::chrono::nanoseconds fastest_min{}; |
| 770 | std::chrono::nanoseconds fastest_mean{}; |
| 771 | std::chrono::nanoseconds center_min{}; |
| 772 | std::chrono::nanoseconds center_mean{}; |
| 773 | std::chrono::nanoseconds center_med{}; |
| 774 | std::chrono::nanoseconds center_time_a{}; // Active time for center range |
| 775 | std::chrono::nanoseconds center_time_ae{}; // Active exclusive time for center range |
| 776 | std::chrono::nanoseconds center_max{}; |
| 777 | std::chrono::nanoseconds slowest_mean{}; |
| 778 | std::chrono::nanoseconds slowest_max{}; |
| 779 | |
| 780 | // Percentile ranges for reference |
| 781 | unsigned int fastest_range{}; |
| 782 | unsigned int slowest_range{}; |
| 783 | }; |
| 784 | |
| 785 | struct detail_table |
| 786 | { |
nothing calls this directly
no outgoing calls
no test coverage detected