134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten/*
234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * Copyright (C) 2010 The Android Open Source Project
334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten *
434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * you may not use this file except in compliance with the License.
634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * You may obtain a copy of the License at
734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten *
834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten *
1034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * Unless required by applicable law or agreed to in writing, software
1134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
1234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * See the License for the specific language governing permissions and
1434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten * limitations under the License.
1534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten */
1634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
1734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten// Trace debugging
1834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
1934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten// Always defined, but may be a no-op if trace support is disabled at compile-time
2034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastenextern void slTraceSetEnabled(unsigned enabled);
2134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
2234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_TRACE_ENTER          0x1
2334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_TRACE_LEAVE_FAILURE  0x2
2434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_TRACE_LEAVE_VOID     0x4
2534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_TRACE_LEAVE_SUCCESS  0x8
2634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_TRACE_LEAVE          (SL_TRACE_LEAVE_FAILURE | SL_TRACE_LEAVE_VOID | \
2734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten                                    SL_TRACE_LEAVE_SUCCESS)
2834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_TRACE_ALL            (SL_TRACE_ENTER | SL_TRACE_LEAVE)
2934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#ifndef SL_TRACE_DEFAULT
3034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_TRACE_DEFAULT        (SL_TRACE_LEAVE_FAILURE)
3134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#endif
3234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
3334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#ifndef USE_TRACE
3434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
3534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_ENTER_GLOBAL SLresult result;
3634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_LEAVE_GLOBAL return result;
3734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_ENTER_INTERFACE SLresult result;
3834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_LEAVE_INTERFACE return result;
3934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_ENTER_INTERFACE_VOID
4034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_LEAVE_INTERFACE_VOID return;
4134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
4234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_ENTER_GLOBAL XAresult result;
4334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_LEAVE_GLOBAL return result;
4434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_ENTER_INTERFACE XAresult result;
4534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_LEAVE_INTERFACE return result;
4634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
4734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#else
4834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
4934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastenextern void slTraceEnterGlobal(const char *function);
5034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastenextern void slTraceLeaveGlobal(const char *function, SLresult result);
5134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastenextern void slTraceEnterInterface(const char *function);
5234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastenextern void slTraceLeaveInterface(const char *function, SLresult result);
5334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastenextern void slTraceEnterInterfaceVoid(const char *function);
5434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kastenextern void slTraceLeaveInterfaceVoid(const char *function);
5534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_ENTER_GLOBAL SLresult result; slTraceEnterGlobal(__FUNCTION__);
5634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_LEAVE_GLOBAL slTraceLeaveGlobal(__FUNCTION__, result); return result;
5734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_ENTER_INTERFACE SLresult result; slTraceEnterInterface(__FUNCTION__);
5834a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_LEAVE_INTERFACE slTraceLeaveInterface(__FUNCTION__, result); return result;
5934a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_ENTER_INTERFACE_VOID slTraceEnterInterfaceVoid(__FUNCTION__);
6034a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define SL_LEAVE_INTERFACE_VOID slTraceLeaveInterfaceVoid(__FUNCTION__); return;
6134a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
6234a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_ENTER_GLOBAL XAresult result; slTraceEnterGlobal(__FUNCTION__);
6334a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_LEAVE_GLOBAL slTraceLeaveGlobal(__FUNCTION__, result); return result;
6434a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_ENTER_INTERFACE XAresult result; slTraceEnterInterface(__FUNCTION__);
6534a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#define XA_LEAVE_INTERFACE slTraceLeaveInterface(__FUNCTION__, result); return result;
6634a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten
6734a2d76d36b5b50a5792963b14ab2ce3bfed1086Glenn Kasten#endif
68