introduce lws_latency
Signed-off-by: Andy Green <andy.green@linaro.org>
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index e6c87fd..38fc098 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -63,6 +63,7 @@
"HEADER",
"EXTENSION",
"CLIENT",
+ "LATENCY",
};
int
@@ -929,6 +930,11 @@
int m;
struct libwebsocket_extension *ext;
+#ifdef LWS_LATENCY
+ if (context->worst_latency_info[0])
+ lwsl_notice("Worst latency: %s\n", context->worst_latency_info);
+#endif
+
for (n = 0; n < context->fds_count; n++) {
struct libwebsocket *wsi = context->lws_lookup[context->fds[n].fd];
libwebsocket_close_and_free_session(context,
@@ -1207,6 +1213,40 @@
return wsi->sock;
}
+#ifdef LWS_LATENCY
+void
+lws_latency(struct libwebsocket_context *context, struct libwebsocket *wsi, const char *action, int ret, int completed)
+{
+ struct timeval tv;
+ unsigned long u;
+ char buf[256];
+
+ gettimeofday(&tv, NULL);
+
+ u = (tv.tv_sec * 1000000) + tv.tv_usec;
+
+ if (action) {
+ if (completed) {
+ if (wsi->action_start == wsi->latency_start)
+ sprintf(buf, "Completion first try lat %luus: %p: ret %d: %s\n", u - wsi->latency_start, (void *)wsi, ret, action);
+ else
+ sprintf(buf, "Completion %luus: lat %luus: %p: ret %d: %s\n", u - wsi->action_start, u - wsi->latency_start, (void *)wsi, ret, action);
+ wsi->action_start = 0;
+ } else
+ sprintf(buf, "lat %luus: %p: ret %d: %s\n", u - wsi->latency_start, (void *)wsi, ret, action);
+ if (u - wsi->latency_start > context->worst_latency) {
+ context->worst_latency = u - wsi->latency_start;
+ strcpy(context->worst_latency_info, buf);
+ }
+ lwsl_latency("%s", buf);
+ } else {
+ wsi->latency_start = u;
+ if (!wsi->action_start)
+ wsi->action_start = u;
+ }
+}
+#endif
+
#ifdef LWS_NO_SERVER
int
_libwebsocket_rx_flow_control(struct libwebsocket *wsi)