-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstatslog.h
More file actions
136 lines (105 loc) · 3.9 KB
/
statslog.h
File metadata and controls
136 lines (105 loc) · 3.9 KB
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
* Copyright 2018 Google, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _STATSLOG_H_
#define _STATSLOG_H_
#include <assert.h>
#include <inttypes.h>
//#include <statslog_lmkd.h>
#include <stdbool.h>
#include <sys/cdefs.h>
#include <cutils/properties.h>
__BEGIN_DECLS
struct memory_stat {
int64_t pgfault;
int64_t pgmajfault;
int64_t rss_in_bytes;
int64_t cache_in_bytes;
int64_t swap_in_bytes;
int64_t process_start_time_ns;
};
struct kernel_poll_info {
int poll_fd;
void (*handler)(int poll_fd);
};
/*
* These are defined in
* http://cs/android/frameworks/base/cmds/statsd/src/atoms.proto
*/
#define LMK_KILL_OCCURRED 51
#define LMK_STATE_CHANGED 54
#define LMK_STATE_CHANGE_START 1
#define LMK_STATE_CHANGE_STOP 2
#ifdef LMKD_LOG_STATS
/*
* The single event tag id for all stats logs.
* Keep this in sync with system/core/logcat/event.logtags
*/
const static int kStatsEventTag = 1937006964;
void statslog_init();
void statslog_destroy();
#define MEMCG_PROCESS_MEMORY_STAT_PATH "/dev/memcg/apps/uid_%u/pid_%u/memory.stat"
#define PROC_STAT_FILE_PATH "/proc/%d/stat"
#define PROC_STAT_BUFFER_SIZE 1024
#define BYTES_IN_KILOBYTE 1024
/**
* Logs the change in LMKD state which is used as start/stop boundaries for logging
* LMK_KILL_OCCURRED event.
* Code: LMK_STATE_CHANGED = 54
*/
int
stats_write_lmk_state_changed(int32_t code, int32_t state);
/**
* Logs the event when LMKD kills a process to reduce memory pressure.
* Code: LMK_KILL_OCCURRED = 51
*/
int
stats_write_lmk_kill_occurred(int32_t code, int32_t uid,
char const* process_name, int32_t oom_score, int32_t min_oom_score,
int tasksize, struct memory_stat *mem_st);
struct memory_stat *stats_read_memory_stat(bool per_app_memcg, int pid, uid_t uid);
/**
* Registers a process taskname by pid, while it is still alive.
*/
void stats_store_taskname(int pid, const char* taskname, int poll_fd);
/**
* Unregister all process tasknames.
*/
void stats_purge_tasknames();
/**
* Unregister a process taskname, e.g. after it has been killed.
*/
void stats_remove_taskname(int pid, int poll_fd);
bool init_poll_kernel(struct kernel_poll_info *poll_info);
#else /* LMKD_LOG_STATS */
static inline void statslog_init() {}
static inline void statslog_destroy() {}
static inline int
stats_write_lmk_state_changed(int32_t code __unused, int32_t state __unused) { return -EINVAL; }
static inline int
stats_write_lmk_kill_occurred(int32_t code __unused, int32_t uid __unused,
char const* process_name __unused, int32_t oom_score __unused,
int32_t min_oom_score __unused, int tasksize __unused,
struct memory_stat *mem_st __unused) { return -EINVAL; }
static inline struct memory_stat *stats_read_memory_stat(bool per_app_memcg __unused,
int pid __unused, uid_t uid __unused) { return NULL; }
static inline void stats_store_taskname(int pid __unused, const char* taskname __unused,
int poll_fd __unused) {}
static inline void stats_purge_tasknames() {}
static inline void stats_remove_taskname(int pid __unused, int poll_fd __unused) {}
static inline bool init_poll_kernel(struct kernel_poll_info *poll_info __unused) { return false; }
#endif /* LMKD_LOG_STATS */
__END_DECLS
#endif /* _STATSLOG_H_ */