OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 | |
12 #ifndef VPX_MEM_INCLUDE_VPX_MEM_TRACKER_H_ | |
13 #define VPX_MEM_INCLUDE_VPX_MEM_TRACKER_H_ | |
14 | |
15 /* vpx_mem_tracker version info */ | |
16 #define vpx_mem_tracker_version "2.5.1.1" | |
17 | |
18 #define VPX_MEM_TRACKER_VERSION_CHIEF 2 | |
19 #define VPX_MEM_TRACKER_VERSION_MAJOR 5 | |
20 #define VPX_MEM_TRACKER_VERSION_MINOR 1 | |
21 #define VPX_MEM_TRACKER_VERSION_PATCH 1 | |
22 /* END - vpx_mem_tracker version info */ | |
23 | |
24 #include <stdarg.h> | |
25 | |
26 struct mem_block { | |
27 size_t addr; | |
28 unsigned int size, | |
29 line; | |
30 char *file; | |
31 struct mem_block *prev, | |
32 * next; | |
33 | |
34 int padded; // This mem_block has padding for integrity checks. | |
35 // As of right now, this should only be 0 if | |
36 // using vpx_mem_alloc to allocate cache memory. | |
37 // 2005-01-11 tjf | |
38 }; | |
39 | |
40 #if defined(__cplusplus) | |
41 extern "C" { | |
42 #endif | |
43 | |
44 /* | |
45 vpx_memory_tracker_init(int padding_size, int pad_value) | |
46 padding_size - the size of the padding before and after each mem addr. | |
47 Values > 0 indicate that integrity checks can be performe
d | |
48 by inspecting these areas. | |
49 pad_value - the initial value within the padding area before and after | |
50 each mem addr. | |
51 | |
52 Initializes the memory tracker interface. Should be called before any | |
53 other calls to the memory tracker. | |
54 */ | |
55 int vpx_memory_tracker_init(int padding_size, int pad_value); | |
56 | |
57 /* | |
58 vpx_memory_tracker_destroy() | |
59 Deinitializes the memory tracker interface | |
60 */ | |
61 void vpx_memory_tracker_destroy(); | |
62 | |
63 /* | |
64 vpx_memory_tracker_add(size_t addr, unsigned int size, | |
65 char * file, unsigned int line) | |
66 addr - memory address to be added to list | |
67 size - size of addr | |
68 file - the file addr was referenced from | |
69 line - the line in file addr was referenced from | |
70 Adds memory address addr, it's size, file and line it came from | |
71 to the memory tracker allocation table | |
72 */ | |
73 void vpx_memory_tracker_add(size_t addr, unsigned int size, | |
74 char *file, unsigned int line, | |
75 int padded); | |
76 | |
77 /* | |
78 vpx_memory_tracker_add(size_t addr, unsigned int size, char * file, unsign
ed int line) | |
79 addr - memory address to be added to be removed | |
80 padded - if 0, disables bounds checking on this memory block even if bou
nds | |
81 checking is enabled. (for example, when allocating cache memory, we stil
l want | |
82 to check for memory leaks, but we do not waste cache space for bounds ch
eck padding) | |
83 Removes the specified address from the memory tracker's allocation | |
84 table | |
85 Return: | |
86 0: on success | |
87 -1: if memory allocation table's mutex could not be locked | |
88 -2: if the addr was not found in the list | |
89 */ | |
90 int vpx_memory_tracker_remove(size_t addr); | |
91 | |
92 /* | |
93 vpx_memory_tracker_find(unsigned int addr) | |
94 addr - address to be found in the memory tracker's | |
95 allocation table | |
96 Return: | |
97 If found, pointer to the memory block that matches addr | |
98 NULL otherwise | |
99 */ | |
100 struct mem_block *vpx_memory_tracker_find(size_t addr); | |
101 | |
102 /* | |
103 vpx_memory_tracker_dump() | |
104 Dumps the current contents of the memory | |
105 tracker allocation table | |
106 */ | |
107 void vpx_memory_tracker_dump(); | |
108 | |
109 /* | |
110 vpx_memory_tracker_check_integrity() | |
111 If a padding_size was provided to vpx_memory_tracker_init() | |
112 This function will verify that the region before and after each | |
113 memory address contains the specified pad_value. Should the check | |
114 fail, the filename and line of the check will be printed out. | |
115 */ | |
116 void vpx_memory_tracker_check_integrity(char *file, unsigned int line); | |
117 | |
118 /* | |
119 vpx_memory_tracker_set_log_type | |
120 type - value representing the logging type to use | |
121 option - type specific option. This will be interpreted differently | |
122 based on the type. | |
123 Sets the logging type for the memory tracker. | |
124 Values currently supported: | |
125 0: if option is NULL, log to stderr, otherwise interpret option as a | |
126 filename and attempt to open it. | |
127 1: Use output_debug_string (WIN32 only), option ignored | |
128 Return: | |
129 0: on success | |
130 -1: if the logging type could not be set, because the value was invalid | |
131 or because a file could not be opened | |
132 */ | |
133 int vpx_memory_tracker_set_log_type(int type, char *option); | |
134 | |
135 /* | |
136 vpx_memory_tracker_set_log_func | |
137 userdata - ptr to be passed to the supplied logfunc, can be NULL | |
138 logfunc - the logging function to be used to output data from | |
139 vpx_memory_track_dump/check_integrity | |
140 Sets a logging function to be used by the memory tracker. | |
141 Return: | |
142 0: on success | |
143 -1: if the logging type could not be set because logfunc was NULL | |
144 */ | |
145 int vpx_memory_tracker_set_log_func(void *userdata, | |
146 void(*logfunc)(void *userdata, | |
147 const char *fmt, va_list ar
gs)); | |
148 | |
149 /* Wrappers to standard library functions. */ | |
150 typedef void *(* mem_track_malloc_func)(size_t); | |
151 typedef void *(* mem_track_calloc_func)(size_t, size_t); | |
152 typedef void *(* mem_track_realloc_func)(void *, size_t); | |
153 typedef void (* mem_track_free_func)(void *); | |
154 typedef void *(* mem_track_memcpy_func)(void *, const void *, size_t); | |
155 typedef void *(* mem_track_memset_func)(void *, int, size_t); | |
156 typedef void *(* mem_track_memmove_func)(void *, const void *, size_t); | |
157 | |
158 /* | |
159 vpx_memory_tracker_set_functions | |
160 | |
161 Sets the function pointers for the standard library functions. | |
162 | |
163 Return: | |
164 0: on success | |
165 -1: if the use global function pointers is not set. | |
166 */ | |
167 int vpx_memory_tracker_set_functions(mem_track_malloc_func g_malloc_l | |
168 , mem_track_calloc_func g_calloc_l | |
169 , mem_track_realloc_func g_realloc_l | |
170 , mem_track_free_func g_free_l | |
171 , mem_track_memcpy_func g_memcpy_l | |
172 , mem_track_memset_func g_memset_l | |
173 , mem_track_memmove_func g_memmove_l); | |
174 | |
175 #if defined(__cplusplus) | |
176 } | |
177 #endif | |
178 | |
179 #endif // VPX_MEM_INCLUDE_VPX_MEM_TRACKER_H_ | |
OLD | NEW |