Remove BWE logging functionality
BWE logging has as far as I know know been used for a long time. RTC event logs are the prefered method of logging. Removed since it causes some BUILD pain. For debugging the metrics API https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/test/metrics/ can be used instead. Bug: webrtc:343347276 Change-Id: I046b58d880faabfadbc22269b0392fdd644155fc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/352602 Commit-Queue: Per Kjellander <perkj@webrtc.org> Auto-Submit: Per Kjellander <perkj@webrtc.org> Reviewed-by: Jeremy Leconte <jleconte@webrtc.org> Commit-Queue: Jeremy Leconte <jleconte@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42402}
This commit is contained in:
parent
f4ff3f34e0
commit
49c860fd61
@ -8,17 +8,8 @@
|
|||||||
|
|
||||||
import("../../webrtc.gni")
|
import("../../webrtc.gni")
|
||||||
|
|
||||||
config("bwe_test_logging") {
|
|
||||||
if (rtc_enable_bwe_test_logging) {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=1" ]
|
|
||||||
} else {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rtc_library("congestion_controller") {
|
rtc_library("congestion_controller") {
|
||||||
visibility = [ "*" ]
|
visibility = [ "*" ]
|
||||||
configs += [ ":bwe_test_logging" ]
|
|
||||||
sources = [
|
sources = [
|
||||||
"include/receive_side_congestion_controller.h",
|
"include/receive_side_congestion_controller.h",
|
||||||
"receive_side_congestion_controller.cc",
|
"receive_side_congestion_controller.cc",
|
||||||
|
|||||||
@ -8,16 +8,7 @@
|
|||||||
|
|
||||||
import("../../../webrtc.gni")
|
import("../../../webrtc.gni")
|
||||||
|
|
||||||
config("bwe_test_logging") {
|
|
||||||
if (rtc_enable_bwe_test_logging) {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=1" ]
|
|
||||||
} else {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rtc_library("goog_cc") {
|
rtc_library("goog_cc") {
|
||||||
configs += [ ":bwe_test_logging" ]
|
|
||||||
sources = [
|
sources = [
|
||||||
"goog_cc_network_control.cc",
|
"goog_cc_network_control.cc",
|
||||||
"goog_cc_network_control.h",
|
"goog_cc_network_control.h",
|
||||||
@ -103,7 +94,6 @@ rtc_library("alr_detector") {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
rtc_library("estimators") {
|
rtc_library("estimators") {
|
||||||
configs += [ ":bwe_test_logging" ]
|
|
||||||
sources = [
|
sources = [
|
||||||
"acknowledged_bitrate_estimator.cc",
|
"acknowledged_bitrate_estimator.cc",
|
||||||
"acknowledged_bitrate_estimator.h",
|
"acknowledged_bitrate_estimator.h",
|
||||||
@ -166,7 +156,6 @@ rtc_library("loss_based_bwe_v2") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtc_library("loss_based_bwe_v1") {
|
rtc_library("loss_based_bwe_v1") {
|
||||||
configs += [ ":bwe_test_logging" ]
|
|
||||||
sources = [
|
sources = [
|
||||||
"loss_based_bandwidth_estimation.cc",
|
"loss_based_bandwidth_estimation.cc",
|
||||||
"loss_based_bandwidth_estimation.h",
|
"loss_based_bandwidth_estimation.h",
|
||||||
@ -185,7 +174,6 @@ rtc_library("loss_based_bwe_v1") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtc_library("send_side_bwe") {
|
rtc_library("send_side_bwe") {
|
||||||
configs += [ ":bwe_test_logging" ]
|
|
||||||
sources = [
|
sources = [
|
||||||
"send_side_bandwidth_estimation.cc",
|
"send_side_bandwidth_estimation.cc",
|
||||||
"send_side_bandwidth_estimation.h",
|
"send_side_bandwidth_estimation.h",
|
||||||
@ -212,7 +200,6 @@ rtc_library("send_side_bwe") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtc_library("delay_based_bwe") {
|
rtc_library("delay_based_bwe") {
|
||||||
configs += [ ":bwe_test_logging" ]
|
|
||||||
sources = [
|
sources = [
|
||||||
"delay_based_bwe.cc",
|
"delay_based_bwe.cc",
|
||||||
"delay_based_bwe.h",
|
"delay_based_bwe.h",
|
||||||
|
|||||||
@ -20,7 +20,6 @@
|
|||||||
#include "api/units/data_size.h"
|
#include "api/units/data_size.h"
|
||||||
#include "api/units/time_delta.h"
|
#include "api/units/time_delta.h"
|
||||||
#include "api/units/timestamp.h"
|
#include "api/units/timestamp.h"
|
||||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/experiments/field_trial_parser.h"
|
#include "rtc_base/experiments/field_trial_parser.h"
|
||||||
|
|
||||||
@ -114,8 +113,6 @@ void BitrateEstimator::Update(Timestamp at_time, DataSize amount, bool in_alr) {
|
|||||||
std::max(bitrate_estimate_kbps_, estimate_floor_.Get().kbps<float>());
|
std::max(bitrate_estimate_kbps_, estimate_floor_.Get().kbps<float>());
|
||||||
bitrate_estimate_var_ = sample_var * pred_bitrate_estimate_var /
|
bitrate_estimate_var_ = sample_var * pred_bitrate_estimate_var /
|
||||||
(sample_var + pred_bitrate_estimate_var);
|
(sample_var + pred_bitrate_estimate_var);
|
||||||
BWE_TEST_LOGGING_PLOT(1, "acknowledged_bitrate", at_time.ms(),
|
|
||||||
bitrate_estimate_kbps_ * 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float BitrateEstimator::UpdateWindow(int64_t now_ms,
|
float BitrateEstimator::UpdateWindow(int64_t now_ms,
|
||||||
|
|||||||
@ -31,7 +31,6 @@
|
|||||||
#include "modules/congestion_controller/goog_cc/inter_arrival_delta.h"
|
#include "modules/congestion_controller/goog_cc/inter_arrival_delta.h"
|
||||||
#include "modules/congestion_controller/goog_cc/trendline_estimator.h"
|
#include "modules/congestion_controller/goog_cc/trendline_estimator.h"
|
||||||
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
|
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
|
||||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/experiments/struct_parameters_parser.h"
|
#include "rtc_base/experiments/struct_parameters_parser.h"
|
||||||
#include "rtc_base/logging.h"
|
#include "rtc_base/logging.h"
|
||||||
@ -253,8 +252,6 @@ DelayBasedBwe::Result DelayBasedBwe::MaybeUpdateEstimate(
|
|||||||
detector_state != prev_state_) {
|
detector_state != prev_state_) {
|
||||||
DataRate bitrate = result.updated ? result.target_bitrate : prev_bitrate_;
|
DataRate bitrate = result.updated ? result.target_bitrate : prev_bitrate_;
|
||||||
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "target_bitrate_bps", at_time.ms(), bitrate.bps());
|
|
||||||
|
|
||||||
if (event_log_) {
|
if (event_log_) {
|
||||||
event_log_->Log(std::make_unique<RtcEventBweUpdateDelayBased>(
|
event_log_->Log(std::make_unique<RtcEventBweUpdateDelayBased>(
|
||||||
bitrate.bps(), detector_state));
|
bitrate.bps(), detector_state));
|
||||||
|
|||||||
@ -40,7 +40,6 @@
|
|||||||
#include "modules/congestion_controller/goog_cc/probe_controller.h"
|
#include "modules/congestion_controller/goog_cc/probe_controller.h"
|
||||||
#include "modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.h"
|
#include "modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.h"
|
||||||
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
|
#include "modules/remote_bitrate_estimator/include/bwe_defines.h"
|
||||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/experiments/field_trial_parser.h"
|
#include "rtc_base/experiments/field_trial_parser.h"
|
||||||
#include "rtc_base/experiments/rate_control_settings.h"
|
#include "rtc_base/experiments/rate_control_settings.h"
|
||||||
@ -259,8 +258,6 @@ NetworkControlUpdate GoogCcNetworkController::OnRemoteBitrateReport(
|
|||||||
}
|
}
|
||||||
bandwidth_estimation_->UpdateReceiverEstimate(msg.receive_time,
|
bandwidth_estimation_->UpdateReceiverEstimate(msg.receive_time,
|
||||||
msg.bandwidth);
|
msg.bandwidth);
|
||||||
BWE_TEST_LOGGING_PLOT(1, "REMB_kbps", msg.receive_time.ms(),
|
|
||||||
msg.bandwidth.bps() / 1000);
|
|
||||||
return NetworkControlUpdate();
|
return NetworkControlUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,12 +637,6 @@ void GoogCcNetworkController::MaybeTriggerOnNetworkChanged(
|
|||||||
LossBasedState loss_based_state = bandwidth_estimation_->loss_based_state();
|
LossBasedState loss_based_state = bandwidth_estimation_->loss_based_state();
|
||||||
DataRate pushback_target_rate = loss_based_target_rate;
|
DataRate pushback_target_rate = loss_based_target_rate;
|
||||||
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "fraction_loss_%", at_time.ms(),
|
|
||||||
(fraction_loss * 100) / 256);
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "rtt_ms", at_time.ms(), round_trip_time.ms());
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "Target_bitrate_kbps", at_time.ms(),
|
|
||||||
loss_based_target_rate.kbps());
|
|
||||||
|
|
||||||
double cwnd_reduce_ratio = 0.0;
|
double cwnd_reduce_ratio = 0.0;
|
||||||
if (congestion_window_pushback_controller_) {
|
if (congestion_window_pushback_controller_) {
|
||||||
int64_t pushback_rate =
|
int64_t pushback_rate =
|
||||||
|
|||||||
@ -26,7 +26,6 @@
|
|||||||
#include "api/field_trials_view.h"
|
#include "api/field_trials_view.h"
|
||||||
#include "api/network_state_predictor.h"
|
#include "api/network_state_predictor.h"
|
||||||
#include "api/transport/bandwidth_usage.h"
|
#include "api/transport/bandwidth_usage.h"
|
||||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/experiments/struct_parameters_parser.h"
|
#include "rtc_base/experiments/struct_parameters_parser.h"
|
||||||
#include "rtc_base/logging.h"
|
#include "rtc_base/logging.h"
|
||||||
@ -211,12 +210,8 @@ void TrendlineEstimator::UpdateTrendline(double recv_delta_ms,
|
|||||||
|
|
||||||
// Exponential backoff filter.
|
// Exponential backoff filter.
|
||||||
accumulated_delay_ += delta_ms;
|
accumulated_delay_ += delta_ms;
|
||||||
BWE_TEST_LOGGING_PLOT(1, "accumulated_delay_ms", arrival_time_ms,
|
|
||||||
accumulated_delay_);
|
|
||||||
smoothed_delay_ = smoothing_coef_ * smoothed_delay_ +
|
smoothed_delay_ = smoothing_coef_ * smoothed_delay_ +
|
||||||
(1 - smoothing_coef_) * accumulated_delay_;
|
(1 - smoothing_coef_) * accumulated_delay_;
|
||||||
BWE_TEST_LOGGING_PLOT(1, "smoothed_delay_ms", arrival_time_ms,
|
|
||||||
smoothed_delay_);
|
|
||||||
|
|
||||||
// Maintain packet window
|
// Maintain packet window
|
||||||
delay_hist_.emplace_back(
|
delay_hist_.emplace_back(
|
||||||
@ -251,7 +246,6 @@ void TrendlineEstimator::UpdateTrendline(double recv_delta_ms,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BWE_TEST_LOGGING_PLOT(1, "trendline_slope", arrival_time_ms, trend);
|
|
||||||
|
|
||||||
Detect(trend, send_delta_ms, arrival_time_ms);
|
Detect(trend, send_delta_ms, arrival_time_ms);
|
||||||
}
|
}
|
||||||
@ -284,8 +278,6 @@ void TrendlineEstimator::Detect(double trend, double ts_delta, int64_t now_ms) {
|
|||||||
const double modified_trend =
|
const double modified_trend =
|
||||||
std::min(num_of_deltas_, kMinNumDeltas) * trend * threshold_gain_;
|
std::min(num_of_deltas_, kMinNumDeltas) * trend * threshold_gain_;
|
||||||
prev_modified_trend_ = modified_trend;
|
prev_modified_trend_ = modified_trend;
|
||||||
BWE_TEST_LOGGING_PLOT(1, "T", now_ms, modified_trend);
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "threshold", now_ms, threshold_);
|
|
||||||
if (modified_trend > threshold_) {
|
if (modified_trend > threshold_) {
|
||||||
if (time_over_using_ == -1) {
|
if (time_over_using_ == -1) {
|
||||||
// Initialize the timer. Assume that we've been
|
// Initialize the timer. Assume that we've been
|
||||||
|
|||||||
@ -8,14 +8,6 @@
|
|||||||
|
|
||||||
import("../../../webrtc.gni")
|
import("../../../webrtc.gni")
|
||||||
|
|
||||||
config("bwe_test_logging") {
|
|
||||||
if (rtc_enable_bwe_test_logging) {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=1" ]
|
|
||||||
} else {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rtc_library("control_handler") {
|
rtc_library("control_handler") {
|
||||||
visibility = [ "*" ]
|
visibility = [ "*" ]
|
||||||
sources = [
|
sources = [
|
||||||
|
|||||||
@ -28,7 +28,6 @@ rtc_library("remote_bitrate_estimator") {
|
|||||||
"remote_bitrate_estimator_single_stream.cc",
|
"remote_bitrate_estimator_single_stream.cc",
|
||||||
"remote_bitrate_estimator_single_stream.h",
|
"remote_bitrate_estimator_single_stream.h",
|
||||||
"rtp_transport_feedback_generator.h",
|
"rtp_transport_feedback_generator.h",
|
||||||
"test/bwe_test_logging.h",
|
|
||||||
"transport_sequence_number_feedback_generator.cc",
|
"transport_sequence_number_feedback_generator.cc",
|
||||||
"transport_sequence_number_feedback_generator.h",
|
"transport_sequence_number_feedback_generator.h",
|
||||||
]
|
]
|
||||||
@ -61,14 +60,6 @@ rtc_library("remote_bitrate_estimator") {
|
|||||||
"//third_party/abseil-cpp/absl/strings",
|
"//third_party/abseil-cpp/absl/strings",
|
||||||
"//third_party/abseil-cpp/absl/types:optional",
|
"//third_party/abseil-cpp/absl/types:optional",
|
||||||
]
|
]
|
||||||
|
|
||||||
if (rtc_enable_bwe_test_logging) {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=1" ]
|
|
||||||
sources += [ "test/bwe_test_logging.cc" ]
|
|
||||||
deps += [ "../../rtc_base:platform_thread" ]
|
|
||||||
} else {
|
|
||||||
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!build_with_chromium) {
|
if (!build_with_chromium) {
|
||||||
|
|||||||
@ -16,7 +16,6 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/numerics/safe_minmax.h"
|
#include "rtc_base/numerics/safe_minmax.h"
|
||||||
|
|
||||||
@ -45,8 +44,6 @@ BandwidthUsage OveruseDetector::Detect(double offset,
|
|||||||
return BandwidthUsage::kBwNormal;
|
return BandwidthUsage::kBwNormal;
|
||||||
}
|
}
|
||||||
const double T = std::min(num_of_deltas, kMaxNumDeltas) * offset;
|
const double T = std::min(num_of_deltas, kMaxNumDeltas) * offset;
|
||||||
BWE_TEST_LOGGING_PLOT(1, "T", now_ms, T);
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "threshold", now_ms, threshold_);
|
|
||||||
if (T > threshold_) {
|
if (T > threshold_) {
|
||||||
if (time_over_using_ == -1) {
|
if (time_over_using_ == -1) {
|
||||||
// Initialize the timer. Assume that we've been
|
// Initialize the timer. Assume that we've been
|
||||||
|
|||||||
@ -16,7 +16,6 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "api/transport/bandwidth_usage.h"
|
#include "api/transport/bandwidth_usage.h"
|
||||||
#include "modules/remote_bitrate_estimator/test/bwe_test_logging.h"
|
|
||||||
#include "rtc_base/logging.h"
|
#include "rtc_base/logging.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -36,7 +35,6 @@ void OveruseEstimator::Update(int64_t t_delta,
|
|||||||
int64_t now_ms) {
|
int64_t now_ms) {
|
||||||
const double min_frame_period = UpdateMinFramePeriod(ts_delta);
|
const double min_frame_period = UpdateMinFramePeriod(ts_delta);
|
||||||
const double t_ts_delta = t_delta - ts_delta;
|
const double t_ts_delta = t_delta - ts_delta;
|
||||||
BWE_TEST_LOGGING_PLOT(1, "dm_ms", now_ms, t_ts_delta);
|
|
||||||
double fs_delta = size_delta;
|
double fs_delta = size_delta;
|
||||||
|
|
||||||
++num_of_deltas_;
|
++num_of_deltas_;
|
||||||
@ -59,8 +57,6 @@ void OveruseEstimator::Update(int64_t t_delta,
|
|||||||
const double Eh[2] = {E_[0][0] * h[0] + E_[0][1] * h[1],
|
const double Eh[2] = {E_[0][0] * h[0] + E_[0][1] * h[1],
|
||||||
E_[1][0] * h[0] + E_[1][1] * h[1]};
|
E_[1][0] * h[0] + E_[1][1] * h[1]};
|
||||||
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "d_ms", now_ms, slope_ * h[0] - offset_);
|
|
||||||
|
|
||||||
const double residual = t_ts_delta - slope_ * h[0] - offset_;
|
const double residual = t_ts_delta - slope_ * h[0] - offset_;
|
||||||
|
|
||||||
const bool in_stable_state =
|
const bool in_stable_state =
|
||||||
@ -104,11 +100,6 @@ void OveruseEstimator::Update(int64_t t_delta,
|
|||||||
slope_ = slope_ + K[0] * residual;
|
slope_ = slope_ + K[0] * residual;
|
||||||
prev_offset_ = offset_;
|
prev_offset_ = offset_;
|
||||||
offset_ = offset_ + K[1] * residual;
|
offset_ = offset_ + K[1] * residual;
|
||||||
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "kc", now_ms, K[0]);
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "km", now_ms, K[1]);
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "slope_1/bps", now_ms, slope_);
|
|
||||||
BWE_TEST_LOGGING_PLOT(1, "var_noise", now_ms, var_noise_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double OveruseEstimator::UpdateMinFramePeriod(double ts_delta) {
|
double OveruseEstimator::UpdateMinFramePeriod(double ts_delta) {
|
||||||
|
|||||||
@ -1,262 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 <inttypes.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include "rtc_base/checks.h"
|
|
||||||
#include "rtc_base/platform_thread.h"
|
|
||||||
#include "rtc_base/strings/string_builder.h"
|
|
||||||
|
|
||||||
namespace webrtc {
|
|
||||||
namespace testing {
|
|
||||||
namespace bwe {
|
|
||||||
|
|
||||||
static std::string ToString(uint32_t v) {
|
|
||||||
rtc::StringBuilder ss;
|
|
||||||
ss << v;
|
|
||||||
return ss.Release();
|
|
||||||
}
|
|
||||||
|
|
||||||
Logging::ThreadState::ThreadState() = default;
|
|
||||||
Logging::ThreadState::~ThreadState() = default;
|
|
||||||
|
|
||||||
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() {
|
|
||||||
static Logging* logging = new Logging();
|
|
||||||
return logging;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Logging::SetGlobalContext(uint32_t name) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
thread_map_[rtc::CurrentThreadId()].global_state.tag = ToString(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Logging::SetGlobalContext(const std::string& name) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
thread_map_[rtc::CurrentThreadId()].global_state.tag = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Logging::SetGlobalContext(const char* name) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
thread_map_[rtc::CurrentThreadId()].global_state.tag = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Logging::SetGlobalEnable(bool enabled) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
thread_map_[rtc::CurrentThreadId()].global_state.enabled = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Logging::Log(const char format[], ...) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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::~Logging() = default;
|
|
||||||
|
|
||||||
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) {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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() {
|
|
||||||
MutexLock lock(&mutex_);
|
|
||||||
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
|
|
||||||
@ -1,360 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_BWE_TEST_LOGGING_H_
|
|
||||||
#define MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_BWE_TEST_LOGGING_H_
|
|
||||||
|
|
||||||
// To enable BWE logging, run this command from trunk/ :
|
|
||||||
// build/gyp_chromium --depth=. webrtc/modules/modules.gyp
|
|
||||||
// -Denable_bwe_test_logging=1
|
|
||||||
#ifndef BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
|
|
||||||
#define BWE_TEST_LOGGING_COMPILE_TIME_ENABLE 0
|
|
||||||
#endif // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
|
|
||||||
|
|
||||||
// BWE logging allows you to insert dynamically named log/plot points in the
|
|
||||||
// call tree. E.g. the function:
|
|
||||||
// void f1() {
|
|
||||||
// BWE_TEST_LOGGING_TIME(clock_->TimeInMilliseconds());
|
|
||||||
// BWE_TEST_LOGGING_CONTEXT("stream");
|
|
||||||
// for (uint32_t i=0; i<4; ++i) {
|
|
||||||
// BWE_TEST_LOGGING_ENABLE(i & 1);
|
|
||||||
// BWE_TEST_LOGGING_CONTEXT(i);
|
|
||||||
// BWE_TEST_LOGGING_LOG1("weight", "%f tonnes", weights_[i]);
|
|
||||||
// for (float j=0.0f; j<1.0; j+=0.4f) {
|
|
||||||
// BWE_TEST_LOGGING_PLOT(0, "bps", -1, j);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Might produce the output:
|
|
||||||
// stream_00000001_weight 13.000000 tonnes
|
|
||||||
// PLOT stream_00000001_bps 1.000000 0.000000
|
|
||||||
// PLOT stream_00000001_bps 1.000000 0.400000
|
|
||||||
// PLOT stream_00000001_bps 1.000000 0.800000
|
|
||||||
// stream_00000003_weight 39.000000 tonnes
|
|
||||||
// PLOT stream_00000003_bps 1.000000 0.000000
|
|
||||||
// PLOT stream_00000003_bps 1.000000 0.400000
|
|
||||||
// PLOT stream_00000003_bps 1.000000 0.800000
|
|
||||||
//
|
|
||||||
// Log *contexts* are names concatenated with '_' between them, with the name
|
|
||||||
// of the logged/plotted string/value last. Plot *time* is inherited down the
|
|
||||||
// tree. A branch is enabled by default but can be *disabled* to reduce output.
|
|
||||||
// The difference between the RTC_LOG and PLOT macros is that PLOT prefixes the
|
|
||||||
// line so it can be easily filtered, plus it outputs the current time.
|
|
||||||
|
|
||||||
#if !(BWE_TEST_LOGGING_COMPILE_TIME_ENABLE)
|
|
||||||
|
|
||||||
// Set a thread-global base logging context. This name will be prepended to all
|
|
||||||
// hierarchical contexts.
|
|
||||||
// `name` is a char*, std::string or uint32_t to name the context.
|
|
||||||
#define BWE_TEST_LOGGING_GLOBAL_CONTEXT(name)
|
|
||||||
|
|
||||||
// Thread-globally allow/disallow logging.
|
|
||||||
// `enable` is expected to be a bool.
|
|
||||||
#define BWE_TEST_LOGGING_GLOBAL_ENABLE(enabled)
|
|
||||||
|
|
||||||
// Insert a (hierarchical) logging context.
|
|
||||||
// `name` is a char*, std::string or uint32_t to name the context.
|
|
||||||
#define BWE_TEST_LOGGING_CONTEXT(name)
|
|
||||||
|
|
||||||
// Allow/disallow logging down the call tree from this point. Logging must be
|
|
||||||
// enabled all the way to the root of the call tree to take place.
|
|
||||||
// `enable` is expected to be a bool.
|
|
||||||
#define BWE_TEST_LOGGING_ENABLE(enabled)
|
|
||||||
|
|
||||||
// Set current time (only affects PLOT output). Down the call tree, the latest
|
|
||||||
// time set always takes precedence.
|
|
||||||
// `time` is an int64_t time in ms, or -1 to inherit time from previous context.
|
|
||||||
#define BWE_TEST_LOGGING_TIME(time)
|
|
||||||
|
|
||||||
// Print to stdout, e.g.:
|
|
||||||
// Context1_Context2_Name printf-formated-string
|
|
||||||
// `name` is a char*, std::string or uint32_t to name the log line.
|
|
||||||
// `format` is a printf format string.
|
|
||||||
// |_1...| are arguments for printf.
|
|
||||||
#define BWE_TEST_LOGGING_LOG1(name, format, _1)
|
|
||||||
#define BWE_TEST_LOGGING_LOG2(name, format, _1, _2)
|
|
||||||
#define BWE_TEST_LOGGING_LOG3(name, format, _1, _2, _3)
|
|
||||||
#define BWE_TEST_LOGGING_LOG4(name, format, _1, _2, _3, _4)
|
|
||||||
#define BWE_TEST_LOGGING_LOG5(name, format, _1, _2, _3, _4, _5)
|
|
||||||
|
|
||||||
// Print to stdout in tab-separated format suitable for plotting, e.g.:
|
|
||||||
// PLOT figure Context1_Context2_Name time value
|
|
||||||
// `figure` is a figure id. Different figures are plotted in different windows.
|
|
||||||
// `name` is a char*, std::string or uint32_t to name the plotted value.
|
|
||||||
// `time` is an int64_t time in ms, or -1 to inherit time from previous context.
|
|
||||||
// `value` is a double precision float to be plotted.
|
|
||||||
// `ssrc` identifies the source of a stream
|
|
||||||
// `alg_name` is an optional argument, a string
|
|
||||||
#define BWE_TEST_LOGGING_PLOT(figure, name, time, value)
|
|
||||||
#define BWE_TEST_LOGGING_PLOT_WITH_NAME(figure, name, time, value, alg_name)
|
|
||||||
#define BWE_TEST_LOGGING_PLOT_WITH_SSRC(figure, name, time, value, ssrc)
|
|
||||||
#define BWE_TEST_LOGGING_PLOT_WITH_NAME_AND_SSRC(figure, name, time, value, \
|
|
||||||
ssrc, alg_name)
|
|
||||||
|
|
||||||
// Print to stdout in tab-separated format suitable for plotting, e.g.:
|
|
||||||
// BAR figure Context1_Context2_Name x_left width value
|
|
||||||
// `figure` is a figure id. Different figures are plotted in different windows.
|
|
||||||
// `name` is a char*, std::string or uint32_t to name the plotted value.
|
|
||||||
// `value` is a double precision float to be plotted.
|
|
||||||
// `ylow` and `yhigh` are double precision float for the error line.
|
|
||||||
// `title` is a string and refers to the error label.
|
|
||||||
// `ymax` is a double precision float for the limit horizontal line.
|
|
||||||
// `limit_title` is a string and refers to the limit label.
|
|
||||||
#define BWE_TEST_LOGGING_BAR(figure, name, value, flow_id)
|
|
||||||
#define BWE_TEST_LOGGING_ERRORBAR(figure, name, value, ylow, yhigh, \
|
|
||||||
error_title, flow_id)
|
|
||||||
#define BWE_TEST_LOGGING_LIMITERRORBAR( \
|
|
||||||
figure, name, value, ylow, yhigh, error_title, ymax, limit_title, flow_id)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_BASELINEBAR(figure, name, value, flow_id)
|
|
||||||
|
|
||||||
// `num_flows` is an integer refering to the number of RMCAT flows in the
|
|
||||||
// scenario.
|
|
||||||
// Define `x_label` and `y_label` for plots.
|
|
||||||
#define BWE_TEST_LOGGING_LABEL(figure, x_label, y_label, num_flows)
|
|
||||||
|
|
||||||
#else // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
#include <memory>
|
|
||||||
#include <stack>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "rtc_base/synchronization/mutex.h"
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_GLOBAL_CONTEXT(name) \
|
|
||||||
do { \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->SetGlobalContext(name); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_GLOBAL_ENABLE(enabled) \
|
|
||||||
do { \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->SetGlobalEnable(enabled); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define __BWE_TEST_LOGGING_CONTEXT_NAME(ctx, line) ctx##line
|
|
||||||
#define __BWE_TEST_LOGGING_CONTEXT_DECLARE(ctx, line, name, time, enabled) \
|
|
||||||
webrtc::testing::bwe::Logging::Context __BWE_TEST_LOGGING_CONTEXT_NAME( \
|
|
||||||
ctx, line)(name, time, enabled)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_CONTEXT(name) \
|
|
||||||
__BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __LINE__, name, -1, true)
|
|
||||||
#define BWE_TEST_LOGGING_ENABLE(enabled) \
|
|
||||||
__BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __LINE__, "", -1, \
|
|
||||||
static_cast<bool>(enabled))
|
|
||||||
#define BWE_TEST_LOGGING_TIME(time) \
|
|
||||||
__BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __LINE__, "", \
|
|
||||||
static_cast<int64_t>(time), true)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_LOG1(name, format, _1) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1); \
|
|
||||||
} while (0)
|
|
||||||
#define BWE_TEST_LOGGING_LOG2(name, format, _1, _2) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2); \
|
|
||||||
} while (0)
|
|
||||||
#define BWE_TEST_LOGGING_LOG3(name, format, _1, _2, _3) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2, _3); \
|
|
||||||
} while (0)
|
|
||||||
#define BWE_TEST_LOGGING_LOG4(name, format, _1, _2, _3, _4) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2, _3, _4); \
|
|
||||||
} while (0)
|
|
||||||
#define BWE_TEST_LOGGING_LOG5(name, format, _1, _2, _3, _4, _5) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Log(format, _1, _2, _3, _4, \
|
|
||||||
_5); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_PLOT(figure, name, time, value) \
|
|
||||||
do { \
|
|
||||||
__BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __PLOT__, name, \
|
|
||||||
static_cast<int64_t>(time), true); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Plot(figure, name, value); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_PLOT_WITH_NAME(figure, name, time, value, alg_name) \
|
|
||||||
do { \
|
|
||||||
__BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __PLOT__, name, \
|
|
||||||
static_cast<int64_t>(time), true); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Plot(figure, name, value, \
|
|
||||||
alg_name); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_PLOT_WITH_SSRC(figure, name, time, value, ssrc) \
|
|
||||||
do { \
|
|
||||||
__BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __PLOT__, name, \
|
|
||||||
static_cast<int64_t>(time), true); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Plot(figure, name, value, \
|
|
||||||
ssrc); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_PLOT_WITH_NAME_AND_SSRC(figure, name, time, value, \
|
|
||||||
ssrc, alg_name) \
|
|
||||||
do { \
|
|
||||||
__BWE_TEST_LOGGING_CONTEXT_DECLARE(__bwe_log_, __PLOT__, name, \
|
|
||||||
static_cast<int64_t>(time), true); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->Plot(figure, name, value, \
|
|
||||||
ssrc, alg_name); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_BAR(figure, name, value, flow_id) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->PlotBar(figure, name, value, \
|
|
||||||
flow_id); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_BASELINEBAR(figure, name, value, flow_id) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->PlotBaselineBar( \
|
|
||||||
figure, name, value, flow_id); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_ERRORBAR(figure, name, value, ylow, yhigh, title, \
|
|
||||||
flow_id) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->PlotErrorBar( \
|
|
||||||
figure, name, value, ylow, yhigh, title, flow_id); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_LIMITERRORBAR( \
|
|
||||||
figure, name, value, ylow, yhigh, error_title, ymax, limit_title, flow_id) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(name); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->PlotLimitErrorBar( \
|
|
||||||
figure, name, value, ylow, yhigh, error_title, ymax, limit_title, \
|
|
||||||
flow_id); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define BWE_TEST_LOGGING_LABEL(figure, title, y_label, num_flows) \
|
|
||||||
do { \
|
|
||||||
BWE_TEST_LOGGING_CONTEXT(title); \
|
|
||||||
webrtc::testing::bwe::Logging::GetInstance()->PlotLabel( \
|
|
||||||
figure, title, y_label, num_flows); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
namespace webrtc {
|
|
||||||
namespace testing {
|
|
||||||
namespace bwe {
|
|
||||||
|
|
||||||
class Logging {
|
|
||||||
public:
|
|
||||||
class Context {
|
|
||||||
public:
|
|
||||||
Context(uint32_t name, int64_t timestamp_ms, bool enabled);
|
|
||||||
Context(const std::string& name, int64_t timestamp_ms, bool enabled);
|
|
||||||
Context(const char* name, int64_t timestamp_ms, bool enabled);
|
|
||||||
|
|
||||||
Context() = delete;
|
|
||||||
Context(const Context&) = delete;
|
|
||||||
Context& operator=(const Context&) = delete;
|
|
||||||
~Context();
|
|
||||||
};
|
|
||||||
|
|
||||||
static Logging* GetInstance();
|
|
||||||
|
|
||||||
void SetGlobalContext(uint32_t name);
|
|
||||||
void SetGlobalContext(const std::string& name);
|
|
||||||
void SetGlobalContext(const char* name);
|
|
||||||
void SetGlobalEnable(bool enabled);
|
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
// Note: Implicit `this` argument counts as the first argument.
|
|
||||||
__attribute__((__format__(__printf__, 2, 3)))
|
|
||||||
#endif
|
|
||||||
void
|
|
||||||
Log(const char format[], ...);
|
|
||||||
void Plot(int figure, const std::string& name, double value);
|
|
||||||
void Plot(int figure,
|
|
||||||
const std::string& name,
|
|
||||||
double value,
|
|
||||||
const std::string& alg_name);
|
|
||||||
void Plot(int figure, const std::string& name, double value, uint32_t ssrc);
|
|
||||||
void Plot(int figure,
|
|
||||||
const std::string& name,
|
|
||||||
double value,
|
|
||||||
uint32_t ssrc,
|
|
||||||
const std::string& alg_name);
|
|
||||||
void PlotBar(int figure, const std::string& name, double value, int flow_id);
|
|
||||||
void PlotBaselineBar(int figure,
|
|
||||||
const std::string& name,
|
|
||||||
double value,
|
|
||||||
int flow_id);
|
|
||||||
void PlotErrorBar(int figure,
|
|
||||||
const std::string& name,
|
|
||||||
double value,
|
|
||||||
double ylow,
|
|
||||||
double yhigh,
|
|
||||||
const std::string& error_title,
|
|
||||||
int flow_id);
|
|
||||||
|
|
||||||
void 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);
|
|
||||||
void PlotLabel(int figure,
|
|
||||||
const std::string& title,
|
|
||||||
const std::string& y_label,
|
|
||||||
int num_flows);
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct State {
|
|
||||||
State();
|
|
||||||
State(const std::string& new_tag, int64_t timestamp_ms, bool enabled);
|
|
||||||
void MergePrevious(const State& previous);
|
|
||||||
|
|
||||||
std::string tag;
|
|
||||||
int64_t timestamp_ms;
|
|
||||||
bool enabled;
|
|
||||||
};
|
|
||||||
struct ThreadState {
|
|
||||||
ThreadState();
|
|
||||||
~ThreadState();
|
|
||||||
State global_state;
|
|
||||||
std::stack<State> stack;
|
|
||||||
};
|
|
||||||
typedef std::map<uint32_t, ThreadState> ThreadMap;
|
|
||||||
|
|
||||||
Logging();
|
|
||||||
~Logging();
|
|
||||||
|
|
||||||
Logging(const Logging&) = delete;
|
|
||||||
Logging& operator=(const Logging&) = delete;
|
|
||||||
|
|
||||||
void PushState(const std::string& append_to_tag,
|
|
||||||
int64_t timestamp_ms,
|
|
||||||
bool enabled);
|
|
||||||
void PopState();
|
|
||||||
|
|
||||||
Mutex mutex_;
|
|
||||||
ThreadMap thread_map_;
|
|
||||||
};
|
|
||||||
} // namespace bwe
|
|
||||||
} // namespace testing
|
|
||||||
} // namespace webrtc
|
|
||||||
|
|
||||||
#endif // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
|
|
||||||
#endif // MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_BWE_TEST_LOGGING_H_
|
|
||||||
@ -34,7 +34,6 @@
|
|||||||
'Android32': 'android_release_bot_arm',
|
'Android32': 'android_release_bot_arm',
|
||||||
'Android32 (dbg)': 'android_debug_static_bot_arm',
|
'Android32 (dbg)': 'android_debug_static_bot_arm',
|
||||||
'Android32 (more configs)': {
|
'Android32 (more configs)': {
|
||||||
'bwe_test_logging': 'bwe_test_logging_android_arm',
|
|
||||||
'dummy_audio_file_devices_no_protobuf':
|
'dummy_audio_file_devices_no_protobuf':
|
||||||
'dummy_audio_file_devices_no_protobuf_android_arm',
|
'dummy_audio_file_devices_no_protobuf_android_arm',
|
||||||
'rtti_no_sctp': 'rtti_no_sctp_android_arm',
|
'rtti_no_sctp': 'rtti_no_sctp_android_arm',
|
||||||
@ -55,7 +54,6 @@
|
|||||||
# "More configs" bots will build all the following configs in sequence.
|
# "More configs" bots will build all the following configs in sequence.
|
||||||
# This is using MB's "phases" feature.
|
# This is using MB's "phases" feature.
|
||||||
'Linux (more configs)': {
|
'Linux (more configs)': {
|
||||||
'bwe_test_logging': 'bwe_test_logging_x64',
|
|
||||||
'dummy_audio_file_devices_no_protobuf':
|
'dummy_audio_file_devices_no_protobuf':
|
||||||
'dummy_audio_file_devices_no_protobuf_x64',
|
'dummy_audio_file_devices_no_protobuf_x64',
|
||||||
'rtti_no_sctp': 'rtti_no_sctp_x64',
|
'rtti_no_sctp': 'rtti_no_sctp_x64',
|
||||||
@ -86,7 +84,6 @@
|
|||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
'Win (more configs)': {
|
'Win (more configs)': {
|
||||||
'bwe_test_logging': 'bwe_test_logging_x86',
|
|
||||||
'dummy_audio_file_devices_no_protobuf':
|
'dummy_audio_file_devices_no_protobuf':
|
||||||
'dummy_audio_file_devices_no_protobuf_x86',
|
'dummy_audio_file_devices_no_protobuf_x86',
|
||||||
'rtti_no_sctp': 'rtti_no_sctp_no_unicode_win_x86',
|
'rtti_no_sctp': 'rtti_no_sctp_no_unicode_win_x86',
|
||||||
@ -142,7 +139,6 @@
|
|||||||
'android_arm64_rel': 'android_release_bot_arm64',
|
'android_arm64_rel': 'android_release_bot_arm64',
|
||||||
'android_arm_dbg': 'android_debug_static_bot_arm',
|
'android_arm_dbg': 'android_debug_static_bot_arm',
|
||||||
'android_arm_more_configs': {
|
'android_arm_more_configs': {
|
||||||
'bwe_test_logging': 'bwe_test_logging_android_arm',
|
|
||||||
'dummy_audio_file_devices_no_protobuf':
|
'dummy_audio_file_devices_no_protobuf':
|
||||||
'dummy_audio_file_devices_no_protobuf_android_arm',
|
'dummy_audio_file_devices_no_protobuf_android_arm',
|
||||||
'rtti_no_sctp': 'rtti_no_sctp_android_arm',
|
'rtti_no_sctp': 'rtti_no_sctp_android_arm',
|
||||||
@ -181,7 +177,6 @@
|
|||||||
'linux_dbg': 'debug_bot_x64',
|
'linux_dbg': 'debug_bot_x64',
|
||||||
'linux_libfuzzer_rel': 'libfuzzer_asan_release_bot_x64',
|
'linux_libfuzzer_rel': 'libfuzzer_asan_release_bot_x64',
|
||||||
'linux_more_configs': {
|
'linux_more_configs': {
|
||||||
'bwe_test_logging': 'bwe_test_logging_x64',
|
|
||||||
'dummy_audio_file_devices_no_protobuf':
|
'dummy_audio_file_devices_no_protobuf':
|
||||||
'dummy_audio_file_devices_no_protobuf_x64',
|
'dummy_audio_file_devices_no_protobuf_x64',
|
||||||
'rtti_no_sctp': 'rtti_no_sctp_x64',
|
'rtti_no_sctp': 'rtti_no_sctp_x64',
|
||||||
@ -218,7 +213,6 @@
|
|||||||
'win_x86_clang_dbg': 'win_clang_debug_bot_x86',
|
'win_x86_clang_dbg': 'win_clang_debug_bot_x86',
|
||||||
'win_x86_clang_rel': 'win_clang_release_bot_x86',
|
'win_x86_clang_rel': 'win_clang_release_bot_x86',
|
||||||
'win_x86_more_configs': {
|
'win_x86_more_configs': {
|
||||||
'bwe_test_logging': 'bwe_test_logging_x86',
|
|
||||||
'dummy_audio_file_devices_no_protobuf':
|
'dummy_audio_file_devices_no_protobuf':
|
||||||
'dummy_audio_file_devices_no_protobuf_x86',
|
'dummy_audio_file_devices_no_protobuf_x86',
|
||||||
'rtti_no_sctp': 'rtti_no_sctp_no_unicode_win_x86',
|
'rtti_no_sctp': 'rtti_no_sctp_no_unicode_win_x86',
|
||||||
@ -294,10 +288,6 @@
|
|||||||
'x64',
|
'x64',
|
||||||
'h265',
|
'h265',
|
||||||
],
|
],
|
||||||
'bwe_test_logging_android_arm':
|
|
||||||
['android', 'debug_static_bot', 'arm', 'bwe_test_logging'],
|
|
||||||
'bwe_test_logging_x64': ['debug_bot', 'x64', 'bwe_test_logging'],
|
|
||||||
'bwe_test_logging_x86': ['debug_bot', 'x86', 'bwe_test_logging'],
|
|
||||||
'code_coverage_bot_x64': [
|
'code_coverage_bot_x64': [
|
||||||
'openh264', 'release_bot', 'x64', 'code_coverage',
|
'openh264', 'release_bot', 'x64', 'code_coverage',
|
||||||
'partial_code_coverage_instrumentation', 'h265'
|
'partial_code_coverage_instrumentation', 'h265'
|
||||||
@ -441,9 +431,6 @@
|
|||||||
'asan': {
|
'asan': {
|
||||||
'gn_args': 'is_asan=true',
|
'gn_args': 'is_asan=true',
|
||||||
},
|
},
|
||||||
'bwe_test_logging': {
|
|
||||||
'gn_args': 'rtc_enable_bwe_test_logging=true',
|
|
||||||
},
|
|
||||||
# is_clang=true by default, this is only to guard from upstream changes.
|
# is_clang=true by default, this is only to guard from upstream changes.
|
||||||
'clang': {
|
'clang': {
|
||||||
'gn_args': 'is_clang=true',
|
'gn_args': 'is_clang=true',
|
||||||
|
|||||||
@ -135,9 +135,6 @@ declare_args() {
|
|||||||
# Selects whether the audio processing module should be excluded.
|
# Selects whether the audio processing module should be excluded.
|
||||||
rtc_exclude_audio_processing_module = false
|
rtc_exclude_audio_processing_module = false
|
||||||
|
|
||||||
# Set this to true to enable BWE test logging.
|
|
||||||
rtc_enable_bwe_test_logging = false
|
|
||||||
|
|
||||||
# Set this to false to skip building examples.
|
# Set this to false to skip building examples.
|
||||||
rtc_build_examples = true
|
rtc_build_examples = true
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user