added runtime in ms to -p option
This commit is contained in:
parent
c75a04a4f7
commit
a92020ac1e
|
|
@ -46,4 +46,4 @@
|
|||
|
||||
(print (and (print "xx") (= 1 0) (print "yy")))
|
||||
|
||||
(sleep 1.5)
|
||||
; (sleep 1.5)
|
||||
6
ml.cpp
6
ml.cpp
|
|
@ -1922,6 +1922,9 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
srand(time(NULL));
|
||||
try {
|
||||
// performance monitor on
|
||||
if (cmdOptionExists(argv, argv + argc, "-p"))
|
||||
MlPerfMon::instance().turnOn();
|
||||
// skip loading std lib
|
||||
if (!cmdOptionExists(argv, argv + argc, "-b")) {
|
||||
load_std_lib(env);
|
||||
|
|
@ -1936,9 +1939,6 @@ int main(int argc, char *argv[]) {
|
|||
std::cout << VERSION << std::endl;
|
||||
return 0;
|
||||
}
|
||||
// performance monitor on
|
||||
if (cmdOptionExists(argv, argv + argc, "-p"))
|
||||
MlPerfMon::instance().turnOn();
|
||||
// passed code
|
||||
if (cmdOptionExists(argv, argv + argc, "-c")) {
|
||||
std::vector<std::string> codes = getCmdOption(argv, argc, "-c");
|
||||
|
|
|
|||
|
|
@ -3,10 +3,14 @@
|
|||
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <numeric>
|
||||
|
||||
|
||||
using namespace std::chrono;
|
||||
|
||||
void MlPerfMon::turnOn() {
|
||||
perfOn = true;
|
||||
|
||||
start_time = std::chrono::high_resolution_clock::now();
|
||||
}
|
||||
|
||||
void MlPerfMon::add_method_call(const std::string &method) {
|
||||
|
|
@ -22,21 +26,32 @@ void MlPerfMon::add_method_call(const std::string &method) {
|
|||
|
||||
void MlPerfMon::print_results() {
|
||||
if (perfOn) {
|
||||
std::cerr << std::endl << std::endl << "Call Frequency" << std::endl;
|
||||
std::chrono::time_point<std::chrono::high_resolution_clock> end_time = std::chrono::high_resolution_clock::now();
|
||||
|
||||
using callcount = std::pair<std::string, long>;
|
||||
|
||||
std::vector<callcount> v(begin(calls_counter), end(calls_counter));
|
||||
std::sort(std::begin(v), std::end(v), [](const callcount& a, const callcount& b) { return a.second > b.second; });
|
||||
long total_calls = 0;
|
||||
for(auto const& c : v) { total_calls += c.second; }
|
||||
|
||||
std::cerr << std::endl << std::endl;
|
||||
std::cerr << "perf stats" << std::endl;
|
||||
std::cerr << "run time : " << duration_cast<milliseconds>(end_time - start_time).count() << " ms " << std::endl;
|
||||
std::cerr << "total calls : " << total_calls << std::endl;
|
||||
std::cerr << "methods called : " << calls_counter.size() << std::endl;
|
||||
std::cerr << std::endl;
|
||||
|
||||
int i {0};
|
||||
for(auto &p : v) {
|
||||
// TODO when method name longer than 15 chars, here it crashes
|
||||
p.first.insert(p.first.end(), 15 - p.first.size(), ' ');
|
||||
if (p.first.size() >= method_name_print_len)
|
||||
p.first.erase(method_name_print_len, std::string::npos);
|
||||
else
|
||||
p.first.insert(p.first.end(), method_name_print_len - p.first.size(), ' ');
|
||||
|
||||
std::cerr << p.first << " " << p.second << std::endl;
|
||||
|
||||
i++;
|
||||
if (i > 10) break;
|
||||
if (i > print_top_methods) break;
|
||||
}
|
||||
|
||||
std::cerr << std::endl;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,10 @@
|
|||
#include "ml.h"
|
||||
|
||||
#include <unordered_map>
|
||||
#include <chrono>
|
||||
|
||||
static const int method_name_print_len = 15;
|
||||
static const int print_top_methods = 15;
|
||||
|
||||
class MlPerfMon {
|
||||
|
||||
|
|
@ -25,4 +29,5 @@ public:
|
|||
private:
|
||||
bool perfOn;
|
||||
std::unordered_map<std::string, long> calls_counter;
|
||||
std::chrono::time_point<std::chrono::high_resolution_clock> start_time;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue