forked from cory/tildefriends
Capture (almost) all worker thread time.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4373 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
@ -1144,12 +1144,25 @@ static void _tf_ssb_rpc_connections_changed_callback(tf_ssb_t* ssb, tf_ssb_chang
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct _delete_blobs_work_t
|
||||
{
|
||||
uv_work_t work;
|
||||
uv_thread_t thread_id;
|
||||
tf_ssb_t* ssb;
|
||||
uint64_t start_time;
|
||||
uint64_t end_time;
|
||||
} delete_blobs_work_t;
|
||||
|
||||
static void _tf_ssb_rpc_delete_blobs_work(uv_work_t* work)
|
||||
{
|
||||
tf_ssb_t* ssb = work->data;
|
||||
delete_blobs_work_t* delete = work->data;
|
||||
delete->start_time = uv_hrtime();
|
||||
delete->thread_id = uv_thread_self();
|
||||
tf_ssb_t* ssb = delete->ssb;
|
||||
int64_t age = _get_global_setting_int64(ssb, "blob_expire_age_seconds", -1);
|
||||
if (age <= 0)
|
||||
{
|
||||
delete->end_time = uv_hrtime();
|
||||
return;
|
||||
}
|
||||
int64_t start_ns = uv_hrtime();
|
||||
@ -1189,11 +1202,14 @@ static void _tf_ssb_rpc_delete_blobs_work(uv_work_t* work)
|
||||
int64_t duration_ms = (uv_hrtime() - start_ns) / 1000000LL;
|
||||
tf_printf("Deleted %d blobs in %d ms.\n", deleted, (int)duration_ms);
|
||||
_tf_ssb_rpc_start_delete_blobs(ssb, deleted ? (int)duration_ms : (15 * 60 * 1000));
|
||||
delete->end_time = uv_hrtime();
|
||||
}
|
||||
|
||||
static void _tf_ssb_rpc_delete_blobs_after_work(uv_work_t* work, int status)
|
||||
{
|
||||
tf_free(work);
|
||||
delete_blobs_work_t* delete = work->data;
|
||||
tf_ssb_record_thread_time(delete->ssb, (int64_t)delete->thread_id, delete->end_time - delete->start_time);
|
||||
tf_free(delete);
|
||||
}
|
||||
|
||||
static void _tf_ssb_rpc_timer_on_close(uv_handle_t* handle)
|
||||
@ -1204,9 +1220,9 @@ static void _tf_ssb_rpc_timer_on_close(uv_handle_t* handle)
|
||||
static void _tf_ssb_rpc_start_delete_timer(uv_timer_t* timer)
|
||||
{
|
||||
tf_ssb_t* ssb = timer->data;
|
||||
uv_work_t* work = tf_malloc(sizeof(uv_work_t));
|
||||
*work = (uv_work_t) { .data = ssb };
|
||||
int r = uv_queue_work(tf_ssb_get_loop(ssb), work, _tf_ssb_rpc_delete_blobs_work, _tf_ssb_rpc_delete_blobs_after_work);
|
||||
delete_blobs_work_t* work = tf_malloc(sizeof(delete_blobs_work_t));
|
||||
*work = (delete_blobs_work_t) { .work = { .data = work}, .ssb = ssb };
|
||||
int r = uv_queue_work(tf_ssb_get_loop(ssb), &work->work, _tf_ssb_rpc_delete_blobs_work, _tf_ssb_rpc_delete_blobs_after_work);
|
||||
if (r)
|
||||
{
|
||||
tf_printf("uv_queue_work: %s\n", uv_strerror(r));
|
||||
|
Reference in New Issue
Block a user