summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/rtc_tools/rtc_event_log_visualizer/log_simulation.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/rtc_tools/rtc_event_log_visualizer/log_simulation.h')
-rw-r--r--third_party/libwebrtc/rtc_tools/rtc_event_log_visualizer/log_simulation.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/third_party/libwebrtc/rtc_tools/rtc_event_log_visualizer/log_simulation.h b/third_party/libwebrtc/rtc_tools/rtc_event_log_visualizer/log_simulation.h
new file mode 100644
index 0000000000..15ed25388c
--- /dev/null
+++ b/third_party/libwebrtc/rtc_tools/rtc_event_log_visualizer/log_simulation.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2019 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 RTC_TOOLS_RTC_EVENT_LOG_VISUALIZER_LOG_SIMULATION_H_
+#define RTC_TOOLS_RTC_EVENT_LOG_VISUALIZER_LOG_SIMULATION_H_
+
+#include <deque>
+#include <functional>
+#include <map>
+#include <memory>
+#include <vector>
+
+#include "api/transport/network_control.h"
+#include "logging/rtc_event_log/rtc_event_log_parser.h"
+#include "modules/congestion_controller/rtp/transport_feedback_adapter.h"
+
+namespace webrtc {
+
+class LogBasedNetworkControllerSimulation {
+ public:
+ explicit LogBasedNetworkControllerSimulation(
+ std::unique_ptr<NetworkControllerFactoryInterface> factory,
+ std::function<void(const NetworkControlUpdate&, Timestamp)>
+ update_handler);
+ ~LogBasedNetworkControllerSimulation();
+ void ProcessEventsInLog(const ParsedRtcEventLog& parsed_log_);
+
+ private:
+ struct ProbingStatus {
+ const LoggedBweProbeClusterCreatedEvent event;
+ size_t bytes_sent;
+ size_t packets_sent;
+ };
+ void HandleStateUpdate(const NetworkControlUpdate& update);
+ void ProcessUntil(Timestamp to_time);
+
+ void OnProbeCreated(const LoggedBweProbeClusterCreatedEvent& probe_cluster);
+ void OnPacketSent(const LoggedPacketInfo& packet);
+ void OnFeedback(const LoggedRtcpPacketTransportFeedback& feedback);
+ void OnReceiverReport(const LoggedRtcpPacketReceiverReport& report);
+ void OnIceConfig(const LoggedIceCandidatePairConfig& candidate);
+ RtcEventLogNull null_event_log_;
+
+ const std::function<void(const NetworkControlUpdate&, Timestamp)>
+ update_handler_;
+ std::unique_ptr<NetworkControllerFactoryInterface> factory_;
+ std::unique_ptr<NetworkControllerInterface> controller_;
+
+ Timestamp current_time_ = Timestamp::MinusInfinity();
+ Timestamp last_process_ = Timestamp::MinusInfinity();
+ TransportFeedbackAdapter transport_feedback_;
+ std::deque<ProbingStatus> pending_probes_;
+ std::map<uint32_t, rtcp::ReportBlock> last_report_blocks_;
+ Timestamp last_report_block_time_ = Timestamp::MinusInfinity();
+};
+} // namespace webrtc
+
+#endif // RTC_TOOLS_RTC_EVENT_LOG_VISUALIZER_LOG_SIMULATION_H_