]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve X server time computation
authorPo Lu <luangruo@yahoo.com>
Wed, 3 Aug 2022 07:13:14 +0000 (15:13 +0800)
committerPo Lu <luangruo@yahoo.com>
Wed, 3 Aug 2022 07:14:29 +0000 (15:14 +0800)
* 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'.

src/xterm.c
src/xterm.h

index 2239b9fa4e2683c3f0362e2030a46e5953056180..eb1a557e88394950c7b90b68eff2327650055739 100644 (file)
@@ -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
 
index b656c8dcb2b54b28ee795738422b6d1152e14cf5..fb099e92ea07c27cce4fdafe7a83adfbe616b495 100644 (file)
@@ -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
 };