/* * Copyright (c) 2010 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef __VPX_MEM_TRACKER_H__ #define __VPX_MEM_TRACKER_H__ /* vpx_mem_tracker version info */ #define vpx_mem_tracker_version "2.5.1.1" #define VPX_MEM_TRACKER_VERSION_CHIEF 2 #define VPX_MEM_TRACKER_VERSION_MAJOR 5 #define VPX_MEM_TRACKER_VERSION_MINOR 1 #define VPX_MEM_TRACKER_VERSION_PATCH 1 /* END - vpx_mem_tracker version info */ #include struct mem_block { size_t addr; unsigned int size, line; char *file; struct mem_block *prev, * next; int padded; // This mem_block has padding for integrity checks. // As of right now, this should only be 0 if // using vpx_mem_alloc to allocate cache memory. // 2005-01-11 tjf }; #if defined(__cplusplus) extern "C" { #endif /* vpx_memory_tracker_init(int padding_size, int pad_value) padding_size - the size of the padding before and after each mem addr. Values > 0 indicate that integrity checks can be performed by inspecting these areas. pad_value - the initial value within the padding area before and after each mem addr. Initializes the memory tracker interface. Should be called before any other calls to the memory tracker. */ int vpx_memory_tracker_init(int padding_size, int pad_value); /* vpx_memory_tracker_destroy() Deinitializes the memory tracker interface */ void vpx_memory_tracker_destroy(); /* vpx_memory_tracker_add(size_t addr, unsigned int size, char * file, unsigned int line) addr - memory address to be added to list size - size of addr file - the file addr was referenced from line - the line in file addr was referenced from Adds memory address addr, it's size, file and line it came from to the memory tracker allocation table */ void vpx_memory_tracker_add(size_t addr, unsigned int size, char *file, unsigned int line, int padded); /* vpx_memory_tracker_add(size_t addr, unsigned int size, char * file, unsigned int line) addr - memory address to be added to be removed padded - if 0, disables bounds checking on this memory block even if bounds checking is enabled. (for example, when allocating cache memory, we still want to check for memory leaks, but we do not waste cache space for bounds check padding) Removes the specified address from the memory tracker's allocation table Return: 0: on success -1: if memory allocation table's mutex could not be locked -2: if the addr was not found in the list */ int vpx_memory_tracker_remove(size_t addr); /* vpx_memory_tracker_find(unsigned int addr) addr - address to be found in the memory tracker's allocation table Return: If found, pointer to the memory block that matches addr NULL otherwise */ struct mem_block *vpx_memory_tracker_find(size_t addr); /* vpx_memory_tracker_dump() Dumps the current contents of the memory tracker allocation table */ void vpx_memory_tracker_dump(); /* vpx_memory_tracker_check_integrity() If a padding_size was provided to vpx_memory_tracker_init() This function will verify that the region before and after each memory address contains the specified pad_value. Should the check fail, the filename and line of the check will be printed out. */ void vpx_memory_tracker_check_integrity(char *file, unsigned int line); /* vpx_memory_tracker_set_log_type type - value representing the logging type to use option - type specific option. This will be interpreted differently based on the type. Sets the logging type for the memory tracker. Values currently supported: 0: if option is NULL, log to stderr, otherwise interpret option as a filename and attempt to open it. 1: Use output_debug_string (WIN32 only), option ignored Return: 0: on success -1: if the logging type could not be set, because the value was invalid or because a file could not be opened */ int vpx_memory_tracker_set_log_type(int type, char *option); /* vpx_memory_tracker_set_log_func userdata - ptr to be passed to the supplied logfunc, can be NULL logfunc - the logging function to be used to output data from vpx_memory_track_dump/check_integrity Sets a logging function to be used by the memory tracker. Return: 0: on success -1: if the logging type could not be set because logfunc was NULL */ int vpx_memory_tracker_set_log_func(void *userdata, void(*logfunc)(void *userdata, const char *fmt, va_list args)); /* Wrappers to standard library functions. */ typedef void *(* mem_track_malloc_func)(size_t); typedef void *(* mem_track_calloc_func)(size_t, size_t); typedef void *(* mem_track_realloc_func)(void *, size_t); typedef void (* mem_track_free_func)(void *); typedef void *(* mem_track_memcpy_func)(void *, const void *, size_t); typedef void *(* mem_track_memset_func)(void *, int, size_t); typedef void *(* mem_track_memmove_func)(void *, const void *, size_t); /* vpx_memory_tracker_set_functions Sets the function pointers for the standard library functions. Return: 0: on success -1: if the use global function pointers is not set. */ int vpx_memory_tracker_set_functions(mem_track_malloc_func g_malloc_l , mem_track_calloc_func g_calloc_l , mem_track_realloc_func g_realloc_l , mem_track_free_func g_free_l , mem_track_memcpy_func g_memcpy_l , mem_track_memset_func g_memset_l , mem_track_memmove_func g_memmove_l); #if defined(__cplusplus) } #endif #endif // __VPX_MEM_TRACKER_H__