Skip to content

Commit b4f3f2b

Browse files
authored
Add call timing in the report of dt.options.core_logger (#1094)
1 parent 6639342 commit b4f3f2b

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

c/py_utils.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include "py_datatable.h"
1414
#include "py_utils.h"
1515

16+
double logger_timer;
17+
char logger_msg[1000];
1618

1719
/**
1820
* Create and return a new instance of python's None object

c/py_utils.h

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,22 @@
2020
namespace config {
2121
extern PyObject* logger;
2222
};
23+
extern double logger_timer;
24+
extern char logger_msg[];
2325
void log_call(const char* msg);
2426

2527

2628
#define ES_FUNCTION(decl, call, log_msg) \
2729
decl { \
2830
try { \
2931
if (config::logger) { \
30-
log_call("call: " log_msg); \
32+
snprintf(logger_msg, 1000, "call %s", log_msg); \
33+
log_call(logger_msg); \
34+
logger_timer = wallclock(); \
3135
PyObject* res = call; \
32-
log_call("done: " log_msg); \
36+
snprintf(logger_msg, 1000, "done %s in %.3f ms", \
37+
log_msg, (wallclock() - logger_timer) * 1000.0); \
38+
log_call(logger_msg); \
3339
return res; \
3440
} else { \
3541
return call; \
@@ -45,9 +51,13 @@ void log_call(const char* msg);
4551
decl { \
4652
try { \
4753
if (config::logger) { \
48-
log_call("call: " log_msg); \
54+
snprintf(logger_msg, 1000, "call %s", log_msg); \
55+
log_call(logger_msg); \
56+
logger_timer = wallclock(); \
4957
call; \
50-
log_call("done: " log_msg); \
58+
snprintf(logger_msg, 1000, "done %s in %.3f ms", \
59+
log_msg, (wallclock() - logger_timer) * 1000.0); \
60+
log_call(logger_msg); \
5161
} else { \
5262
call; \
5363
} \
@@ -61,9 +71,13 @@ void log_call(const char* msg);
6171
decl { \
6272
try { \
6373
if (config::logger) { \
64-
log_call("call: " log_msg); \
74+
snprintf(logger_msg, 1000, "call %s", log_msg); \
75+
log_call(logger_msg); \
76+
logger_timer = wallclock(); \
6577
int res = call; \
66-
log_call("done: " log_msg); \
78+
snprintf(logger_msg, 1000, "done %s in %.3f ms", \
79+
log_msg, (wallclock() - logger_timer) * 1000.0); \
80+
log_call(logger_msg); \
6781
return res; \
6882
} else { \
6983
return call; \

tests/test_dt_options.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ def info(self, msg):
133133
assert dt.options.core_logger == ml
134134
f0 = dt.Frame([1, 2, 3])
135135
assert f0.internal.check()
136-
assert "call: DataTable.datatable_from_list(...)" in ml.messages
137-
assert "call: DataTable.ncols" in ml.messages
138-
assert "call: DataTable.nrows" in ml.messages
139-
assert "call: DataTable.check(...)" in ml.messages
140-
assert "done: DataTable.check(...)" in ml.messages
136+
assert "call DataTable.datatable_from_list(...)" in ml.messages
137+
assert "call DataTable.ncols" in ml.messages
138+
assert "call DataTable.nrows" in ml.messages
139+
assert "call DataTable.check(...)" in ml.messages
140+
assert "done DataTable.check(...) in" in ml.messages
141141
del dt.options.core_logger
142142
assert dt.options.core_logger is None
143143

0 commit comments

Comments
 (0)