Annotation of embedaddon/php/ext/mysqlnd/mysqlnd_statistics.h, revision 1.1.1.4
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
1.1.1.4 ! misho 5: | Copyright (c) 2006-2014 The PHP Group |
1.1 misho 6: +----------------------------------------------------------------------+
7: | This source file is subject to version 3.01 of the PHP license, |
8: | that is bundled with this package in the file LICENSE, and is |
9: | available through the world-wide-web at the following url: |
10: | http://www.php.net/license/3_01.txt |
11: | If you did not receive a copy of the PHP license and are unable to |
12: | obtain it through the world-wide-web, please send a note to |
13: | license@php.net so we can mail you a copy immediately. |
14: +----------------------------------------------------------------------+
15: | Authors: Georg Richter <georg@mysql.com> |
16: | Andrey Hristov <andrey@mysql.com> |
17: | Ulf Wendel <uwendel@mysql.com> |
18: +----------------------------------------------------------------------+
19: */
20:
1.1.1.2 misho 21: /* $Id$ */
1.1 misho 22:
23: #ifndef MYSQLND_STATISTICS_H
24: #define MYSQLND_STATISTICS_H
25:
26:
27: PHPAPI extern MYSQLND_STATS * mysqlnd_global_stats;
28:
29: extern const MYSQLND_STRING mysqlnd_stats_values_names[];
30:
31: #ifdef ZTS
32: #define MYSQLND_STATS_LOCK(stats) tsrm_mutex_lock((stats)->LOCK_access)
33: #define MYSQLND_STATS_UNLOCK(stats) tsrm_mutex_unlock((stats)->LOCK_access)
34: #else
35: #define MYSQLND_STATS_LOCK(stats)
36: #define MYSQLND_STATS_UNLOCK(stats)
37: #endif
38:
39: #ifndef MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED
40: #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val) \
41: if ((s_array)->triggers[(statistic)] && (s_array)->in_trigger == FALSE) { \
42: (s_array)->in_trigger = TRUE; \
43: MYSQLND_STATS_UNLOCK((s_array)); \
44: \
45: (s_array)->triggers[(statistic)]((s_array), (statistic), (val) TSRMLS_CC); \
46: \
47: MYSQLND_STATS_LOCK((s_array)); \
48: (s_array)->in_trigger = FALSE; \
49: }
50: #else
51: #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val)
52: #endif /* MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED */
53:
54: #define MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(stats, statistic, value) \
55: { \
56: MYSQLND_STATS_LOCK(stats); \
57: (stats)->values[(statistic)] += (value); \
58: MYSQLND_STAT_CALL_TRIGGER((stats), (statistic), (value)); \
59: MYSQLND_STATS_UNLOCK(_p_s); \
60: }
61:
62: #define MYSQLND_DEC_STATISTIC(enabler, stats, statistic) \
63: { \
64: enum_mysqlnd_collected_stats _s = (statistic);\
65: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
66: if ((enabler) && _p_s && _s != _p_s->count) { \
67: MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, -1); \
68: }\
69: }
70:
71: #define MYSQLND_INC_STATISTIC(enabler, stats, statistic) \
72: { \
73: enum_mysqlnd_collected_stats _s = (statistic);\
74: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
75: if ((enabler) && _p_s && _s != _p_s->count) { \
76: MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, 1); \
77: }\
78: }
79:
80: #define MYSQLND_INC_STATISTIC_W_VALUE(enabler, stats, statistic, value) \
81: { \
82: enum_mysqlnd_collected_stats _s = (statistic);\
83: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
84: if ((enabler) && _p_s && _s != _p_s->count) { \
85: uint64_t v = (uint64_t) (value); \
86: MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, v); \
87: }\
88: }
89:
90: #define MYSQLND_INC_STATISTIC_W_VALUE2(enabler, stats, statistic1, value1, statistic2, value2) \
91: { \
92: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
93: if ((enabler) && _p_s) { \
94: uint64_t v1 = (uint64_t) (value1); \
95: uint64_t v2 = (uint64_t) (value2); \
96: enum_mysqlnd_collected_stats _s1 = (statistic1);\
97: enum_mysqlnd_collected_stats _s2 = (statistic2);\
98: if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
99: if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
100: }\
101: }
102:
103: #define MYSQLND_INC_STATISTIC_W_VALUE3(enabler, stats, statistic1, value1, statistic2, value2, statistic3, value3) \
104: { \
105: MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
106: if ((enabler) && _p_s) { \
107: uint64_t v1 = (uint64_t) (value1); \
108: uint64_t v2 = (uint64_t) (value2); \
109: uint64_t v3 = (uint64_t) (value3); \
110: enum_mysqlnd_collected_stats _s1 = (statistic1);\
111: enum_mysqlnd_collected_stats _s2 = (statistic2);\
112: enum_mysqlnd_collected_stats _s3 = (statistic3);\
113: if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
114: if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
115: if (_s3 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s3, v3); \
116: }\
117: }
118:
119:
120:
121: #ifndef MYSQLND_CORE_STATISTICS_DISABLED
122:
123: #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \
124: MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))
125:
126: #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \
127: MYSQLND_DEC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic))
128:
129: #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \
130: MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2))
131:
132: #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \
133: MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)); \
134: MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), (conn_stats), (statistic));
135:
136: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \
137: MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic), (value)); \
138: MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), (conn_stats), (statistic), (value));
139:
140: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \
141: MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)); \
142: MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2));
143:
144: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \
145: MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); \
146: MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2), (statistic3), (value3));
147:
148: #else
149:
150: #define MYSQLND_INC_GLOBAL_STATISTIC(statistic)
151: #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic)
152: #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2)
153: #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic)
154: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value)
155: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2)
156: #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3)
157:
158: #endif /* MYSQLND_CORE_STATISTICS_DISABLED */
159:
160: PHPAPI void mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, const MYSQLND_STRING * names, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
161:
162: PHPAPI void mysqlnd_stats_init(MYSQLND_STATS ** stats, size_t statistic_count);
163: PHPAPI void mysqlnd_stats_end(MYSQLND_STATS * stats);
164:
165: PHPAPI mysqlnd_stat_trigger mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats stat, mysqlnd_stat_trigger trigger TSRMLS_DC);
166: PHPAPI mysqlnd_stat_trigger mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats TSRMLS_DC);
167:
168: #endif /* MYSQLND_STATISTICS_H */
169:
170: /*
171: * Local variables:
172: * tab-width: 4
173: * c-basic-offset: 4
174: * End:
175: * vim600: noet sw=4 ts=4 fdm=marker
176: * vim<600: noet sw=4 ts=4
177: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>