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