process: fixes
[apps/native/ttsd-worker-task.git] / src / process.c
1 #include <string.h>
2 #include <stdlib.h>
3
4 #include "process.h"
5 #include "err-check.h"
6 #include "procfs.h"
7 #include "appinfo-provider.h"
8
9 int process_get_memory_usage(struct process *proc, int *usage)
10 {
11         ON_NULL_RETURN_VAL(proc, -1);
12         ON_NULL_RETURN_VAL(usage, -1);
13
14         *usage = proc->memory_used;
15         return 0;
16 }
17
18 int process_get_cpu_usage(struct process *proc, unsigned long long *usage)
19 {
20         ON_NULL_RETURN_VAL(proc, -1);
21         ON_NULL_RETURN_VAL(usage, -1);
22
23         *usage = proc->frame_ticks_used;
24         return 0;
25 }
26
27 int process_update(struct process *proc)
28 {
29         struct procfs_process_stat info;
30         unsigned long long ticks;
31
32         if (procfs_read_process_stat(proc->pid, &info) != 0) {
33                 return -1;
34         }
35         ticks = info.stime + info.utime;
36         proc->frame_ticks_used = ticks - proc->total_ticks_used;
37         proc->total_ticks_used = ticks;
38         proc->memory_used = info.rss * stats_get_page_size() / 1024;
39
40         return 0;
41 }
42
43 void process_init(int pid, struct process *proc)
44 {
45         memset(proc, 0x0, sizeof(struct process));
46         proc->pid = pid;
47 }
48
49 int process_get_pid(const struct process *proc)
50 {
51         ON_NULL_RETURN_VAL(proc, -1);
52         return proc->pid;
53 }
54
55 const char *process_get_appid(struct process *proc)
56 {
57         ON_NULL_RETURN_VAL(proc, NULL);
58
59         if (!proc->appid) {
60                 proc->appid = app_info_provider_find_app_id(proc->pid);
61         }
62         return proc->appid;
63 }
64
65 const char *process_get_exe(struct process *proc)
66 {
67         ON_NULL_RETURN_VAL(proc, NULL);
68
69         if (!proc->exe) {
70                 if (procfs_read_process_exe(proc->pid, &proc->exe) != 0)
71                         return NULL;
72         }
73         return proc->exe;
74 }
75
76 void process_shutdown(struct process *proc)
77 {
78         if (!proc) return;
79         if (proc->appid) free(proc->appid);
80         if (proc->exe) free(proc->exe);
81 }
82
83 void process_move(struct process *dst, struct process *src)
84 {
85         process_shutdown(dst);
86         memcpy(dst, src, sizeof(struct process));
87         src->appid = NULL;
88         src->exe = NULL;
89 }