1 /*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /* trace debugging */
18
19 #include "sles_allinclusive.h"
20
21 #ifdef USE_TRACE
22
23 // This should be the only global variable
24 static unsigned slTraceEnabled = SL_TRACE_DEFAULT;
25
26
slTraceSetEnabled(unsigned enabled)27 void slTraceSetEnabled(unsigned enabled)
28 {
29 slTraceEnabled = enabled;
30 }
31
32
slTraceEnterGlobal(const char * function)33 void slTraceEnterGlobal(const char *function)
34 {
35 if (SL_TRACE_ENTER & slTraceEnabled) {
36 SL_LOGD("Entering %s", function);
37 }
38 }
39
40
slTraceLeaveGlobal(const char * function,SLresult result)41 void slTraceLeaveGlobal(const char *function, SLresult result)
42 {
43 if (SL_RESULT_SUCCESS == result) {
44 if (SL_TRACE_LEAVE_SUCCESS & slTraceEnabled) {
45 SL_LOGD("Leaving %s", function);
46 }
47 } else {
48 if (SL_TRACE_LEAVE_FAILURE & slTraceEnabled) {
49 const char *str = slesutResultToString(result);
50 if (NULL != str) {
51 SL_LOGW("Leaving %s (%s)", function, str);
52 } else {
53 SL_LOGW("Leaving %s (0x%X)", function, result);
54 }
55 }
56 }
57 }
58
59
slTraceEnterInterface(const char * function)60 void slTraceEnterInterface(const char *function)
61 {
62 if (!(SL_TRACE_ENTER & slTraceEnabled)) {
63 return;
64 }
65 if (*function == 'I') {
66 ++function;
67 }
68 const char *underscore = function;
69 while (*underscore != '\0') {
70 if (*underscore == '_') {
71 if (/*(strcmp(function, "BufferQueue_Enqueue") &&
72 strcmp(function, "BufferQueue_GetState") &&
73 strcmp(function, "OutputMixExt_FillBuffer")) &&*/
74 true) {
75 SL_LOGD("Entering %.*s::%s", (int) (underscore - function), function,
76 &underscore[1]);
77 }
78 return;
79 }
80 ++underscore;
81 }
82 SL_LOGV("Entering %s", function);
83 }
84
85
slTraceLeaveInterface(const char * function,SLresult result)86 void slTraceLeaveInterface(const char *function, SLresult result)
87 {
88 if (!((SL_TRACE_LEAVE_SUCCESS | SL_TRACE_LEAVE_FAILURE) & slTraceEnabled)) {
89 return;
90 }
91 if (*function == 'I') {
92 ++function;
93 }
94 const char *underscore = function;
95 while (*underscore != '\0') {
96 if (*underscore == '_') {
97 break;
98 }
99 ++underscore;
100 }
101 if (SL_RESULT_SUCCESS == result) {
102 if (SL_TRACE_LEAVE_SUCCESS & slTraceEnabled) {
103 if (*underscore == '_') {
104 SL_LOGD("Leaving %.*s::%s", (int) (underscore - function), function,
105 &underscore[1]);
106 } else {
107 SL_LOGD("Leaving %s", function);
108 }
109 }
110 } else {
111 if (SL_TRACE_LEAVE_FAILURE & slTraceEnabled) {
112 const char *str = slesutResultToString(result);
113 if (*underscore == '_') {
114 if (NULL != str) {
115 SL_LOGW("Leaving %.*s::%s (%s)", (int) (underscore - function), function,
116 &underscore[1], str);
117 } else {
118 SL_LOGW("Leaving %.*s::%s (0x%X)", (int) (underscore - function), function,
119 &underscore[1], result);
120 }
121 } else {
122 if (NULL != str) {
123 SL_LOGW("Leaving %s (%s)", function, str);
124 } else {
125 SL_LOGW("Leaving %s (0x%X)", function, result);
126 }
127 }
128 }
129 }
130 }
131
132
slTraceEnterInterfaceVoid(const char * function)133 void slTraceEnterInterfaceVoid(const char *function)
134 {
135 if (SL_TRACE_ENTER & slTraceEnabled) {
136 slTraceEnterInterface(function);
137 }
138 }
139
140
slTraceLeaveInterfaceVoid(const char * function)141 void slTraceLeaveInterfaceVoid(const char *function)
142 {
143 if (SL_TRACE_LEAVE_VOID & slTraceEnabled) {
144 slTraceLeaveInterface(function, SL_RESULT_SUCCESS);
145 }
146 }
147
148 #else
149
slTraceSetEnabled(unsigned enabled)150 void slTraceSetEnabled(unsigned enabled)
151 {
152 }
153
154 #endif // USE_TRACE
155