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) {
// For now, just call abort(), so that we get a traceback at least.
fprintf(stderr, "SIGINT!\n");
joinRuntime();
Stats::dump();
abort();
}
......
......@@ -23,6 +23,7 @@ namespace pyston {
#if !DISABLE_STATS
std::vector<long>* Stats::counts;
std::unordered_map<int, std::string>* Stats::names;
bool Stats::enabled;
StatCounter::StatCounter(const std::string& name) : id(Stats::getStatId(name)) {
}
......@@ -51,6 +52,9 @@ int Stats::getStatId(const std::string& name) {
}
void Stats::dump() {
if (!Stats::enabled)
return;
printf("Stats:\n");
std::vector<std::pair<std::string, int>> pairs;
......
......@@ -32,10 +32,12 @@ struct Stats {
private:
static std::vector<long>* counts;
static std::unordered_map<int, std::string>* names;
static bool enabled;
public:
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 dump();
......@@ -64,6 +66,7 @@ public:
#else
struct Stats {
static void setEnabled(bool enabled) {}
static void dump() { printf("(Stats disabled)\n"); }
static void log(int id, int count = 1) {}
static int getStatId(const std::string& name) { return 0; }
......
......@@ -95,7 +95,6 @@ static int main(int argc, char** argv) {
int code;
bool force_repl = false;
bool stats = false;
bool unbuffered = false;
const char* command = NULL;
......@@ -123,7 +122,7 @@ static int main(int argc, char** argv) {
} else if (code == 'j') {
DUMPJIT = true;
} else if (code == 's') {
stats = true;
Stats::setEnabled(true);
} else if (code == 'S') {
Py_NoSiteFlag = 1;
} else if (code == 'u') {
......@@ -241,7 +240,6 @@ static int main(int argc, char** argv) {
} catch (ExcInfo e) {
int retcode = 1;
(void)handle_toplevel_exn(e, &retcode);
if (stats)
Stats::dump();
return retcode;
}
......@@ -269,7 +267,6 @@ static int main(int argc, char** argv) {
int retcode = 1;
(void)handle_toplevel_exn(e, &retcode);
if (!force_repl) {
if (stats)
Stats::dump();
return retcode;
}
......@@ -320,7 +317,6 @@ static int main(int argc, char** argv) {
} catch (ExcInfo e) {
int retcode = 0xdeadbeef; // should never be seen
if (handle_toplevel_exn(e, &retcode)) {
if (stats)
Stats::dump();
return retcode;
}
......@@ -340,7 +336,6 @@ static int main(int argc, char** argv) {
int rtncode = joinRuntime();
_t.split("finishing up");
if (stats)
Stats::dump();
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