3737/** don't call into system billions of times for no reason */ 
3838struct  Mono_Time  {
3939    uint64_t  cur_time ;
40-      uint64_t   base_time ; 
40+ 
4141#ifdef  OS_WIN32 
4242    /* protect `last_clock_update` and `last_clock_mono` from concurrent access */ 
4343    pthread_mutex_t  last_clock_lock ;
@@ -65,6 +65,7 @@ static uint64_t current_time_monotonic_default(void *user_data)
6565    /* GetTickCount provides only a 32 bit counter, but we can't use 
6666     * GetTickCount64 for backwards compatibility, so we handle wraparound 
6767     * ourselves. 
68+      * TODO(Green-Sky): switch to QPC, since GTC only advertises a precision of "typically" 10-16ms 
6869     */ 
6970    const  uint32_t  ticks  =  GetTickCount ();
7071
@@ -88,7 +89,7 @@ static uint64_t current_time_monotonic_default(void *user_data)
8889#else  // !OS_WIN32 
8990static  uint64_t  timespec_to_u64 (struct  timespec  clock_mono )
9091{
91-     return  1000ULL  *  clock_mono .tv_sec  +  (clock_mono .tv_nsec  / 1000000ULL );
92+     return  UINT64_C ( 1000 )  *  clock_mono .tv_sec  +  (clock_mono .tv_nsec  / UINT64_C ( 1000000 ) );
9293}
9394#ifdef  __APPLE__ 
9495non_null ()
@@ -149,7 +150,6 @@ Mono_Time *mono_time_new(const Memory *mem, mono_time_current_time_cb *current_t
149150    mono_time_set_current_time_callback (mono_time , current_time_callback , user_data );
150151
151152#ifdef  OS_WIN32 
152- 
153153    mono_time -> last_clock_mono  =  0 ;
154154    mono_time -> last_clock_update  =  false;
155155
@@ -158,18 +158,10 @@ Mono_Time *mono_time_new(const Memory *mem, mono_time_current_time_cb *current_t
158158        mem_delete (mem , mono_time );
159159        return  nullptr ;
160160    }
161- 
162161#endif 
163162
164-     mono_time -> cur_time  =  0 ;
165- #ifdef  FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION 
166163    // Maximum reproducibility. Never return time = 0. 
167-     mono_time -> base_time  =  1 ;
168- #else 
169-     // Never return time = 0 in case time() returns 0 (e.g. on microcontrollers 
170-     // without battery-powered RTC or ones where NTP didn't initialise it yet). 
171-     mono_time -> base_time  =  max_u64 (1 , (uint64_t )time (nullptr )) *  1000ULL  -  current_time_monotonic (mono_time );
172- #endif 
164+     mono_time -> cur_time  =  1 ;
173165
174166    mono_time_update (mono_time );
175167
@@ -198,8 +190,7 @@ void mono_time_update(Mono_Time *mono_time)
198190    pthread_mutex_lock (& mono_time -> last_clock_lock );
199191    mono_time -> last_clock_update  =  true;
200192#endif 
201-     const  uint64_t  cur_time  = 
202-         mono_time -> base_time  +  mono_time -> current_time_callback (mono_time -> user_data );
193+     const  uint64_t  cur_time  =  mono_time -> current_time_callback (mono_time -> user_data );
203194#ifdef  OS_WIN32 
204195    pthread_mutex_unlock (& mono_time -> last_clock_lock );
205196#endif 
@@ -228,7 +219,7 @@ uint64_t mono_time_get_ms(const Mono_Time *mono_time)
228219
229220uint64_t  mono_time_get (const  Mono_Time  * mono_time )
230221{
231-     return  mono_time_get_ms (mono_time ) / 1000ULL ;
222+     return  mono_time_get_ms (mono_time ) / UINT64_C ( 1000 ) ;
232223}
233224
234225bool  mono_time_is_timeout (const  Mono_Time  * mono_time , uint64_t  timestamp , uint64_t  timeout )
@@ -248,11 +239,6 @@ void mono_time_set_current_time_callback(Mono_Time *mono_time,
248239    }
249240}
250241
251- /** @brief Return current monotonic time in milliseconds (ms). 
252-  * 
253-  * The starting point is unspecified and in particular is likely not comparable 
254-  * to the return value of `mono_time_get_ms()`. 
255-  */ 
256242uint64_t  current_time_monotonic (Mono_Time  * mono_time )
257243{
258244    /* For WIN32 we don't want to change overflow state of mono_time here */ 
0 commit comments