forked from cory/tildefriends
Trace libuv's idle time metric.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3772 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
1ddaa7deb0
commit
e9e1a3e80d
10
src/task.c
10
src/task.c
@ -94,7 +94,10 @@ typedef struct _tf_task_t
|
|||||||
int _promise_count;
|
int _promise_count;
|
||||||
promiseid_t _nextPromise;
|
promiseid_t _nextPromise;
|
||||||
uv_loop_t _loop;
|
uv_loop_t _loop;
|
||||||
|
|
||||||
uv_timer_t trace_timer;
|
uv_timer_t trace_timer;
|
||||||
|
uint64_t last_hrtime;
|
||||||
|
uint64_t last_idle_time;
|
||||||
|
|
||||||
export_record_t** _exports;
|
export_record_t** _exports;
|
||||||
int _export_count;
|
int _export_count;
|
||||||
@ -1239,12 +1242,15 @@ static void _tf_task_promise_rejection_tracker(JSContext* context, JSValueConst
|
|||||||
static void _tf_task_trace_timer(uv_timer_t* timer)
|
static void _tf_task_trace_timer(uv_timer_t* timer)
|
||||||
{
|
{
|
||||||
tf_task_t* task = timer->data;
|
tf_task_t* task = timer->data;
|
||||||
|
uint64_t hrtime = uv_hrtime();
|
||||||
|
uint64_t idle_time = uv_metrics_idle_time(&task->_loop);
|
||||||
const char* k_names[] =
|
const char* k_names[] =
|
||||||
{
|
{
|
||||||
"child_tasks",
|
"child_tasks",
|
||||||
"imports",
|
"imports",
|
||||||
"exports",
|
"exports",
|
||||||
"promises",
|
"promises",
|
||||||
|
"idle_percent",
|
||||||
};
|
};
|
||||||
int64_t values[] =
|
int64_t values[] =
|
||||||
{
|
{
|
||||||
@ -1252,7 +1258,10 @@ static void _tf_task_trace_timer(uv_timer_t* timer)
|
|||||||
task->_import_count,
|
task->_import_count,
|
||||||
task->_export_count,
|
task->_export_count,
|
||||||
task->_promise_count,
|
task->_promise_count,
|
||||||
|
(hrtime - task->last_hrtime) ? 100LL * (idle_time - task->last_idle_time) / (hrtime - task->last_hrtime) : 0,
|
||||||
};
|
};
|
||||||
|
task->last_hrtime = hrtime;
|
||||||
|
task->last_idle_time = idle_time;
|
||||||
tf_trace_counter(task->_trace, "task", sizeof(k_names) / sizeof(*k_names), k_names, values);
|
tf_trace_counter(task->_trace, "task", sizeof(k_names) / sizeof(*k_names), k_names, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1278,6 +1287,7 @@ tf_task_t* tf_task_create()
|
|||||||
JS_NewClass(task->_runtime, _import_class_id, &def);
|
JS_NewClass(task->_runtime, _import_class_id, &def);
|
||||||
task->_loadedFiles = JS_NewObject(task->_context);
|
task->_loadedFiles = JS_NewObject(task->_context);
|
||||||
uv_loop_init(&task->_loop);
|
uv_loop_init(&task->_loop);
|
||||||
|
uv_loop_configure(&task->_loop, UV_METRICS_IDLE_TIME);
|
||||||
task->_loop.data = task;
|
task->_loop.data = task;
|
||||||
task->trace_timer.data = task;
|
task->trace_timer.data = task;
|
||||||
uv_timer_init(&task->_loop, &task->trace_timer);
|
uv_timer_init(&task->_loop, &task->trace_timer);
|
||||||
|
Loading…
Reference in New Issue
Block a user