47e8035baa42287968004e13956019e6656c7586
Stefan Schuermans add copyright headers and l...

Stefan Schuermans authored 4 years ago

1) /**
2)  * UProcTrace: User-space Process Tracing
3)  * Copyright 2020: Stefan Schuermans, Aachen, Germany <stefan@schuermans.info>
4)  * Copyleft: GNU LESSER GENERAL PUBLIC LICENSE version 3 (see LICENSE)
5)  */
6) 
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

7) #include "cleaner.h"
8) #include "event.h"
9) #include "timing.h"
Stefan Schuermans formatting

Stefan Schuermans authored 4 years ago

10) #include <uptev/proc_end.h>
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

11) 
12) #include <uproctrace.pb-c.h>
13) 
14) #include <stdlib.h>
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

15) #include <sys/resource.h>
16) #include <sys/time.h>
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

17) #include <sys/types.h>
18) #include <unistd.h>
19) 
20) int uptev_proc_end(void **data, size_t *size) {
21)   *data = NULL;
22)   *size = 0;
23) 
24)   uptev_cleaner_t *cleaner = uptev_cleaner_new();
Stefan Schuermans formatting

Stefan Schuermans authored 4 years ago

25)   if (!cleaner) {
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

26)     return -1;
27)   }
28) 
29)   struct _Uproctrace__Timespec timestamp = UPROCTRACE__TIMESPEC__INIT;
30)   uptev_timing_get_timestamp(&timestamp);
31) 
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

32)   struct _Uproctrace__Timespec cpu_time = UPROCTRACE__TIMESPEC__INIT;
33)   uptev_timing_get_proc_cpu_time(&cpu_time);
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

34) 
35)   struct _Uproctrace__ProcEnd proc_end = UPROCTRACE__PROC_END__INIT;
36)   proc_end.pid = getpid();
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

37)   proc_end.cpu_time = &cpu_time;
38) 
39)   struct rusage usage;
40)   struct _Uproctrace__Timespec user_time = UPROCTRACE__TIMESPEC__INIT;
41)   struct _Uproctrace__Timespec sys_time = UPROCTRACE__TIMESPEC__INIT;
42)   if (getrusage(RUSAGE_SELF, &usage) == 0) {
43)     uptev_timing_timeval_to_pb(&usage.ru_utime, &user_time);
44)     proc_end.user_time = &user_time;
45)     uptev_timing_timeval_to_pb(&usage.ru_stime, &sys_time);
46)     proc_end.sys_time = &sys_time;
47)     proc_end.has_max_rss_kb = 1;
48)     proc_end.max_rss_kb = usage.ru_maxrss;
Stefan Schuermans add more fields from getrus...

Stefan Schuermans authored 4 years ago

49)     proc_end.has_min_flt = 1;
50)     proc_end.min_flt = usage.ru_minflt;
51)     proc_end.has_maj_flt = 1;
52)     proc_end.maj_flt = usage.ru_majflt;
53)     proc_end.has_in_block = 1;
54)     proc_end.in_block = usage.ru_inblock;
55)     proc_end.has_ou_block = 1;
56)     proc_end.ou_block = usage.ru_oublock;
57)     proc_end.has_n_v_csw = 1;
58)     proc_end.n_v_csw = usage.ru_nvcsw;
59)     proc_end.has_n_iv_csw = 1;
60)     proc_end.n_iv_csw = usage.ru_nivcsw;
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

61)   }