trace.c revision 7df8d48ba8306850543f726a024d77b25aee483e
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#include "sles_allinclusive.h" 20ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 217df8d48ba8306850543f726a024d77b25aee483eGlenn Kastenconst char tag[] = "libOpenSLES"; 227df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten 237a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#ifdef USE_TRACE 24ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 254c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten// This should be the only global variable 264c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenstatic unsigned slTraceEnabled = SL_TRACE_DEFAULT; 274c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 284597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 294c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceSetEnabled(unsigned enabled) 30ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 314c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceEnabled = enabled; 32ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 33ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 344597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 354c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterGlobal(const char *function) 36ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 377df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SL_TRACE_ENTER & slTraceEnabled) { 387df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Entering %s", function); 397df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 404c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten} 414c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 424597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 434c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveGlobal(const char *function, SLresult result) 444c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten{ 454597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_RESULT_SUCCESS == result) { 464597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_TRACE_LEAVE_SUCCESS & slTraceEnabled) { 477df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Leaving %s", function); 484597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 494597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } else { 504597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_TRACE_LEAVE_FAILURE & slTraceEnabled) { 517df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SLESUT_RESULT_MAX > result) { 527df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGE("Leaving %s (%s)", function, slesutResultStrings[result]); 537df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } else { 547df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGE("Leaving %s (0x%X)", function, (unsigned) result); 557df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 564597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 59ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 604597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 614c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterInterface(const char *function) 62ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 637df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (!(SL_TRACE_ENTER & slTraceEnabled)) { 644597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten return; 657df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 667df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (*function == 'I') { 67ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++function; 687df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten const char *underscore = function; 70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten while (*underscore != '\0') { 71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*underscore == '_') { 724597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (/*(strcmp(function, "BufferQueue_Enqueue") && 734597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten strcmp(function, "BufferQueue_GetState") && 744597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten strcmp(function, "OutputMixExt_FillBuffer")) &&*/ 754597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten true) { 767df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Entering %.*s::%s", (int) (underscore - function), function, 77e5d006b298ce7683d66f7ec86136403cf5fb20d6Glenn Kasten &underscore[1]); 784b65ef9efdf5aba01bea89d8cdd64f500560a28dGlenn Kasten } 79ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return; 80ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 81ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++underscore; 82ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 837df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGV("Entering %s", function); 84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 85ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 864597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 874c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveInterface(const char *function, SLresult result) 88ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 897df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (!((SL_TRACE_LEAVE_SUCCESS | SL_TRACE_LEAVE_FAILURE) & slTraceEnabled)) { 904597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten return; 917df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 927df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (*function == 'I') { 934597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten ++function; 947df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 954597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten const char *underscore = function; 964597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten while (*underscore != '\0') { 974597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (*underscore == '_') { 984597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten break; 994597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 1004597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten ++underscore; 1014597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 1024597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_RESULT_SUCCESS == result) { 1034597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_TRACE_LEAVE_SUCCESS & slTraceEnabled) { 1047df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (*underscore == '_') { 1057df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Leaving %.*s::%s", (int) (underscore - function), function, &underscore[1]); 1067df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } else { 1077df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Leaving %s", function); 1087df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 1094597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 1104597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } else { 1114597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_TRACE_LEAVE_FAILURE & slTraceEnabled) { 112ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*underscore == '_') { 1137df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SLESUT_RESULT_MAX > result) { 1147df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGE("Leaving %.*s::%s (%s)", (int) (underscore - function), function, 1155dacc932cd1084e0cd746afe0a4d7e035560113cGlenn Kasten &underscore[1], slesutResultStrings[result]); 1167df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } else { 1177df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGE("Leaving %.*s::%s (0x%X)", (int) (underscore - function), function, 118ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten &underscore[1], (unsigned) result); 1197df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 1204597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } else { 1217df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SLESUT_RESULT_MAX > result) { 1227df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGE("Leaving %s (%s)", function, slesutResultStrings[result]); 1237df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } else { 1247df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGE("Leaving %s (0x%X)", function, (unsigned) result); 1257df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 126ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 127ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 128ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 129ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 130ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1314597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 1324c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterInterfaceVoid(const char *function) 133ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 1347df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SL_TRACE_ENTER & slTraceEnabled) { 1354c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceEnterInterface(function); 1367df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 137ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 138ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1394597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 1404c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveInterfaceVoid(const char *function) 1414c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten{ 1427df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SL_TRACE_LEAVE_VOID & slTraceEnabled) { 1434c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceLeaveInterface(function, SL_RESULT_SUCCESS); 1447df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 1454c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten} 1464c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 1474c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten#else 1484c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 1494c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceSetEnabled(unsigned enabled) 150ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 151ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 152ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1537a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#endif // defined(USE_TRACE) 154