1 /*
2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "webrtc/system_wrappers/include/logcat_trace_context.h"
12 
13 #include <android/log.h>
14 #include <assert.h>
15 
16 #include "webrtc/system_wrappers/include/logging.h"
17 
18 namespace webrtc {
19 
AndroidLogPriorityFromWebRtcLogLevel(TraceLevel webrtc_level)20 static android_LogPriority AndroidLogPriorityFromWebRtcLogLevel(
21     TraceLevel webrtc_level) {
22   // NOTE: this mapping is somewhat arbitrary.  StateInfo and Info are mapped
23   // to DEBUG because they are highly verbose in webrtc code (which is
24   // unfortunate).
25   switch (webrtc_level) {
26     case webrtc::kTraceStateInfo: return ANDROID_LOG_DEBUG;
27     case webrtc::kTraceWarning: return ANDROID_LOG_WARN;
28     case webrtc::kTraceError: return ANDROID_LOG_ERROR;
29     case webrtc::kTraceCritical: return ANDROID_LOG_FATAL;
30     case webrtc::kTraceApiCall: return ANDROID_LOG_VERBOSE;
31     case webrtc::kTraceModuleCall: return ANDROID_LOG_VERBOSE;
32     case webrtc::kTraceMemory: return ANDROID_LOG_VERBOSE;
33     case webrtc::kTraceTimer: return ANDROID_LOG_VERBOSE;
34     case webrtc::kTraceStream: return ANDROID_LOG_VERBOSE;
35     case webrtc::kTraceDebug: return ANDROID_LOG_DEBUG;
36     case webrtc::kTraceInfo: return ANDROID_LOG_DEBUG;
37     case webrtc::kTraceTerseInfo: return ANDROID_LOG_INFO;
38     default:
39       LOG(LS_ERROR) << "Unexpected log level" << webrtc_level;
40       return ANDROID_LOG_FATAL;
41   }
42 }
43 
LogcatTraceContext()44 LogcatTraceContext::LogcatTraceContext() {
45   webrtc::Trace::CreateTrace();
46   if (webrtc::Trace::SetTraceCallback(this) != 0)
47     assert(false);
48 }
49 
~LogcatTraceContext()50 LogcatTraceContext::~LogcatTraceContext() {
51   if (webrtc::Trace::SetTraceCallback(NULL) != 0)
52     assert(false);
53   webrtc::Trace::ReturnTrace();
54 }
55 
Print(TraceLevel level,const char * message,int length)56 void LogcatTraceContext::Print(TraceLevel level,
57                                const char* message,
58                                int length) {
59   __android_log_print(AndroidLogPriorityFromWebRtcLogLevel(level),
60                       "WEBRTC", "%.*s", length, message);
61 }
62 
63 }  // namespace webrtc
64