mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-16 07:10:38 +01:00

In https://webrtc-review.googlesource.com/c/src/+/1560 we moved WebRTC from src/webrtc to src/ (in order to preserve an healthy git history). This CL takes care of fixing header guards, #include paths, etc... NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true TBR=tommi@webrtc.org Bug: chromium:611808 Change-Id: Iea91618212bee0af16aa3f05071eab8f93706578 Reviewed-on: https://webrtc-review.googlesource.com/1561 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Henrik Kjellander <kjellander@webrtc.org> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/master@{#19846}
259 lines
8.1 KiB
C++
259 lines
8.1 KiB
C++
/*
|
|
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
|
|
|
#if BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
|
|
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
|
|
#include <algorithm>
|
|
#include <sstream>
|
|
|
|
#include "rtc_base/checks.h"
|
|
#include "rtc_base/format_macros.h"
|
|
#include "rtc_base/platform_thread.h"
|
|
|
|
namespace webrtc {
|
|
namespace testing {
|
|
namespace bwe {
|
|
|
|
Logging Logging::g_Logging;
|
|
|
|
static std::string ToString(uint32_t v) {
|
|
std::stringstream ss;
|
|
ss << v;
|
|
return ss.str();
|
|
}
|
|
|
|
Logging::Context::Context(uint32_t name, int64_t timestamp_ms, bool enabled) {
|
|
Logging::GetInstance()->PushState(ToString(name), timestamp_ms, enabled);
|
|
}
|
|
|
|
Logging::Context::Context(const std::string& name, int64_t timestamp_ms,
|
|
bool enabled) {
|
|
Logging::GetInstance()->PushState(name, timestamp_ms, enabled);
|
|
}
|
|
|
|
Logging::Context::Context(const char* name, int64_t timestamp_ms,
|
|
bool enabled) {
|
|
Logging::GetInstance()->PushState(name, timestamp_ms, enabled);
|
|
}
|
|
|
|
Logging::Context::~Context() {
|
|
Logging::GetInstance()->PopState();
|
|
}
|
|
|
|
Logging* Logging::GetInstance() {
|
|
return &g_Logging;
|
|
}
|
|
|
|
void Logging::SetGlobalContext(uint32_t name) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
thread_map_[rtc::CurrentThreadId()].global_state.tag = ToString(name);
|
|
}
|
|
|
|
void Logging::SetGlobalContext(const std::string& name) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
thread_map_[rtc::CurrentThreadId()].global_state.tag = name;
|
|
}
|
|
|
|
void Logging::SetGlobalContext(const char* name) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
thread_map_[rtc::CurrentThreadId()].global_state.tag = name;
|
|
}
|
|
|
|
void Logging::SetGlobalEnable(bool enabled) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
thread_map_[rtc::CurrentThreadId()].global_state.enabled = enabled;
|
|
}
|
|
|
|
void Logging::Log(const char format[], ...) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
const State& state = it->second.stack.top();
|
|
if (state.enabled) {
|
|
printf("%s\t", state.tag.c_str());
|
|
va_list args;
|
|
va_start(args, format);
|
|
vprintf(format, args);
|
|
va_end(args);
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
void Logging::Plot(int figure, const std::string& name, double value) {
|
|
Plot(figure, name, value, 0, "-");
|
|
}
|
|
|
|
void Logging::Plot(int figure,
|
|
const std::string& name,
|
|
double value,
|
|
uint32_t ssrc) {
|
|
Plot(figure, name, value, ssrc, "-");
|
|
}
|
|
|
|
void Logging::Plot(int figure,
|
|
const std::string& name,
|
|
double value,
|
|
const std::string& alg_name) {
|
|
Plot(figure, name, value, 0, alg_name);
|
|
}
|
|
|
|
void Logging::Plot(int figure,
|
|
const std::string& name,
|
|
double value,
|
|
uint32_t ssrc,
|
|
const std::string& alg_name) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
const State& state = it->second.stack.top();
|
|
if (state.enabled) {
|
|
printf("PLOT\t%d\t%s:%" PRIu32 "@%s\t%f\t%f\n", figure, name.c_str(), ssrc,
|
|
alg_name.c_str(), state.timestamp_ms * 0.001, value);
|
|
}
|
|
}
|
|
|
|
void Logging::PlotBar(int figure,
|
|
const std::string& name,
|
|
double value,
|
|
int flow_id) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
const State& state = it->second.stack.top();
|
|
if (state.enabled) {
|
|
printf("BAR\t%d\t%s_%d\t%f\n", figure, name.c_str(), flow_id, value);
|
|
}
|
|
}
|
|
|
|
void Logging::PlotBaselineBar(int figure,
|
|
const std::string& name,
|
|
double value,
|
|
int flow_id) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
const State& state = it->second.stack.top();
|
|
if (state.enabled) {
|
|
printf("BASELINE\t%d\t%s_%d\t%f\n", figure, name.c_str(), flow_id, value);
|
|
}
|
|
}
|
|
|
|
void Logging::PlotErrorBar(int figure,
|
|
const std::string& name,
|
|
double value,
|
|
double ylow,
|
|
double yhigh,
|
|
const std::string& error_title,
|
|
int flow_id) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
const State& state = it->second.stack.top();
|
|
if (state.enabled) {
|
|
printf("ERRORBAR\t%d\t%s_%d\t%f\t%f\t%f\t%s\n", figure, name.c_str(),
|
|
flow_id, value, ylow, yhigh, error_title.c_str());
|
|
}
|
|
}
|
|
|
|
void Logging::PlotLimitErrorBar(int figure,
|
|
const std::string& name,
|
|
double value,
|
|
double ylow,
|
|
double yhigh,
|
|
const std::string& error_title,
|
|
double ymax,
|
|
const std::string& limit_title,
|
|
int flow_id) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
const State& state = it->second.stack.top();
|
|
if (state.enabled) {
|
|
printf("LIMITERRORBAR\t%d\t%s_%d\t%f\t%f\t%f\t%s\t%f\t%s\n", figure,
|
|
name.c_str(), flow_id, value, ylow, yhigh, error_title.c_str(), ymax,
|
|
limit_title.c_str());
|
|
}
|
|
}
|
|
|
|
void Logging::PlotLabel(int figure,
|
|
const std::string& title,
|
|
const std::string& y_label,
|
|
int num_flows) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
const State& state = it->second.stack.top();
|
|
if (state.enabled) {
|
|
printf("LABEL\t%d\t%s\t%s\t%d\n", figure, title.c_str(), y_label.c_str(),
|
|
num_flows);
|
|
}
|
|
}
|
|
|
|
Logging::Logging()
|
|
: thread_map_() {
|
|
}
|
|
|
|
Logging::State::State() : tag(""), timestamp_ms(0), enabled(true) {}
|
|
|
|
Logging::State::State(const std::string& tag, int64_t timestamp_ms,
|
|
bool enabled)
|
|
: tag(tag),
|
|
timestamp_ms(timestamp_ms),
|
|
enabled(enabled) {
|
|
}
|
|
|
|
void Logging::State::MergePrevious(const State& previous) {
|
|
if (tag.empty()) {
|
|
tag = previous.tag;
|
|
} else if (!previous.tag.empty()) {
|
|
tag = previous.tag + "_" + tag;
|
|
}
|
|
timestamp_ms = std::max(previous.timestamp_ms, timestamp_ms);
|
|
enabled = previous.enabled && enabled;
|
|
}
|
|
|
|
void Logging::PushState(const std::string& append_to_tag, int64_t timestamp_ms,
|
|
bool enabled) {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
State new_state(append_to_tag, timestamp_ms, enabled);
|
|
ThreadState* thread_state = &thread_map_[rtc::CurrentThreadId()];
|
|
std::stack<State>* stack = &thread_state->stack;
|
|
if (stack->empty()) {
|
|
new_state.MergePrevious(thread_state->global_state);
|
|
} else {
|
|
new_state.MergePrevious(stack->top());
|
|
}
|
|
stack->push(new_state);
|
|
}
|
|
|
|
void Logging::PopState() {
|
|
rtc::CritScope cs(&crit_sect_);
|
|
ThreadMap::iterator it = thread_map_.find(rtc::CurrentThreadId());
|
|
RTC_DCHECK(it != thread_map_.end());
|
|
std::stack<State>* stack = &it->second.stack;
|
|
int64_t newest_timestamp_ms = stack->top().timestamp_ms;
|
|
stack->pop();
|
|
if (!stack->empty()) {
|
|
State* state = &stack->top();
|
|
// Update time so that next log/plot will use the latest time seen so far
|
|
// in this call tree.
|
|
state->timestamp_ms = std::max(state->timestamp_ms, newest_timestamp_ms);
|
|
}
|
|
}
|
|
} // namespace bwe
|
|
} // namespace testing
|
|
} // namespace webrtc
|
|
|
|
#endif // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
|