blob: 086144dd7713cb3c2d642144690e44e43e51df11 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
/*
* times() - POSIX 1003.1b 4.5.2 - Get Process Times
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems.h>
#include <sys/times.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
#include <assert.h>
#ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS
#include <rtems/score/timespec.h>
#endif
clock_t _times(
struct tms *ptms
)
{
rtems_interval ticks;
if ( !ptms ) {
errno = EFAULT;
return -1;
}
/*
* This call does not depend on TOD being initialized and can't fail.
*/
(void) rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &ticks );
/*
* RTEMS technically has no notion of system versus user time
* since there is no separation of OS from application tasks.
* But we can at least make a distinction between the number
* of ticks since boot and the number of ticks executed by this
* this thread.
*/
#ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS
{
struct timespec per_tick;
uint32_t ticks;
uint32_t fractional_ticks;
per_tick.tv_sec =
_TOD_Microseconds_per_tick / TOD_MILLISECONDS_PER_SECOND;
per_tick.tv_nsec =
(_TOD_Microseconds_per_tick % TOD_MILLISECONDS_PER_SECOND) / 1000;
_Timespec_Divide(
&_Thread_Executing->cpu_time_used,
&per_tick,
&ticks,
&fractional_ticks
);
ptms->tms_utime = ticks;
}
#else
ptms->tms_utime = _Thread_Executing->cpu_time_used;
#endif
ptms->tms_stime = ticks;
ptms->tms_cutime = 0;
ptms->tms_cstime = 0;
return ticks;
}
/*
* times()
*
* times() system call wrapper for _times() above.
*/
clock_t times(
struct tms *ptms
)
{
return _times( ptms );
}
/*
* _times_r
*
* This is the Newlib dependent reentrant version of times().
*/
#if defined(RTEMS_NEWLIB)
#include <reent.h>
clock_t _times_r(
struct _reent *ptr,
struct tms *ptms
)
{
return _times( ptms );
}
#endif
|