1 /* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. 2 3 This program is free software; you can redistribute it and/or modify 4 it under the terms of the GNU General Public License as published by 5 the Free Software Foundation; version 2 of the License. 6 7 This program is distributed in the hope that it will be useful, 8 but WITHOUT ANY WARRANTY; without even the implied warranty of 9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 GNU General Public License for more details. 11 12 You should have received a copy of the GNU General Public License 13 along with this program; if not, write to the Free Software Foundation, 14 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ 15 16 #ifndef MYSQL_PSI_MEMORY_H 17 #define MYSQL_PSI_MEMORY_H 18 19 #include "psi_base.h" 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 /** 26 @file mysql/psi/psi_memory.h 27 Performance schema instrumentation interface. 28 29 @defgroup Instrumentation_interface Instrumentation Interface 30 @ingroup Performance_schema 31 @{ 32 */ 33 34 #ifdef HAVE_PSI_INTERFACE 35 #ifndef DISABLE_ALL_PSI 36 #ifndef DISABLE_PSI_MEMORY 37 #define HAVE_PSI_MEMORY_INTERFACE 38 #endif /* DISABLE_PSI_MEMORY */ 39 #endif /* DISABLE_ALL_PSI */ 40 #endif /* HAVE_PSI_INTERFACE */ 41 42 struct PSI_thread; 43 44 /** 45 Instrumented memory key. 46 To instrument memory, a memory key must be obtained using @c register_memory. 47 Using a zero key always disable the instrumentation. 48 */ 49 typedef unsigned int PSI_memory_key; 50 51 #ifdef HAVE_PSI_1 52 53 /** 54 @defgroup Group_PSI_v1 Application Binary Interface, version 1 55 @ingroup Instrumentation_interface 56 @{ 57 */ 58 59 /** 60 Memory instrument information. 61 @since PSI_VERSION_1 62 This structure is used to register instrumented memory. 63 */ 64 struct PSI_memory_info_v1 65 { 66 /** Pointer to the key assigned to the registered memory. */ 67 PSI_memory_key *m_key; 68 /** The name of the memory instrument to register. */ 69 const char *m_name; 70 /** 71 The flags of the socket instrument to register. 72 @sa PSI_FLAG_GLOBAL 73 */ 74 int m_flags; 75 }; 76 typedef struct PSI_memory_info_v1 PSI_memory_info_v1; 77 78 /** 79 Memory registration API. 80 @param category a category name (typically a plugin name) 81 @param info an array of memory info to register 82 @param count the size of the info array 83 */ 84 typedef void (*register_memory_v1_t) 85 (const char *category, struct PSI_memory_info_v1 *info, int count); 86 87 /** 88 Instrument memory allocation. 89 @param key the memory instrument key 90 @param size the size of memory allocated 91 @param[out] owner the memory owner 92 @return the effective memory instrument key 93 */ 94 typedef PSI_memory_key (*memory_alloc_v1_t) 95 (PSI_memory_key key, size_t size, struct PSI_thread ** owner); 96 97 /** 98 Instrument memory re allocation. 99 @param key the memory instrument key 100 @param old_size the size of memory previously allocated 101 @param new_size the size of memory re allocated 102 @param[in, out] owner the memory owner 103 @return the effective memory instrument key 104 */ 105 typedef PSI_memory_key (*memory_realloc_v1_t) 106 (PSI_memory_key key, size_t old_size, size_t new_size, struct PSI_thread ** owner); 107 108 /** 109 Instrument memory claim. 110 @param key the memory instrument key 111 @param size the size of memory allocated 112 @param[in, out] owner the memory owner 113 @return the effective memory instrument key 114 */ 115 typedef PSI_memory_key (*memory_claim_v1_t) 116 (PSI_memory_key key, size_t size, struct PSI_thread ** owner); 117 118 /** 119 Instrument memory free. 120 @param key the memory instrument key 121 @param size the size of memory allocated 122 @param owner the memory owner 123 */ 124 typedef void (*memory_free_v1_t) 125 (PSI_memory_key key, size_t size, struct PSI_thread * owner); 126 127 /** @} (end of group Group_PSI_v1) */ 128 129 #endif /* HAVE_PSI_1 */ 130 131 #ifdef HAVE_PSI_2 132 struct PSI_memory_info_v2 133 { 134 int placeholder; 135 }; 136 137 #endif /* HAVE_PSI_2 */ 138 139 #ifdef USE_PSI_1 140 typedef struct PSI_memory_info_v1 PSI_memory_info; 141 #endif 142 143 #ifdef USE_PSI_2 144 typedef struct PSI_memory_info_v2 PSI_memory_info; 145 #endif 146 147 /** @} (end of group Instrumentation_interface) */ 148 149 #ifdef __cplusplus 150 } 151 #endif 152 153 154 #endif /* MYSQL_PSI_MEMORY_H */ 155 156