diff options
| author | Po Lu <luangruo@yahoo.com> | 2022-08-03 15:13:14 +0800 |
|---|---|---|
| committer | Po Lu <luangruo@yahoo.com> | 2022-08-03 15:14:29 +0800 |
| commit | bb3e281236bd39c2fbd0702c4f3e07dfaec7afe2 (patch) | |
| tree | 4bea86b1b4ec6327085c2457e912f97282ede353 /src | |
| parent | 99bbc1fa23c3a54f1cbd2c56c57773dd471b3ef3 (diff) | |
Improve X server time computation
* src/xterm.c (x_sync_get_monotonic_time): Use that if
available.
(x_display_set_last_user_time): Compute an offset between the
monotonic time and the X server time if they are not identical.
* src/xterm.h (struct x_display_info): New field
`server_time_offset'.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.c | 15 | ||||
| -rw-r--r-- | src/xterm.h | 4 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/xterm.c b/src/xterm.c index 2239b9fa4e2..eb1a557e883 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6645,7 +6645,11 @@ x_sync_get_monotonic_time (struct x_display_info *dpyinfo, if (dpyinfo->server_time_monotonic_p) return timestamp; - return 0; + /* This means we haven't yet initialized the server time offset. */ + if (!dpyinfo->server_time_offset) + return 0; + + return timestamp - dpyinfo->server_time_offset; } /* Return the current monotonic time in the same format as a @@ -7464,7 +7468,14 @@ x_display_set_last_user_time (struct x_display_info *dpyinfo, Time time, && time * 1000 < monotonic_time + 500 * 1000) dpyinfo->server_time_monotonic_p = true; else - dpyinfo->server_time_monotonic_p = false; + { + /* Compute an offset that can be subtracted from the server + time to estimate the monotonic time on the X server. */ + + dpyinfo->server_time_monotonic_p = false; + dpyinfo->server_time_offset + = ((int64_t) time * 1000) - monotonic_time; + } } #endif diff --git a/src/xterm.h b/src/xterm.h index b656c8dcb2b..fb099e92ea0 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -774,6 +774,10 @@ struct x_display_info /* Whether or not the server time is probably the same as "clock_gettime (CLOCK_MONOTONIC, ...)". */ bool server_time_monotonic_p; + + /* The time difference between the X server clock and the monotonic + clock. */ + int64_t server_time_offset; #endif }; |
