forked from cory/tildefriends
Attempt to track CPU usage of libuv worker threads.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4198 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
10
src/task.c
10
src/task.c
@ -103,7 +103,9 @@ typedef struct _tf_task_t
|
||||
uv_timer_t trace_timer;
|
||||
uint64_t last_hrtime;
|
||||
uint64_t last_idle_time;
|
||||
uint64_t last_thread_time;
|
||||
float idle_percent;
|
||||
float thread_percent;
|
||||
|
||||
uv_idle_t idle;
|
||||
uv_prepare_t prepare;
|
||||
@ -720,7 +722,8 @@ static JSValue _tf_task_getStats(JSContext* context, JSValueConst this_val, int
|
||||
JS_SetPropertyStr(context, result, "export_count", JS_NewInt32(context, task->_export_count));
|
||||
JS_SetPropertyStr(context, result, "promise_count", JS_NewInt32(context, task->_promise_count));
|
||||
|
||||
JS_SetPropertyStr(context, result, "idle_percent", JS_NewFloat64(context, task->idle_percent));
|
||||
JS_SetPropertyStr(context, result, "cpu_percent", JS_NewFloat64(context, 100.0f - task->idle_percent));
|
||||
JS_SetPropertyStr(context, result, "thread_percent", JS_NewFloat64(context, task->thread_percent));
|
||||
|
||||
uint64_t total_memory = uv_get_total_memory();
|
||||
size_t rss;
|
||||
@ -1373,9 +1376,12 @@ static void _tf_task_trace_timer(uv_timer_t* timer)
|
||||
tf_task_t* task = timer->data;
|
||||
uint64_t hrtime = uv_hrtime();
|
||||
uint64_t idle_time = uv_metrics_idle_time(&task->_loop);
|
||||
uint64_t thread_time = tf_ssb_get_average_thread_time(task->_ssb);
|
||||
task->idle_percent = (hrtime - task->last_hrtime) ? 100.0f * (idle_time - task->last_idle_time) / (hrtime - task->last_hrtime) : 0.0f;
|
||||
task->thread_percent = (hrtime - task->last_hrtime) ? 100.0f * (thread_time - task->last_thread_time) / (hrtime - task->last_hrtime) : 0.0f;
|
||||
task->last_hrtime = hrtime;
|
||||
task->last_idle_time = idle_time;
|
||||
task->last_thread_time = thread_time;
|
||||
const char* k_names[] =
|
||||
{
|
||||
"child_tasks",
|
||||
@ -1383,6 +1389,7 @@ static void _tf_task_trace_timer(uv_timer_t* timer)
|
||||
"exports",
|
||||
"promises",
|
||||
"idle_percent",
|
||||
"thread_percent",
|
||||
};
|
||||
int64_t values[] =
|
||||
{
|
||||
@ -1391,6 +1398,7 @@ static void _tf_task_trace_timer(uv_timer_t* timer)
|
||||
task->_export_count,
|
||||
task->_promise_count,
|
||||
(int64_t)task->idle_percent,
|
||||
(int64_t)task->thread_percent,
|
||||
};
|
||||
tf_trace_counter(task->_trace, "task", sizeof(k_names) / sizeof(*k_names), k_names, values);
|
||||
}
|
||||
|
Reference in New Issue
Block a user