diff options
| -rw-r--r-- | run_and_record/c++/main.cpp | 30 | ||||
| -rw-r--r-- | run_and_record/c++/schema.hpp | 3 |
2 files changed, 22 insertions, 11 deletions
diff --git a/run_and_record/c++/main.cpp b/run_and_record/c++/main.cpp index f1feeb9..c52d5f5 100644 --- a/run_and_record/c++/main.cpp +++ b/run_and_record/c++/main.cpp @@ -246,21 +246,26 @@ saw::error_or<void> kel_main(int argc, char** argv){ return saw::make_error<saw::err::critical>("Command is empty"); } + argc_prog = i - cmd_pos_start; { - cmd_prog = cmd_args.at({0u}); - auto eov = commands.add(std::move(cmd_d)); + argv[i] = 0; + auto start_time = std::chrono::steady_clock::now(); + auto eov = run_program(argc_prog,&argv[cmd_pos_start]); if(eov.is_error()){ return eov; } - cmd_d = {}; + auto stop_time = std::chrono::steady_clock::now(); + auto run_duration = stop_time - start_time; + saw::data<sch::UInt64> dat_run_dur{static_cast<uint64_t>(std::chrono::duration_cast<std::chrono::nanoseconds>(run_duration).count())}; + cmd_d.template get<"duration">() = dat_run_dur; } - argc_prog = i - cmd_pos_start; { - argv[i] = 0; - auto eov = run_program(argc_prog,&argv[cmd_pos_start]); + cmd_prog = cmd_args.at({0u}); + auto eov = commands.add(std::move(cmd_d)); if(eov.is_error()){ return eov; } + cmd_d = {}; } cmd_pos_start = i + 1; }else{ @@ -272,15 +277,20 @@ saw::error_or<void> kel_main(int argc, char** argv){ return saw::make_error<saw::err::critical>("Last command is empty"); } { - cmd_prog = cmd_args.at({0u}); - auto eov = commands.add(std::move(cmd_d)); + argc_prog = argc - cmd_pos_start; + auto start_time = std::chrono::steady_clock::now(); + auto eov = run_program(argc_prog,&argv[cmd_pos_start]); if(eov.is_error()){ return eov; } + auto stop_time = std::chrono::steady_clock::now(); + auto run_duration = stop_time - start_time; + saw::data<sch::UInt64> dat_run_dur{static_cast<uint64_t>(std::chrono::duration_cast<std::chrono::nanoseconds>(run_duration).count())}; + cmd_d.template get<"duration">() = dat_run_dur; } { - argc_prog = argc - cmd_pos_start; - auto eov = run_program(argc_prog,&argv[cmd_pos_start]); + cmd_prog = cmd_args.at({0u}); + auto eov = commands.add(std::move(cmd_d)); if(eov.is_error()){ return eov; } diff --git a/run_and_record/c++/schema.hpp b/run_and_record/c++/schema.hpp index 87405ef..8994e97 100644 --- a/run_and_record/c++/schema.hpp +++ b/run_and_record/c++/schema.hpp @@ -27,7 +27,8 @@ using RarEnv = Array<String>; using RarCommand = Struct< Member<String, "program">, - Member<Array<String>, "arguments"> + Member<Array<String>, "arguments">, + Member<UInt64, "duration"> >; using RarFileData = Struct< |
