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/interface/logcat_trace_context.h"
12
13#include <android/log.h>
14#include <assert.h>
15
16#include "webrtc/system_wrappers/interface/logging.h"
17
18namespace webrtc {
19
20static 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
44LogcatTraceContext::LogcatTraceContext() {
45  webrtc::Trace::CreateTrace();
46  if (webrtc::Trace::SetTraceCallback(this) != 0)
47    assert(false);
48}
49
50LogcatTraceContext::~LogcatTraceContext() {
51  if (webrtc::Trace::SetTraceCallback(NULL) != 0)
52    assert(false);
53  webrtc::Trace::ReturnTrace();
54}
55
56void 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