18826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org/*
28826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
38826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org *
48826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
58826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
68826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
78826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
88826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
98826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org */
108826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
118826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org#include "webrtc/test/testsupport/trace_to_stderr.h"
128826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
133f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <assert.h>
143f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <stdio.h>
158826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
168826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org#include <string>
178826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
188826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.orgnamespace webrtc {
198826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.orgnamespace test {
208826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
218826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.orgstatic const int kLevelFilter = kTraceError | kTraceWarning | kTraceTerseInfo;
228826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
2302ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.orgTraceToStderr::TraceToStderr()
2402ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org    : override_time_(false),
2502ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org      time_seconds_(0) {
2606eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org  Trace::set_level_filter(kLevelFilter);
2702ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org  Trace::CreateTrace();
2802ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org  Trace::SetTraceCallback(this);
2902ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org}
3002ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org
3102ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.orgTraceToStderr::TraceToStderr(bool override_time)
3202ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org    : override_time_(override_time),
3302ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org      time_seconds_(0) {
3406eaa5465d57f416c14bb3a587ba4146290d6a58andrew@webrtc.org  Trace::set_level_filter(kLevelFilter);
358826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org  Trace::CreateTrace();
368826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org  Trace::SetTraceCallback(this);
378826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org}
388826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
398826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.orgTraceToStderr::~TraceToStderr() {
408826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org  Trace::SetTraceCallback(NULL);
418826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org  Trace::ReturnTrace();
428826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org}
438826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
4477c6d714d2f8f700170218784553df1a48f17885pbos@webrtc.orgvoid TraceToStderr::SetTimeSeconds(float time) { time_seconds_ = time; }
4577c6d714d2f8f700170218784553df1a48f17885pbos@webrtc.org
468826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.orgvoid TraceToStderr::Print(TraceLevel level, const char* msg_array, int length) {
478826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org  if (level & kLevelFilter) {
488826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org    assert(length > Trace::kBoilerplateLength);
498826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org    std::string msg = msg_array;
508826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org    std::string msg_log = msg.substr(Trace::kBoilerplateLength);
5102ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org    if (override_time_) {
5202ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org      fprintf(stderr, "%.2fs %s\n", time_seconds_, msg_log.c_str());
5302ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org    } else {
5402ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org      std::string msg_time = msg.substr(Trace::kTimestampPosition,
5502ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org                                        Trace::kTimestampLength);
5602ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org      fprintf(stderr, "%s %s\n", msg_time.c_str(), msg_log.c_str());
5702ae32e7033f88669a6c801207a79c0cdffd13e3andrew@webrtc.org    }
588826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org    fflush(stderr);
598826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org  }
608826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org}
618826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org
628826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org}  // namespace test
638826e340dfb6dbbb1a4f63737c554707bdaddfa9andrew@webrtc.org}  // namespace webrtc
64