trace.c revision 4c37c7242b7f2f4b703bb197fd5454ea2ffe053b
1ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten/* 2ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 3ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * 4ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * you may not use this file except in compliance with the License. 6ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * You may obtain a copy of the License at 7ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * 8ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * 10ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * See the License for the specific language governing permissions and 14ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten * limitations under the License. 15ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten */ 16ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 177a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten/* trace debugging */ 18ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 197a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#if 0 // ifdef ANDROID // FIXME requires Stagefright LOG update 207a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten//#define LOG_NDEBUG 0 217a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#define LOG_TAG "libOpenSLES" 227a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#else 237a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#define LOGV printf 247a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#define LOGE printf 257a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#endif 26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 277a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#include "sles_allinclusive.h" 28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 297a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#ifdef USE_TRACE 30ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 314c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten// This should be the only global variable 324c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenstatic unsigned slTraceEnabled = SL_TRACE_DEFAULT; 334c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 344c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceSetEnabled(unsigned enabled) 35ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 364c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceEnabled = enabled; 37ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 38ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 394c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterGlobal(const char *function) 40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 414c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten if (SL_TRACE_ENTER & slTraceEnabled) 424c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten LOGV("Entering %s\n", function); 434c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten} 444c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 454c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveGlobal(const char *function, SLresult result) 464c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten{ 474c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten if ((SL_RESULT_SUCCESS != result) && (SL_TRACE_LEAVE_FAILURE & slTraceEnabled)) { 485dacc932cd1084e0cd746afe0a4d7e035560113cGlenn Kasten if (SLESUT_RESULT_MAX > result) 495dacc932cd1084e0cd746afe0a4d7e035560113cGlenn Kasten LOGV("Leaving %s (%s)\n", function, slesutResultStrings[result]); 50ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten else 517a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten LOGV("Leaving %s (0x%X)\n", function, (unsigned) result); 52ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 53ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 54ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 554c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterInterface(const char *function) 56ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*function == 'I') 58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++function; 59ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten const char *underscore = function; 60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten while (*underscore != '\0') { 61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*underscore == '_') { 624c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten if ((strcmp(function, "BufferQueue_Enqueue") && strcmp(function, "BufferQueue_GetState") 634c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten && strcmp(function, "OutputMixExt_FillBuffer")) && (SL_TRACE_ENTER & slTraceEnabled)) { 64f7f6db2450bbb7843de2d325a5b669023d9a25fdGlenn Kasten LOGV("Entering %.*s::%s\n", (int) (underscore - function), function, &underscore[1]); 654b65ef9efdf5aba01bea89d8cdd64f500560a28dGlenn Kasten } 66ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return; 67ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++underscore; 69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 704c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten if (SL_TRACE_ENTER & slTraceEnabled) 714c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten LOGV("Entering %s\n", function); 72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 73ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 744c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveInterface(const char *function, SLresult result) 75ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 764c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten if ((SL_RESULT_SUCCESS != result) && (SL_TRACE_LEAVE_FAILURE & slTraceEnabled)) { 77ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*function == 'I') 78ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++function; 79ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten const char *underscore = function; 80ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten while (*underscore != '\0') { 81ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*underscore == '_') { 825dacc932cd1084e0cd746afe0a4d7e035560113cGlenn Kasten if (SLESUT_RESULT_MAX > result) 83f7f6db2450bbb7843de2d325a5b669023d9a25fdGlenn Kasten LOGE("Leaving %.*s::%s (%s)\n", (int) (underscore - function), function, 845dacc932cd1084e0cd746afe0a4d7e035560113cGlenn Kasten &underscore[1], slesutResultStrings[result]); 85ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten else 86f7f6db2450bbb7843de2d325a5b669023d9a25fdGlenn Kasten LOGE("Leaving %.*s::%s (0x%X)\n", (int) (underscore - function), function, 87ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten &underscore[1], (unsigned) result); 88ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return; 89ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 90ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++underscore; 91ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 925dacc932cd1084e0cd746afe0a4d7e035560113cGlenn Kasten if (SLESUT_RESULT_MAX > result) 935dacc932cd1084e0cd746afe0a4d7e035560113cGlenn Kasten LOGE("Leaving %s (%s)\n", function, slesutResultStrings[result]); 94ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten else 957a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten LOGE("Leaving %s (0x%X)\n", function, (unsigned) result); 96ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 97ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 98ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 994c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterInterfaceVoid(const char *function) 100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 1014c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten if (SL_TRACE_ENTER & slTraceEnabled) 1024c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceEnterInterface(function); 103ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 104ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1054c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveInterfaceVoid(const char *function) 1064c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten{ 1074c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten if (SL_TRACE_LEAVE_VOID & slTraceEnabled) 1084c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceLeaveInterface(function, SL_RESULT_SUCCESS); 1094c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten} 1104c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 1114c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten#else 1124c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 1134c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceSetEnabled(unsigned enabled) 114ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 115ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 116ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1177a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#endif // defined(USE_TRACE) 118