MCPcopy Create free account
hub / github.com/F-Stack/f-stack / kern_clock_gettime

Function kern_clock_gettime

freebsd/kern/kern_time.c:315–375  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

313}
314
315int
316kern_clock_gettime(struct thread *td, clockid_t clock_id, struct timespec *ats)
317{
318 struct timeval sys, user;
319 struct proc *p;
320
321 p = td->td_proc;
322 switch (clock_id) {
323 case CLOCK_REALTIME: /* Default to precise. */
324 case CLOCK_REALTIME_PRECISE:
325 nanotime(ats);
326 break;
327 case CLOCK_REALTIME_FAST:
328 getnanotime(ats);
329 break;
330 case CLOCK_VIRTUAL:
331 PROC_LOCK(p);
332 PROC_STATLOCK(p);
333 calcru(p, &user, &sys);
334 PROC_STATUNLOCK(p);
335 PROC_UNLOCK(p);
336 TIMEVAL_TO_TIMESPEC(&user, ats);
337 break;
338 case CLOCK_PROF:
339 PROC_LOCK(p);
340 PROC_STATLOCK(p);
341 calcru(p, &user, &sys);
342 PROC_STATUNLOCK(p);
343 PROC_UNLOCK(p);
344 timevaladd(&user, &sys);
345 TIMEVAL_TO_TIMESPEC(&user, ats);
346 break;
347 case CLOCK_MONOTONIC: /* Default to precise. */
348 case CLOCK_MONOTONIC_PRECISE:
349 case CLOCK_UPTIME:
350 case CLOCK_UPTIME_PRECISE:
351 nanouptime(ats);
352 break;
353 case CLOCK_UPTIME_FAST:
354 case CLOCK_MONOTONIC_FAST:
355 getnanouptime(ats);
356 break;
357 case CLOCK_SECOND:
358 ats->tv_sec = time_second;
359 ats->tv_nsec = 0;
360 break;
361 case CLOCK_THREAD_CPUTIME_ID:
362 kern_thread_cputime(NULL, ats);
363 break;
364 case CLOCK_PROCESS_CPUTIME_ID:
365 PROC_LOCK(p);
366 kern_process_cputime(p, ats);
367 PROC_UNLOCK(p);
368 break;
369 default:
370 if ((int)clock_id >= 0)
371 return (EINVAL);
372 return (get_cputime(td, clock_id, ats));

Callers 3

abs_timeout_updateFunction · 0.85
sys_clock_gettimeFunction · 0.85
kern_clock_nanosleepFunction · 0.85

Calls 9

nanotimeFunction · 0.85
getnanotimeFunction · 0.85
calcruFunction · 0.85
nanouptimeFunction · 0.85
getnanouptimeFunction · 0.85
kern_thread_cputimeFunction · 0.85
kern_process_cputimeFunction · 0.85
get_cputimeFunction · 0.85
timevaladdFunction · 0.70

Tested by

no test coverage detected