1cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*
2cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Copyright (C) 2010 The Android Open Source Project
3cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
4cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
5cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * you may not use this file except in compliance with the License.
6cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * You may obtain a copy of the License at
7cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
8cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
9cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
10cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Unless required by applicable law or agreed to in writing, software
11cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
12cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * See the License for the specific language governing permissions and
14cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * limitations under the License.
15cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */
16cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
17cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten// Trace debugging
18cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
19cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten// Always defined, but may be a no-op if trace support is disabled at compile-time
20cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastenextern void slTraceSetEnabled(unsigned enabled);
21cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
22cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_TRACE_ENTER          0x1
23cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_TRACE_LEAVE_FAILURE  0x2
24cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_TRACE_LEAVE_VOID     0x4
25cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_TRACE_LEAVE_SUCCESS  0x8
26cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_TRACE_LEAVE          (SL_TRACE_LEAVE_FAILURE | SL_TRACE_LEAVE_VOID | \
27cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten                                    SL_TRACE_LEAVE_SUCCESS)
28cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_TRACE_ALL            (SL_TRACE_ENTER | SL_TRACE_LEAVE)
29cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifndef SL_TRACE_DEFAULT
30cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_TRACE_DEFAULT        (SL_TRACE_LEAVE_FAILURE)
31cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
32cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
33cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifndef USE_TRACE
34cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
35cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_ENTER_GLOBAL SLresult result;
36cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_LEAVE_GLOBAL return result;
37cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_ENTER_INTERFACE SLresult result;
38cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_LEAVE_INTERFACE return result;
39cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_ENTER_INTERFACE_VOID
40cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_LEAVE_INTERFACE_VOID return;
41cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
42cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_ENTER_GLOBAL XAresult result;
43cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_LEAVE_GLOBAL return result;
44cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_ENTER_INTERFACE XAresult result;
45cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_LEAVE_INTERFACE return result;
46cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
47cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else
48cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
49cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastenextern void slTraceEnterGlobal(const char *function);
50cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastenextern void slTraceLeaveGlobal(const char *function, SLresult result);
51cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastenextern void slTraceEnterInterface(const char *function);
52cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastenextern void slTraceLeaveInterface(const char *function, SLresult result);
53cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastenextern void slTraceEnterInterfaceVoid(const char *function);
54cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastenextern void slTraceLeaveInterfaceVoid(const char *function);
55cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_ENTER_GLOBAL SLresult result; slTraceEnterGlobal(__FUNCTION__);
56cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_LEAVE_GLOBAL slTraceLeaveGlobal(__FUNCTION__, result); return result;
57cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_ENTER_INTERFACE SLresult result; slTraceEnterInterface(__FUNCTION__);
58cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_LEAVE_INTERFACE slTraceLeaveInterface(__FUNCTION__, result); return result;
59cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_ENTER_INTERFACE_VOID slTraceEnterInterfaceVoid(__FUNCTION__);
60cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define SL_LEAVE_INTERFACE_VOID slTraceLeaveInterfaceVoid(__FUNCTION__); return;
61cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
62cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_ENTER_GLOBAL XAresult result; slTraceEnterGlobal(__FUNCTION__);
63cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_LEAVE_GLOBAL slTraceLeaveGlobal(__FUNCTION__, result); return result;
64cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_ENTER_INTERFACE XAresult result; slTraceEnterInterface(__FUNCTION__);
65cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define XA_LEAVE_INTERFACE slTraceLeaveInterface(__FUNCTION__, result); return result;
66cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
67cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
68