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