Patchwork win32: implement missing timersub

login
register
mail settings
Submitter Blue Swirl
Date March 13, 2011, 2:49 p.m.
Message ID <AANLkTinEWYoC41sjAGwZ7oCLdu1=Tk-XkP9UJgieZBoi@mail.gmail.com>
Download mbox | patch
Permalink /patch/86597/
State New
Headers show

Comments

Blue Swirl - March 13, 2011, 2:49 p.m.
Implement and wrap timersub() for Win32.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 osdep.h  |   19 +++++++++++++++++--
 ui/vnc.c |    6 +++---
 2 files changed, 20 insertions(+), 5 deletions(-)

         return has_dirty;
@@ -2320,7 +2320,7 @@ static int vnc_update_stats(VncDisplay *vd,
struct timeval * tv)
             }

             max = rect->times[(rect->idx + count - 1) % count];
-            timersub(tv, &max, &res);
+            qemu_timersub(tv, &max, &res);

             if (timercmp(&res, &VNC_REFRESH_LOSSY, >)) {
                 rect->freq = 0;
@@ -2331,7 +2331,7 @@ static int vnc_update_stats(VncDisplay *vd,
struct timeval * tv)

             min = rect->times[rect->idx];
             max = rect->times[(rect->idx + count - 1) % count];
-            timersub(&max, &min, &res);
+            qemu_timersub(&max, &min, &res);

             rect->freq = res.tv_sec + res.tv_usec / 1000000.;
             rect->freq /= count;
Stefan Weil - March 13, 2011, 5 p.m.
Am 13.03.2011 15:49, schrieb Blue Swirl:
> Implement and wrap timersub() for Win32.
>
> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
> ---
> osdep.h | 19 +++++++++++++++++--
> ui/vnc.c | 6 +++---
> 2 files changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/osdep.h b/osdep.h
> index 27eedcf..8c45000 100644
> --- a/osdep.h
> +++ b/osdep.h
> @@ -8,9 +8,7 @@
> #include <sys/signal.h>
> #endif
>
> -#ifndef _WIN32
> #include <sys/time.h>
> -#endif
>
> #ifndef glue
> #define xglue(x, y) x ## y
> @@ -131,4 +129,21 @@ int qemu_madvise(void *addr, size_t len, int advice);
>
> int qemu_create_pidfile(const char *filename);
>
> +#ifdef _WIN32
> +static inline void qemu_timersub(const struct timeval *val1,
> + const struct timeval *val2,
> + struct timeval *res)
> +{
> + res->tv_sec = val1->tv_sec - val2->tv_sec;
> + if (val1->tv_usec - val2->tv_usec < 0) {

shorter: if (val1->tv_usec < val2->tv_usec) {

> + res->tv_sec--;
> + res->tv_usec = val1->tv_usec - val2->tv_usec + 1000 * 1000;
> + } else {
> + res->tv_usec = val1->tv_usec - val2->tv_usec;
> + }
> +}
> +#else
> +#define qemu_timersub timersub
> +#endif
> +
> #endif
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 34dc0cd..1b68965 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -2302,7 +2302,7 @@ static int vnc_update_stats(VncDisplay *vd,
> struct timeval * tv)
> }
> }
>
> - timersub(tv, &VNC_REFRESH_STATS, &res);
> + qemu_timersub(tv, &VNC_REFRESH_STATS, &res);
>
> if (timercmp(&vd->guest.last_freq_check, &res, >)) {
> return has_dirty;
> @@ -2320,7 +2320,7 @@ static int vnc_update_stats(VncDisplay *vd,
> struct timeval * tv)
> }
>
> max = rect->times[(rect->idx + count - 1) % count];
> - timersub(tv, &max, &res);
> + qemu_timersub(tv, &max, &res);
>
> if (timercmp(&res, &VNC_REFRESH_LOSSY, >)) {
> rect->freq = 0;
> @@ -2331,7 +2331,7 @@ static int vnc_update_stats(VncDisplay *vd,
> struct timeval * tv)
>
> min = rect->times[rect->idx];
> max = rect->times[(rect->idx + count - 1) % count];
> - timersub(&max, &min, &res);
> + qemu_timersub(&max, &min, &res);
>
> rect->freq = res.tv_sec + res.tv_usec / 1000000.;
> rect->freq /= count;

Acked-by: Stefan Weil <weil@mail.berlios.de>
Blue Swirl - March 15, 2011, 8:52 p.m.
On Sun, Mar 13, 2011 at 7:00 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Am 13.03.2011 15:49, schrieb Blue Swirl:
>>
>> Implement and wrap timersub() for Win32.
>>
>> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
>> ---
>> osdep.h | 19 +++++++++++++++++--
>> ui/vnc.c | 6 +++---
>> 2 files changed, 20 insertions(+), 5 deletions(-)
>>
>> diff --git a/osdep.h b/osdep.h
>> index 27eedcf..8c45000 100644
>> --- a/osdep.h
>> +++ b/osdep.h
>> @@ -8,9 +8,7 @@
>> #include <sys/signal.h>
>> #endif
>>
>> -#ifndef _WIN32
>> #include <sys/time.h>
>> -#endif
>>
>> #ifndef glue
>> #define xglue(x, y) x ## y
>> @@ -131,4 +129,21 @@ int qemu_madvise(void *addr, size_t len, int advice);
>>
>> int qemu_create_pidfile(const char *filename);
>>
>> +#ifdef _WIN32
>> +static inline void qemu_timersub(const struct timeval *val1,
>> + const struct timeval *val2,
>> + struct timeval *res)
>> +{
>> + res->tv_sec = val1->tv_sec - val2->tv_sec;
>> + if (val1->tv_usec - val2->tv_usec < 0) {
>
> shorter: if (val1->tv_usec < val2->tv_usec) {
>
>> + res->tv_sec--;
>> + res->tv_usec = val1->tv_usec - val2->tv_usec + 1000 * 1000;
>> + } else {
>> + res->tv_usec = val1->tv_usec - val2->tv_usec;
>> + }
>> +}
>> +#else
>> +#define qemu_timersub timersub
>> +#endif
>> +
>> #endif
>> diff --git a/ui/vnc.c b/ui/vnc.c
>> index 34dc0cd..1b68965 100644
>> --- a/ui/vnc.c
>> +++ b/ui/vnc.c
>> @@ -2302,7 +2302,7 @@ static int vnc_update_stats(VncDisplay *vd,
>> struct timeval * tv)
>> }
>> }
>>
>> - timersub(tv, &VNC_REFRESH_STATS, &res);
>> + qemu_timersub(tv, &VNC_REFRESH_STATS, &res);
>>
>> if (timercmp(&vd->guest.last_freq_check, &res, >)) {
>> return has_dirty;
>> @@ -2320,7 +2320,7 @@ static int vnc_update_stats(VncDisplay *vd,
>> struct timeval * tv)
>> }
>>
>> max = rect->times[(rect->idx + count - 1) % count];
>> - timersub(tv, &max, &res);
>> + qemu_timersub(tv, &max, &res);
>>
>> if (timercmp(&res, &VNC_REFRESH_LOSSY, >)) {
>> rect->freq = 0;
>> @@ -2331,7 +2331,7 @@ static int vnc_update_stats(VncDisplay *vd,
>> struct timeval * tv)
>>
>> min = rect->times[rect->idx];
>> max = rect->times[(rect->idx + count - 1) % count];
>> - timersub(&max, &min, &res);
>> + qemu_timersub(&max, &min, &res);
>>
>> rect->freq = res.tv_sec + res.tv_usec / 1000000.;
>> rect->freq /= count;
>
> Acked-by: Stefan Weil <weil@mail.berlios.de>

Thanks for the ack, applied.

Patch

From cff2dbcf5ae3fc259b78dfa2d77737ec38c6de42 Mon Sep 17 00:00:00 2001
Message-Id: <cff2dbcf5ae3fc259b78dfa2d77737ec38c6de42.1300027705.git.blauwirbel@gmail.com>
From: Blue Swirl <blauwirbel@gmail.com>
Date: Sun, 13 Mar 2011 10:30:52 +0000
Subject: [PATCH] win32: implement missing timersub

Implement and wrap timersub() for Win32.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 osdep.h  |   19 +++++++++++++++++--
 ui/vnc.c |    6 +++---
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/osdep.h b/osdep.h
index 27eedcf..8c45000 100644
--- a/osdep.h
+++ b/osdep.h
@@ -8,9 +8,7 @@ 
 #include <sys/signal.h>
 #endif
 
-#ifndef _WIN32
 #include <sys/time.h>
-#endif
 
 #ifndef glue
 #define xglue(x, y) x ## y
@@ -131,4 +129,21 @@  int qemu_madvise(void *addr, size_t len, int advice);
 
 int qemu_create_pidfile(const char *filename);
 
+#ifdef _WIN32
+static inline void qemu_timersub(const struct timeval *val1,
+                                 const struct timeval *val2,
+                                 struct timeval *res)
+{
+    res->tv_sec = val1->tv_sec - val2->tv_sec;
+    if (val1->tv_usec - val2->tv_usec < 0) {
+        res->tv_sec--;
+        res->tv_usec = val1->tv_usec - val2->tv_usec + 1000 * 1000;
+    } else {
+        res->tv_usec = val1->tv_usec - val2->tv_usec;
+    }
+}
+#else
+#define qemu_timersub timersub
+#endif
+
 #endif
diff --git a/ui/vnc.c b/ui/vnc.c
index 34dc0cd..1b68965 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -2302,7 +2302,7 @@  static int vnc_update_stats(VncDisplay *vd,  struct timeval * tv)
         }
     }
 
-    timersub(tv, &VNC_REFRESH_STATS, &res);
+    qemu_timersub(tv, &VNC_REFRESH_STATS, &res);
 
     if (timercmp(&vd->guest.last_freq_check, &res, >)) {
         return has_dirty;
@@ -2320,7 +2320,7 @@  static int vnc_update_stats(VncDisplay *vd,  struct timeval * tv)
             }
 
             max = rect->times[(rect->idx + count - 1) % count];
-            timersub(tv, &max, &res);
+            qemu_timersub(tv, &max, &res);
 
             if (timercmp(&res, &VNC_REFRESH_LOSSY, >)) {
                 rect->freq = 0;
@@ -2331,7 +2331,7 @@  static int vnc_update_stats(VncDisplay *vd,  struct timeval * tv)
 
             min = rect->times[rect->idx];
             max = rect->times[(rect->idx + count - 1) % count];
-            timersub(&max, &min, &res);
+            qemu_timersub(&max, &min, &res);
 
             rect->freq = res.tv_sec + res.tv_usec / 1000000.;
             rect->freq /= count;
-- 
1.7.2.3