1 /* Copyright (c) 2008, 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 
fprintf_to_ereport(const char * fmt,const char * msg)16 #ifndef MYSQL_PSI_BASE_H
17 #define MYSQL_PSI_BASE_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /**
24   @file mysql/psi/psi_base.h
25   Performance schema instrumentation interface.
26 
27   @defgroup Instrumentation_interface Instrumentation Interface
28   @ingroup Performance_schema
29   @{
30 */
31 
32 #define PSI_INSTRUMENT_ME 0
33 
34 #define PSI_NOT_INSTRUMENTED 0
35 
36 /**
37   Global flag.
38   This flag indicate that an instrumentation point is a global variable,
39   or a singleton.
40 */
41 #define PSI_FLAG_GLOBAL (1 << 0)
42 
43 /**
44   Mutable flag.
45   This flag indicate that an instrumentation point is a general placeholder,
46   that can mutate into a more specific instrumentation point.
47 */
48 #define PSI_FLAG_MUTABLE (1 << 1)
49 
50 #define PSI_FLAG_THREAD (1 << 2)
51 
52 /**
53   Stage progress flag.
54   This flag apply to the stage instruments only.
55   It indicates the instrumentation provides progress data.
56 */
57 #define PSI_FLAG_STAGE_PROGRESS (1 << 3)
58 
59 /**
60   Shared Exclusive flag.
61   Indicates that rwlock support the shared exclusive state.
62 */
63 #define PSI_RWLOCK_FLAG_SX (1 << 4)
64 
65 /**
66   Transferable flag.
67   This flag indicate that an instrumented object can
68   be created by a thread and destroyed by another thread.
69 */
70 #define PSI_FLAG_TRANSFER (1 << 5)
71 
72 #ifdef HAVE_PSI_INTERFACE
73 
74 /**
75   @def PSI_VERSION_1
76   Performance Schema Interface number for version 1.
77   This version is supported.
78 */
79 #define PSI_VERSION_1 1
80 
81 /**
82   @def PSI_VERSION_2
83   Performance Schema Interface number for version 2.
84   This version is not implemented, it's a placeholder.
85 */
86 #define PSI_VERSION_2 2
87 
88 /**
89   @def PSI_CURRENT_VERSION
90   Performance Schema Interface number for the most recent version.
91   The most current version is @c PSI_VERSION_1
92 */
93 #define PSI_CURRENT_VERSION 1
94 
95 /**
96   @def USE_PSI_1
97   Define USE_PSI_1 to use the interface version 1.
98 */
99 
100 /**
101   @def USE_PSI_2
102   Define USE_PSI_2 to use the interface version 2.
103 */
104 
105 /**
106   @def HAVE_PSI_1
107   Define HAVE_PSI_1 if the interface version 1 needs to be compiled in.
108 */
109 
110 /**
111   @def HAVE_PSI_2
112   Define HAVE_PSI_2 if the interface version 2 needs to be compiled in.
113 */
114 
115 #ifndef USE_PSI_2
116 #ifndef USE_PSI_1
117 #define USE_PSI_1
118 #endif
119 #endif
120 
121 #ifdef USE_PSI_1
122 #define HAVE_PSI_1
123 #endif
124 
125 #ifdef USE_PSI_2
126 #define HAVE_PSI_2
127 #endif
128 
129 /*
130   Allow to override PSI_XXX_CALL at compile time
131   with more efficient implementations, if available.
132   If nothing better is available,
133   make a dynamic call using the PSI_server function pointer.
134 */
135 
136 #define PSI_DYNAMIC_CALL(M) PSI_server->M
137 
138 #endif /* HAVE_PSI_INTERFACE */
139 
140 /** @} */
141 
142 #ifdef __cplusplus
143 }
144 #endif
145 
146 #endif /* MYSQL_PSI_BASE_H */
147 
148