Commit 3c972d7b authored by Chris Toshok's avatar Chris Toshok

dump stats on Ctrl-C as well as normal exit

parent b1bd16be
...@@ -362,6 +362,7 @@ static void handle_sigint(int signum) { ...@@ -362,6 +362,7 @@ static void handle_sigint(int signum) {
// For now, just call abort(), so that we get a traceback at least. // For now, just call abort(), so that we get a traceback at least.
fprintf(stderr, "SIGINT!\n"); fprintf(stderr, "SIGINT!\n");
joinRuntime(); joinRuntime();
Stats::dump();
abort(); abort();
} }
......
...@@ -23,6 +23,7 @@ namespace pyston { ...@@ -23,6 +23,7 @@ namespace pyston {
#if !DISABLE_STATS #if !DISABLE_STATS
std::vector<long>* Stats::counts; std::vector<long>* Stats::counts;
std::unordered_map<int, std::string>* Stats::names; std::unordered_map<int, std::string>* Stats::names;
bool Stats::enabled;
StatCounter::StatCounter(const std::string& name) : id(Stats::getStatId(name)) { StatCounter::StatCounter(const std::string& name) : id(Stats::getStatId(name)) {
} }
...@@ -51,6 +52,9 @@ int Stats::getStatId(const std::string& name) { ...@@ -51,6 +52,9 @@ int Stats::getStatId(const std::string& name) {
} }
void Stats::dump() { void Stats::dump() {
if (!Stats::enabled)
return;
printf("Stats:\n"); printf("Stats:\n");
std::vector<std::pair<std::string, int>> pairs; std::vector<std::pair<std::string, int>> pairs;
......
...@@ -32,10 +32,12 @@ struct Stats { ...@@ -32,10 +32,12 @@ struct Stats {
private: private:
static std::vector<long>* counts; static std::vector<long>* counts;
static std::unordered_map<int, std::string>* names; static std::unordered_map<int, std::string>* names;
static bool enabled;
public: public:
static int getStatId(const std::string& name); static int getStatId(const std::string& name);
static void setEnabled(bool enabled) { Stats::enabled = enabled; }
static void log(int id, int count = 1) { (*counts)[id] += count; } static void log(int id, int count = 1) { (*counts)[id] += count; }
static void dump(); static void dump();
...@@ -64,6 +66,7 @@ public: ...@@ -64,6 +66,7 @@ public:
#else #else
struct Stats { struct Stats {
static void setEnabled(bool enabled) {}
static void dump() { printf("(Stats disabled)\n"); } static void dump() { printf("(Stats disabled)\n"); }
static void log(int id, int count = 1) {} static void log(int id, int count = 1) {}
static int getStatId(const std::string& name) { return 0; } static int getStatId(const std::string& name) { return 0; }
......
...@@ -95,7 +95,6 @@ static int main(int argc, char** argv) { ...@@ -95,7 +95,6 @@ static int main(int argc, char** argv) {
int code; int code;
bool force_repl = false; bool force_repl = false;
bool stats = false;
bool unbuffered = false; bool unbuffered = false;
const char* command = NULL; const char* command = NULL;
...@@ -123,7 +122,7 @@ static int main(int argc, char** argv) { ...@@ -123,7 +122,7 @@ static int main(int argc, char** argv) {
} else if (code == 'j') { } else if (code == 'j') {
DUMPJIT = true; DUMPJIT = true;
} else if (code == 's') { } else if (code == 's') {
stats = true; Stats::setEnabled(true);
} else if (code == 'S') { } else if (code == 'S') {
Py_NoSiteFlag = 1; Py_NoSiteFlag = 1;
} else if (code == 'u') { } else if (code == 'u') {
...@@ -241,8 +240,7 @@ static int main(int argc, char** argv) { ...@@ -241,8 +240,7 @@ static int main(int argc, char** argv) {
} catch (ExcInfo e) { } catch (ExcInfo e) {
int retcode = 1; int retcode = 1;
(void)handle_toplevel_exn(e, &retcode); (void)handle_toplevel_exn(e, &retcode);
if (stats) Stats::dump();
Stats::dump();
return retcode; return retcode;
} }
} }
...@@ -269,8 +267,7 @@ static int main(int argc, char** argv) { ...@@ -269,8 +267,7 @@ static int main(int argc, char** argv) {
int retcode = 1; int retcode = 1;
(void)handle_toplevel_exn(e, &retcode); (void)handle_toplevel_exn(e, &retcode);
if (!force_repl) { if (!force_repl) {
if (stats) Stats::dump();
Stats::dump();
return retcode; return retcode;
} }
} }
...@@ -320,8 +317,7 @@ static int main(int argc, char** argv) { ...@@ -320,8 +317,7 @@ static int main(int argc, char** argv) {
} catch (ExcInfo e) { } catch (ExcInfo e) {
int retcode = 0xdeadbeef; // should never be seen int retcode = 0xdeadbeef; // should never be seen
if (handle_toplevel_exn(e, &retcode)) { if (handle_toplevel_exn(e, &retcode)) {
if (stats) Stats::dump();
Stats::dump();
return retcode; return retcode;
} }
} }
...@@ -340,8 +336,7 @@ static int main(int argc, char** argv) { ...@@ -340,8 +336,7 @@ static int main(int argc, char** argv) {
int rtncode = joinRuntime(); int rtncode = joinRuntime();
_t.split("finishing up"); _t.split("finishing up");
if (stats) Stats::dump();
Stats::dump();
return rtncode; return rtncode;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment