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