/* * Copyright 2018 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/congestion_controller/bbr/test/bbr_printer.h" #include "rtc_base/checks.h" namespace webrtc { BbrStatePrinter::BbrStatePrinter() = default; BbrStatePrinter::~BbrStatePrinter() = default; void BbrStatePrinter::Attach(bbr::BbrNetworkController* controller) { controller_ = controller; } bool BbrStatePrinter::Attached() const { return controller_ != nullptr; } void BbrStatePrinter::PrintHeaders(RtcEventLogOutput* out) { LogWriteFormat( out, "bbr_mode bbr_recovery_state round_trip_count gain_cycle_index"); } void BbrStatePrinter::PrintValues(RtcEventLogOutput* out) { RTC_CHECK(controller_); bbr::BbrNetworkController::DebugState debug(*controller_); LogWriteFormat(out, "%i %i %i %i", debug.mode, debug.recovery_state, static_cast(debug.round_trip_count), debug.gain_cycle_index); } NetworkControlUpdate BbrStatePrinter::GetState(Timestamp at_time) const { RTC_CHECK(controller_); return controller_->CreateRateUpdate(at_time); } BbrDebugFactory::BbrDebugFactory(BbrStatePrinter* printer) : printer_(printer) {} std::unique_ptr BbrDebugFactory::Create( NetworkControllerConfig config) { RTC_CHECK(controller_ == nullptr); auto controller = BbrNetworkControllerFactory::Create(config); controller_ = static_cast(controller.get()); printer_->Attach(controller_); return controller; } bbr::BbrNetworkController* BbrDebugFactory::BbrController() { return controller_; } } // namespace webrtc