59 void SetExitReason(
const std::string &reason) { exit_reason_ = reason; }
64 wall_time_ = wall_time;
66 real_time_factor_ = sim_time / wall_time;
71 void SetProfilingData(
const std::vector<ComponentStats> &stats) { profiling_data_ = stats; }
75 std::ostringstream oss;
80 oss <<
" Exit Status: " << StatusToString(exit_status_) <<
"\n";
81 if (!exit_reason_.empty()) {
82 oss <<
" Exit Reason: " << exit_reason_ <<
"\n";
86 oss <<
" Sim Time: " << std::fixed << std::setprecision(2) << sim_time_ <<
" s\n";
87 oss <<
" Wall Time: " << std::scientific << std::setprecision(2) << wall_time_
92 oss <<
" Real-Time Factor: " << std::fixed << std::setprecision(1) << real_time_factor_
94 if (real_time_factor_ > 1.0) {
95 oss <<
"(Faster than real-time)\n";
96 }
else if (real_time_factor_ < 1.0) {
97 oss <<
"(Slower than real-time)\n";
99 oss <<
"(Real-time)\n";
104 if (!profiling_data_.empty()) {
105 oss <<
"\n" << GenerateProfilingTable();
116 if (console_.IsColorEnabled()) {
125 std::cout << debrief;
133 std::string exit_reason_;
134 double sim_time_ = 0.0;
135 double wall_time_ = 0.0;
136 double real_time_factor_ = 0.0;
137 std::vector<ComponentStats> profiling_data_;
139 [[nodiscard]]
static std::string StatusToString(
ExitStatus status) {
144 return "END CONDITION MET";
155 [[nodiscard]] std::string GenerateProfilingTable()
const {
156 std::ostringstream oss;
158 oss <<
" [ PROFILE HOTSPOTS ]\n";
161 std::vector<ComponentStats> sorted = profiling_data_;
162 std::sort(sorted.begin(), sorted.end(),
163 [](
const ComponentStats &a,
const ComponentStats &b) {
164 return a.percent_load > b.percent_load;
168 table.AddColumn(
"COMPONENT", 20);
172 for (
const auto &stat : sorted) {
173 std::ostringstream avg;
174 avg << std::fixed << std::setprecision(1) << stat.avg_time_us;
175 std::ostringstream load;
176 load << std::fixed << std::setprecision(1) << stat.percent_load <<
"%";
177 table.AddRow({stat.name, avg.str(), load.str()});
181 std::istringstream iss(table.Render());
183 while (std::getline(iss, line)) {
184 oss <<
" " << line <<
"\n";
190 [[nodiscard]] std::string GenerateQuote()
const {
191 switch (exit_status_) {
194 return " \"Icarus flew... and this time, he stuck the landing.\"";
196 return " \"Mission aborted. Sometimes discretion is the better part of valor.\"";
198 return " \"Houston, we have a problem.\"";
200 return " \"The numbers went to infinity... and beyond.\"";
ASCII table generator with box-drawing characters.
ASCII art banners and headers.
Console abstraction with ANSI color support.
@ Right
Definition AsciiTable.hpp:32
static std::string GetDebriefHeader()
Get the mission debrief header.
Definition Banner.hpp:38
static std::string GetRule(int width=80, char c='=')
Get horizontal rule.
Definition Banner.hpp:43
Console output with color and formatting support.
Definition Console.hpp:111
Base class for all Icarus exceptions.
Definition Error.hpp:52
std::string Generate() const
Generate the full debrief string.
Definition MissionDebrief.hpp:74
void Print() const
Generate and print to console.
Definition MissionDebrief.hpp:114
void SetTiming(double sim_time, double wall_time)
Set timing information.
Definition MissionDebrief.hpp:62
void SetExitReason(const std::string &reason)
Set exit reason message.
Definition MissionDebrief.hpp:59
void SetExitStatus(ExitStatus status)
Set exit status.
Definition MissionDebrief.hpp:56
MissionDebrief(const Console &console)
Definition MissionDebrief.hpp:53
void SetProfilingData(const std::vector< ComponentStats > &stats)
Set profiling data.
Definition MissionDebrief.hpp:71
Definition AggregationTypes.hpp:13
ExitStatus
Exit status codes.
Definition MissionDebrief.hpp:26
@ Divergence
Numerical divergence.
Definition MissionDebrief.hpp:31
@ UserAbort
User requested abort.
Definition MissionDebrief.hpp:29
@ Success
Normal completion.
Definition MissionDebrief.hpp:27
@ EndConditionMet
End condition triggered.
Definition MissionDebrief.hpp:28
@ Error
Error during simulation.
Definition MissionDebrief.hpp:30
static constexpr const char * Red
Definition Console.hpp:58
static constexpr const char * Green
Definition Console.hpp:59
Component timing statistics.
Definition MissionDebrief.hpp:37
double total_time_us
Definition MissionDebrief.hpp:40
double percent_load
Definition MissionDebrief.hpp:43
std::size_t call_count
Definition MissionDebrief.hpp:39
double max_time_us
Definition MissionDebrief.hpp:42
std::string name
Definition MissionDebrief.hpp:38
double avg_time_us
Definition MissionDebrief.hpp:41