blob: 00d71677e5d8d7cb2ede287720786118ec65ef4e [file] [log] [blame]
Masood Malekghassemi76c3d742015-08-19 18:22:53 -07001/*
2 *
David Garcia Quintas3598d442016-03-15 14:53:05 -07003 * Copyright 2015-2016, Google Inc.
Masood Malekghassemi76c3d742015-08-19 18:22:53 -07004 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
Craig Tiller9a4dddd2016-03-25 17:08:13 -070034#ifndef GRPC_CORE_LIB_SURFACE_API_TRACE_H
35#define GRPC_CORE_LIB_SURFACE_API_TRACE_H
Masood Malekghassemi76c3d742015-08-19 18:22:53 -070036
Masood Malekghassemi76c3d742015-08-19 18:22:53 -070037#include <grpc/support/log.h>
Craig Tillerf40df232016-03-25 13:38:14 -070038#include "src/core/debug/trace.h"
Masood Malekghassemi76c3d742015-08-19 18:22:53 -070039
40extern int grpc_api_trace;
41
42/* Provide unwrapping macros because we're in C89 and variadic macros weren't
43 introduced until C99... */
44#define GRPC_API_TRACE_UNWRAP0()
45#define GRPC_API_TRACE_UNWRAP1(a) , a
46#define GRPC_API_TRACE_UNWRAP2(a, b) , a, b
47#define GRPC_API_TRACE_UNWRAP3(a, b, c) , a, b, c
48#define GRPC_API_TRACE_UNWRAP4(a, b, c, d) , a, b, c, d
49#define GRPC_API_TRACE_UNWRAP5(a, b, c, d, e) , a, b, c, d, e
50#define GRPC_API_TRACE_UNWRAP6(a, b, c, d, e, f) , a, b, c, d, e, f
51#define GRPC_API_TRACE_UNWRAP7(a, b, c, d, e, f, g) , a, b, c, d, e, f, g
52#define GRPC_API_TRACE_UNWRAP8(a, b, c, d, e, f, g, h) , a, b, c, d, e, f, g, h
53#define GRPC_API_TRACE_UNWRAP9(a, b, c, d, e, f, g, h, i) \
Craig Tiller4de3e4f2015-10-05 08:55:50 -070054 , a, b, c, d, e, f, g, h, i
Masood Malekghassemi76c3d742015-08-19 18:22:53 -070055#define GRPC_API_TRACE_UNWRAP10(a, b, c, d, e, f, g, h, i, j) \
Craig Tiller4de3e4f2015-10-05 08:55:50 -070056 , a, b, c, d, e, f, g, h, i, j
Masood Malekghassemi76c3d742015-08-19 18:22:53 -070057
58/* Due to the limitations of C89's preprocessor, the arity of the var-arg list
59 'nargs' must be specified. */
Craig Tiller4de3e4f2015-10-05 08:55:50 -070060#define GRPC_API_TRACE(fmt, nargs, args) \
61 if (grpc_api_trace) { \
62 gpr_log(GPR_INFO, fmt GRPC_API_TRACE_UNWRAP##nargs args); \
63 }
Masood Malekghassemi76c3d742015-08-19 18:22:53 -070064
Craig Tiller9a4dddd2016-03-25 17:08:13 -070065#endif /* GRPC_CORE_LIB_SURFACE_API_TRACE_H */