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