diff options
author | Sam Varshavchik <mrsam@courier-mta.com> | 2020-01-04 10:43:59 -0500 |
---|---|---|
committer | Matt Turner <mattst88@gmail.com> | 2020-02-22 19:12:51 +0000 |
commit | f9f4b00aad69ff36e81c63089b1b16660eaca900 (patch) | |
tree | f5482f4dea236ae102c89b1916ed3bb71a0efc1a /src/xcb_conn.c | |
parent | 59e271e15bcecf0c461cd5c6c59081fb86b96c22 (diff) |
Implement xcb_total_read() and xcb_total_written().
Returns raw byte counts that have been read or written to the
xcb_connection_t.
I found it very useful when developing a high level widget toolkit, to
track down inefficient/sub-optimum code that generates a lot of X
protocol traffic.
Signed-off-by: Sam Varshavchik <mrsam@courier-mta.com>
Diffstat (limited to 'src/xcb_conn.c')
-rw-r--r-- | src/xcb_conn.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/xcb_conn.c b/src/xcb_conn.c index 7d09637..8dab658 100644 --- a/src/xcb_conn.c +++ b/src/xcb_conn.c @@ -287,6 +287,7 @@ static int write_vec(xcb_connection_t *c, struct iovec **vector, int *count) return 0; } + c->out.total_written += n; for(; *count; --*count, ++*vector) { int cur = (*vector)->iov_len; @@ -528,3 +529,30 @@ int _xcb_conn_wait(xcb_connection_t *c, pthread_cond_t *cond, struct iovec **vec return ret; } + +uint64_t xcb_total_read(xcb_connection_t *c) +{ + uint64_t n; + + if (xcb_connection_has_error(c)) + return 0; + + pthread_mutex_lock(&c->iolock); + n = c->in.total_read; + pthread_mutex_unlock(&c->iolock); + return n; +} + +uint64_t xcb_total_written(xcb_connection_t *c) +{ + uint64_t n; + + if (xcb_connection_has_error(c)) + return 0; + + pthread_mutex_lock(&c->iolock); + n = c->out.total_written; + pthread_mutex_unlock(&c->iolock); + + return n; +} |