]> git.llucax.com Git - software/libev.git/commitdiff
optimise ev_now when \!MULTIPLICITY
authorroot <root>
Sat, 10 Nov 2007 03:13:50 +0000 (03:13 +0000)
committerroot <root>
Sat, 10 Nov 2007 03:13:50 +0000 (03:13 +0000)
ev.c
ev.h
ev_vars.h
ev_wrap.h

diff --git a/ev.c b/ev.c
index 14046a2b3b1206a3460f824d14fd7c67880e5373..77e80116e686916993395f271ea9015cc735c523 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -273,11 +273,13 @@ get_clock (void)
   return ev_time ();
 }
 
+#if EV_MULTIPLICITY
 ev_tstamp
 ev_now (EV_P)
 {
-  return rt_now;
+  return ev_rt_now;
 }
+#endif
 
 #define array_roundsize(type,n) ((n) | 4 & ~3)
 
@@ -737,10 +739,10 @@ loop_init (EV_P_ int methods)
       }
 #endif
 
-      rt_now    = ev_time ();
+      ev_rt_now = ev_time ();
       mn_now    = get_clock ();
       now_floor = mn_now;
-      rtmn_diff = rt_now - mn_now;
+      rtmn_diff = ev_rt_now - mn_now;
 
       if (methods == EVMETHOD_AUTO)
         if (!enable_secure () && getenv ("LIBEV_METHODS"))
@@ -993,7 +995,7 @@ timers_reify (EV_P)
 static void
 periodics_reify (EV_P)
 {
-  while (periodiccnt && ((WT)periodics [0])->at <= rt_now)
+  while (periodiccnt && ((WT)periodics [0])->at <= ev_rt_now)
     {
       struct ev_periodic *w = periodics [0];
 
@@ -1002,15 +1004,15 @@ periodics_reify (EV_P)
       /* first reschedule or stop timer */
       if (w->reschedule_cb)
         {
-          ev_tstamp at = ((WT)w)->at = w->reschedule_cb (w, rt_now + 0.0001);
+          ev_tstamp at = ((WT)w)->at = w->reschedule_cb (w, ev_rt_now + 0.0001);
 
-          assert (("ev_periodic reschedule callback returned time in the past", ((WT)w)->at > rt_now));
+          assert (("ev_periodic reschedule callback returned time in the past", ((WT)w)->at > ev_rt_now));
           downheap ((WT *)periodics, periodiccnt, 0);
         }
       else if (w->interval)
         {
-          ((WT)w)->at += floor ((rt_now - ((WT)w)->at) / w->interval + 1.) * w->interval;
-          assert (("ev_periodic timeout in the past detected while processing timers, negative interval?", ((WT)w)->at > rt_now));
+          ((WT)w)->at += floor ((ev_rt_now - ((WT)w)->at) / w->interval + 1.) * w->interval;
+          assert (("ev_periodic timeout in the past detected while processing timers, negative interval?", ((WT)w)->at > ev_rt_now));
           downheap ((WT *)periodics, periodiccnt, 0);
         }
       else
@@ -1031,9 +1033,9 @@ periodics_reschedule (EV_P)
       struct ev_periodic *w = periodics [i];
 
       if (w->reschedule_cb)
-        ((WT)w)->at = w->reschedule_cb (w, rt_now);
+        ((WT)w)->at = w->reschedule_cb (w, ev_rt_now);
       else if (w->interval)
-        ((WT)w)->at += ceil ((rt_now - ((WT)w)->at) / w->interval) * w->interval;
+        ((WT)w)->at += ceil ((ev_rt_now - ((WT)w)->at) / w->interval) * w->interval;
     }
 
   /* now rebuild the heap */
@@ -1048,13 +1050,13 @@ time_update_monotonic (EV_P)
 
   if (expect_true (mn_now - now_floor < MIN_TIMEJUMP * .5))
     {
-      rt_now = rtmn_diff + mn_now;
+      ev_rt_now = rtmn_diff + mn_now;
       return 0;
     }
   else
     {
       now_floor = mn_now;
-      rt_now = ev_time ();
+      ev_rt_now = ev_time ();
       return 1;
     }
 }
@@ -1073,12 +1075,12 @@ time_update (EV_P)
 
           for (i = 4; --i; ) /* loop a few times, before making important decisions */
             {
-              rtmn_diff = rt_now - mn_now;
+              rtmn_diff = ev_rt_now - mn_now;
 
               if (fabs (odiff - rtmn_diff) < MIN_TIMEJUMP)
                 return; /* all is well */
 
-              rt_now    = ev_time ();
+              ev_rt_now = ev_time ();
               mn_now    = get_clock ();
               now_floor = mn_now;
             }
@@ -1091,18 +1093,18 @@ time_update (EV_P)
   else
 #endif
     {
-      rt_now = ev_time ();
+      ev_rt_now = ev_time ();
 
-      if (expect_false (mn_now > rt_now || mn_now < rt_now - MAX_BLOCKTIME - MIN_TIMEJUMP))
+      if (expect_false (mn_now > ev_rt_now || mn_now < ev_rt_now - MAX_BLOCKTIME - MIN_TIMEJUMP))
         {
           periodics_reschedule (EV_A);
 
           /* adjust timers. this is easy, as the offset is the same for all */
           for (i = 0; i < timercnt; ++i)
-            ((WT)timers [i])->at += rt_now - mn_now;
+            ((WT)timers [i])->at += ev_rt_now - mn_now;
         }
 
-      mn_now = rt_now;
+      mn_now = ev_rt_now;
     }
 }
 
@@ -1152,8 +1154,8 @@ ev_loop (EV_P_ int flags)
       else
 #endif
         {
-          rt_now = ev_time ();
-          mn_now rt_now;
+          ev_rt_now = ev_time ();
+          mn_now    = ev_rt_now;
         }
 
       if (flags & EVLOOP_NONBLOCK || idlecnt)
@@ -1170,7 +1172,7 @@ ev_loop (EV_P_ int flags)
 
           if (periodiccnt)
             {
-              ev_tstamp to = ((WT)periodics [0])->at - rt_now + method_fudge;
+              ev_tstamp to = ((WT)periodics [0])->at - ev_rt_now + method_fudge;
               if (block > to) block = to;
             }
 
@@ -1179,7 +1181,7 @@ ev_loop (EV_P_ int flags)
 
       method_poll (EV_A_ block);
 
-      /* update rt_now, do magic */
+      /* update ev_rt_now, do magic */
       time_update (EV_A);
 
       /* queue pending timers and reschedule them */
@@ -1350,12 +1352,12 @@ ev_periodic_start (EV_P_ struct ev_periodic *w)
     return;
 
   if (w->reschedule_cb)
-    ((WT)w)->at = w->reschedule_cb (w, rt_now);
+    ((WT)w)->at = w->reschedule_cb (w, ev_rt_now);
   else if (w->interval)
     {
       assert (("ev_periodic_start called with negative interval value", w->interval >= 0.));
       /* this formula differs from the one in periodic_reify because we do not always round up */
-      ((WT)w)->at += ceil ((rt_now - ((WT)w)->at) / w->interval) * w->interval;
+      ((WT)w)->at += ceil ((ev_rt_now - ((WT)w)->at) / w->interval) * w->interval;
     }
 
   ev_start (EV_A_ (W)w, ++periodiccnt);
diff --git a/ev.h b/ev.h
index 126de491968253b0cff8c7e80af94896d22fdd7d..589e8ea7132d5b7d7bdaf86cdabbc72b52395406 100644 (file)
--- a/ev.h
+++ b/ev.h
@@ -262,8 +262,20 @@ struct ev_loop *ev_default_loop (int methods); /* returns default loop */
 struct ev_loop *ev_loop_new (int methods);
 void ev_loop_destroy (EV_P);
 void ev_loop_fork (EV_P);
+
+ev_tstamp ev_now (EV_P); /* time w.r.t. timers and the eventloop, updated after each poll */
+
 # else
+
 int ev_default_loop (int methods); /* returns true when successful */
+
+static ev_tstamp
+ev_now ()
+{
+  extern ev_rt_now;
+
+  return ev_rt_now;
+}
 # endif
 
 void ev_default_destroy (void); /* destroy the default loop */
@@ -285,8 +297,6 @@ int ev_method (EV_P);
 void ev_loop (EV_P_ int flags);
 void ev_unloop (EV_P_ int how); /* set to 1 to break out of event loop, set to 2 to break out of all event loops */
 
-ev_tstamp ev_now (EV_P); /* time w.r.t. timers and the eventloop, updated after each poll */
-
 /*
  * ref/unref can be used to add or remove a refcount on the mainloop. every watcher
  * keeps one reference. if you have a long-runing watcher you never unregister that
index c50694497c1f10a0ef78a40ad9b85e07e562b673..e4ece3c34eb0b45d362eeff84615e925558b5ddc 100644 (file)
--- a/ev_vars.h
+++ b/ev_vars.h
@@ -2,7 +2,7 @@
 
 VARx(ev_tstamp, now_floor) /* last time we refreshed rt_time */
 VARx(ev_tstamp, mn_now)    /* monotonic clock "now" */
-VARx(ev_tstamp, rt_now)
+VARx(ev_tstamp, ev_rt_now)
 VARx(ev_tstamp, rtmn_diff)      /* difference realtime - monotonic time */
 VARx(int, method)
 
index b0f55c1d0dbf0edaffb65fe3edc762261e269e3e..d7d08eea3233d53c177519534596b1eae6f4f1a7 100644 (file)
--- a/ev_wrap.h
+++ b/ev_wrap.h
@@ -1,7 +1,7 @@
 /* DO NOT EDIT, automaticlaly generated by update_ev_wrap */
 #define now_floor ((loop)->now_floor)
 #define mn_now ((loop)->mn_now)
-#define rt_now ((loop)->rt_now)
+#define ev_rt_now ((loop)->ev_rt_now)
 #define rtmn_diff ((loop)->rtmn_diff)
 #define method ((loop)->method)
 #define method_fudge ((loop)->method_fudge)