• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2018 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 #ifndef MODULES_CONGESTION_CONTROLLER_GOOG_CC_TEST_GOOG_CC_PRINTER_H_
11 #define MODULES_CONGESTION_CONTROLLER_GOOG_CC_TEST_GOOG_CC_PRINTER_H_
12 
13 #include <deque>
14 #include <memory>
15 #include <string>
16 
17 #include "api/rtc_event_log/rtc_event_log.h"
18 #include "api/transport/goog_cc_factory.h"
19 #include "api/transport/network_control.h"
20 #include "api/transport/network_types.h"
21 #include "api/units/timestamp.h"
22 #include "modules/congestion_controller/goog_cc/goog_cc_network_control.h"
23 #include "test/logging/log_writer.h"
24 
25 namespace webrtc {
26 
27 class FieldLogger {
28  public:
29   virtual ~FieldLogger() = default;
30   virtual const std::string& name() const = 0;
31   virtual void WriteValue(RtcEventLogOutput* out) = 0;
32 };
33 
34 class GoogCcStatePrinter {
35  public:
36   GoogCcStatePrinter();
37   GoogCcStatePrinter(const GoogCcStatePrinter&) = delete;
38   GoogCcStatePrinter& operator=(const GoogCcStatePrinter&) = delete;
39   ~GoogCcStatePrinter();
40 
41   void PrintHeaders(RtcEventLogOutput* log);
42   void PrintState(RtcEventLogOutput* log,
43                   GoogCcNetworkController* controller,
44                   Timestamp at_time);
45 
46  private:
47   std::deque<FieldLogger*> CreateLoggers();
48   std::deque<std::unique_ptr<FieldLogger>> loggers_;
49 
50   GoogCcNetworkController* controller_ = nullptr;
51   TargetTransferRate target_;
52   PacerConfig pacing_;
53   DataSize congestion_window_ = DataSize::PlusInfinity();
54   NetworkStateEstimate est_;
55 };
56 
57 class GoogCcDebugFactory : public GoogCcNetworkControllerFactory {
58  public:
59   GoogCcDebugFactory();
60   explicit GoogCcDebugFactory(GoogCcFactoryConfig config);
61   std::unique_ptr<NetworkControllerInterface> Create(
62       NetworkControllerConfig config) override;
63 
64   void PrintState(const Timestamp at_time);
65 
66   void AttachWriter(std::unique_ptr<RtcEventLogOutput> log_writer);
67 
68  private:
69   GoogCcStatePrinter printer_;
70   GoogCcNetworkController* controller_ = nullptr;
71   std::unique_ptr<RtcEventLogOutput> log_writer_;
72 };
73 }  // namespace webrtc
74 
75 #endif  // MODULES_CONGESTION_CONTROLLER_GOOG_CC_TEST_GOOG_CC_PRINTER_H_
76