summaryrefslogtreecommitdiffstats
path: root/Utilities/cmlibuv/src/uv-common.c
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-09-24 19:15:38 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-09-24 19:16:28 (GMT)
commitc98ec731f90eb0180c89108b7d2e42263b66d1ed (patch)
tree2d67994bbea44ba6712e6dcb637438f6dbfb0ac6 /Utilities/cmlibuv/src/uv-common.c
parent0436f70f80de4a56313b9da0668ac6674078b2d1 (diff)
parent7a0506bafe387bfff441c0159b9a3d58f68db177 (diff)
downloadCMake-c98ec731f90eb0180c89108b7d2e42263b66d1ed.zip
CMake-c98ec731f90eb0180c89108b7d2e42263b66d1ed.tar.gz
CMake-c98ec731f90eb0180c89108b7d2e42263b66d1ed.tar.bz2
Merge topic 'update-libuv'
7a0506bafe libuv: Suppress conversion warning on Windows 2269ad6a0a libuv: Add fs_copy stub to cmake-bootstrap.c e21325c2c6 Merge branch 'upstream-libuv' into update-libuv c1463f959f libuv 2020-09-22 (ed5b42d5) Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5259
Diffstat (limited to 'Utilities/cmlibuv/src/uv-common.c')
-rw-r--r--Utilities/cmlibuv/src/uv-common.c63
1 files changed, 61 insertions, 2 deletions
diff --git a/Utilities/cmlibuv/src/uv-common.c b/Utilities/cmlibuv/src/uv-common.c
index 2fcbe3d..f986d75 100644
--- a/Utilities/cmlibuv/src/uv-common.c
+++ b/Utilities/cmlibuv/src/uv-common.c
@@ -861,11 +861,70 @@ __attribute__((destructor))
void uv_library_shutdown(void) {
static int was_shutdown;
- if (was_shutdown)
+ if (uv__load_relaxed(&was_shutdown))
return;
uv__process_title_cleanup();
uv__signal_cleanup();
uv__threadpool_cleanup();
- was_shutdown = 1;
+ uv__store_relaxed(&was_shutdown, 1);
+}
+
+
+void uv__metrics_update_idle_time(uv_loop_t* loop) {
+ uv__loop_metrics_t* loop_metrics;
+ uint64_t entry_time;
+ uint64_t exit_time;
+
+ if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME))
+ return;
+
+ loop_metrics = uv__get_loop_metrics(loop);
+
+ /* The thread running uv__metrics_update_idle_time() is always the same
+ * thread that sets provider_entry_time. So it's unnecessary to lock before
+ * retrieving this value.
+ */
+ if (loop_metrics->provider_entry_time == 0)
+ return;
+
+ exit_time = uv_hrtime();
+
+ uv_mutex_lock(&loop_metrics->lock);
+ entry_time = loop_metrics->provider_entry_time;
+ loop_metrics->provider_entry_time = 0;
+ loop_metrics->provider_idle_time += exit_time - entry_time;
+ uv_mutex_unlock(&loop_metrics->lock);
+}
+
+
+void uv__metrics_set_provider_entry_time(uv_loop_t* loop) {
+ uv__loop_metrics_t* loop_metrics;
+ uint64_t now;
+
+ if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME))
+ return;
+
+ now = uv_hrtime();
+ loop_metrics = uv__get_loop_metrics(loop);
+ uv_mutex_lock(&loop_metrics->lock);
+ loop_metrics->provider_entry_time = now;
+ uv_mutex_unlock(&loop_metrics->lock);
+}
+
+
+uint64_t uv_metrics_idle_time(uv_loop_t* loop) {
+ uv__loop_metrics_t* loop_metrics;
+ uint64_t entry_time;
+ uint64_t idle_time;
+
+ loop_metrics = uv__get_loop_metrics(loop);
+ uv_mutex_lock(&loop_metrics->lock);
+ idle_time = loop_metrics->provider_idle_time;
+ entry_time = loop_metrics->provider_entry_time;
+ uv_mutex_unlock(&loop_metrics->lock);
+
+ if (entry_time > 0)
+ idle_time += uv_hrtime() - entry_time;
+ return idle_time;
}