PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
win32getrusage.c File Reference
#include "c.h"
#include <sys/resource.h>
Include dependency graph for win32getrusage.c:

Go to the source code of this file.

Functions

int getrusage (int who, struct rusage *rusage)
 

Function Documentation

◆ getrusage()

int getrusage ( int  who,
struct rusage rusage 
)

Definition at line 21 of file win32getrusage.c.

22{
23 FILETIME starttime;
24 FILETIME exittime;
25 FILETIME kerneltime;
26 FILETIME usertime;
27 ULARGE_INTEGER li;
28
29 if (who != RUSAGE_SELF)
30 {
31 /* Only RUSAGE_SELF is supported in this implementation for now */
32 errno = EINVAL;
33 return -1;
34 }
35
36 if (rusage == (struct rusage *) NULL)
37 {
38 errno = EFAULT;
39 return -1;
40 }
41 memset(rusage, 0, sizeof(struct rusage));
42 if (GetProcessTimes(GetCurrentProcess(),
43 &starttime, &exittime, &kerneltime, &usertime) == 0)
44 {
45 _dosmaperr(GetLastError());
46 return -1;
47 }
48
49 /* Convert FILETIMEs (0.1 us) to struct timeval */
50 memcpy(&li, &kerneltime, sizeof(FILETIME));
51 li.QuadPart /= 10L; /* Convert to microseconds */
52 rusage->ru_stime.tv_sec = li.QuadPart / 1000000L;
53 rusage->ru_stime.tv_usec = li.QuadPart % 1000000L;
54
55 memcpy(&li, &usertime, sizeof(FILETIME));
56 li.QuadPart /= 10L; /* Convert to microseconds */
57 rusage->ru_utime.tv_sec = li.QuadPart / 1000000L;
58 rusage->ru_utime.tv_usec = li.QuadPart % 1000000L;
59
60 return 0;
61}
#define RUSAGE_SELF
Definition: resource.h:9
struct timeval ru_utime
Definition: resource.h:14
struct timeval ru_stime
Definition: resource.h:15
void _dosmaperr(unsigned long)
Definition: win32error.c:177

References _dosmaperr(), rusage::ru_stime, rusage::ru_utime, and RUSAGE_SELF.

Referenced by pg_rusage_init(), ResetUsage(), and ShowUsage().