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 217a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten#ifdef USE_TRACE 22ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 234c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten// This should be the only global variable 244c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenstatic unsigned slTraceEnabled = SL_TRACE_DEFAULT; 254c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 264597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 274c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceSetEnabled(unsigned enabled) 28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 294c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceEnabled = enabled; 30ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 31ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 324597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 334c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterGlobal(const char *function) 34ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 357df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SL_TRACE_ENTER & slTraceEnabled) { 367df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Entering %s", function); 377df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 384c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten} 394c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 404597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 414c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveGlobal(const char *function, SLresult result) 424c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten{ 434597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_RESULT_SUCCESS == result) { 444597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_TRACE_LEAVE_SUCCESS & slTraceEnabled) { 457df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Leaving %s", function); 464597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 474597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } else { 484597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_TRACE_LEAVE_FAILURE & slTraceEnabled) { 497126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten const char *str = slesutResultToString(result); 507126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten if (NULL != str) { 517126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten SL_LOGW("Leaving %s (%s)", function, str); 527df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } else { 53a8179ea15c4ff78db589d742b135649f0eda7ef2Glenn Kasten SL_LOGW("Leaving %s (0x%X)", function, result); 547df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 554597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 56ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 594597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 604c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterInterface(const char *function) 61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 627df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (!(SL_TRACE_ENTER & slTraceEnabled)) { 634597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten return; 647df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 657df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (*function == 'I') { 66ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++function; 677df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten const char *underscore = function; 69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten while (*underscore != '\0') { 70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*underscore == '_') { 714597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (/*(strcmp(function, "BufferQueue_Enqueue") && 724597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten strcmp(function, "BufferQueue_GetState") && 734597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten strcmp(function, "OutputMixExt_FillBuffer")) &&*/ 744597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten true) { 757df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGD("Entering %.*s::%s", (int) (underscore - function), function, 76e5d006b298ce7683d66f7ec86136403cf5fb20d6Glenn Kasten &underscore[1]); 774b65ef9efdf5aba01bea89d8cdd64f500560a28dGlenn Kasten } 78ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return; 79ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 80ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten ++underscore; 81ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 827df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten SL_LOGV("Entering %s", function); 83ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 854597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 864c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveInterface(const char *function, SLresult result) 87ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 887df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (!((SL_TRACE_LEAVE_SUCCESS | SL_TRACE_LEAVE_FAILURE) & slTraceEnabled)) { 894597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten return; 907df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 917df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (*function == 'I') { 924597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten ++function; 937df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 944597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten const char *underscore = function; 954597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten while (*underscore != '\0') { 964597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (*underscore == '_') { 974597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten break; 984597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 994597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten ++underscore; 1004597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } 1014597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_RESULT_SUCCESS == result) { 1024597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten if (SL_TRACE_LEAVE_SUCCESS & slTraceEnabled) { 1037df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (*underscore == '_') { 104a7b79e766ec6d95e9236168c27461c2ebaef4659Glenn Kasten SL_LOGD("Leaving %.*s::%s", (int) (underscore - function), function, 105a7b79e766ec6d95e9236168c27461c2ebaef4659Glenn Kasten &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) { 1127126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten const char *str = slesutResultToString(result); 113ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (*underscore == '_') { 1147126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten if (NULL != str) { 115a7b79e766ec6d95e9236168c27461c2ebaef4659Glenn Kasten SL_LOGW("Leaving %.*s::%s (%s)", (int) (underscore - function), function, 1167126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten &underscore[1], str); 1177df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } else { 118a8179ea15c4ff78db589d742b135649f0eda7ef2Glenn Kasten SL_LOGW("Leaving %.*s::%s (0x%X)", (int) (underscore - function), function, 1197126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten &underscore[1], result); 1207df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 1214597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten } else { 1227126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten if (NULL != str) { 1237126c25d7c037e5086216cf540ecf40779c3585aGlenn Kasten SL_LOGW("Leaving %s (%s)", function, str); 1247df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } else { 125a8179ea15c4ff78db589d742b135649f0eda7ef2Glenn Kasten SL_LOGW("Leaving %s (0x%X)", function, result); 1267df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 127ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 128ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 129ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 130ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 131ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1324597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 1334c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceEnterInterfaceVoid(const char *function) 134ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 1357df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SL_TRACE_ENTER & slTraceEnabled) { 1364c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceEnterInterface(function); 1377df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 138ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 139ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1404597a7427b697df31d0bbf4c2040806d0c27b6e0Glenn Kasten 1414c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceLeaveInterfaceVoid(const char *function) 1424c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten{ 1437df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten if (SL_TRACE_LEAVE_VOID & slTraceEnabled) { 1444c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten slTraceLeaveInterface(function, SL_RESULT_SUCCESS); 1457df8d48ba8306850543f726a024d77b25aee483eGlenn Kasten } 1464c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten} 1474c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 1484c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten#else 1494c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kasten 1504c37c7242b7f2f4b703bb197fd5454ea2ffe053bGlenn Kastenvoid slTraceSetEnabled(unsigned enabled) 151ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 152ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 153ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 154a3080daa505f91df51a808c85ddb37c48745bf7cGlenn Kasten#endif // USE_TRACE 155