Index: webrtc/rtc_tools/event_log_visualizer/analyzer.cc |
diff --git a/webrtc/rtc_tools/event_log_visualizer/analyzer.cc b/webrtc/rtc_tools/event_log_visualizer/analyzer.cc |
index 78993f4f7cada132678d8aa1456ea339285ee1d0..b42f0820f48dd878e8263dd03aaf51747769d74b 100644 |
--- a/webrtc/rtc_tools/event_log_visualizer/analyzer.cc |
+++ b/webrtc/rtc_tools/event_log_visualizer/analyzer.cc |
@@ -898,7 +898,8 @@ void EventLogAnalyzer::CreateFractionLossGraph(Plot* plot) { |
// Plot the total bandwidth used by all RTP streams. |
void EventLogAnalyzer::CreateTotalBitrateGraph( |
PacketDirection desired_direction, |
- Plot* plot) { |
+ Plot* plot, |
+ bool show_detector_state) { |
struct TimestampSize { |
TimestampSize(uint64_t t, size_t s) : timestamp(t), size(s) {} |
uint64_t timestamp; |
@@ -958,13 +959,46 @@ void EventLogAnalyzer::CreateTotalBitrateGraph( |
} |
TimeSeries delay_series("Delay-based estimate", LINE_STEP_GRAPH); |
+ IntervalSeries overusing_series("Overusing", "#ff8e82", |
+ IntervalSeries::kHorizontal); |
+ IntervalSeries underusing_series("Underusing", "#5092fc", |
+ IntervalSeries::kHorizontal); |
+ IntervalSeries normal_series("Normal", "#c4ffc4", |
+ IntervalSeries::kHorizontal); |
+ IntervalSeries* last_series = &normal_series; |
+ double last_detector_switch = 0.0; |
+ |
+ BandwidthUsage last_detector_state = BandwidthUsage::kBwNormal; |
+ |
for (auto& delay_update : bwe_delay_updates_) { |
float x = |
static_cast<float>(delay_update.timestamp - begin_time_) / 1000000; |
float y = static_cast<float>(delay_update.bitrate_bps) / 1000; |
+ |
+ if (last_detector_state != delay_update.detector_state) { |
+ last_series->intervals.emplace_back(last_detector_switch, x); |
+ last_detector_state = delay_update.detector_state; |
+ last_detector_switch = x; |
+ |
+ switch (delay_update.detector_state) { |
+ case BandwidthUsage::kBwNormal: |
+ last_series = &normal_series; |
+ break; |
+ case BandwidthUsage::kBwUnderusing: |
+ last_series = &underusing_series; |
+ break; |
+ case BandwidthUsage::kBwOverusing: |
+ last_series = &overusing_series; |
+ break; |
+ } |
+ } |
+ |
delay_series.points.emplace_back(x, y); |
} |
+ RTC_CHECK(last_series); |
+ last_series->intervals.emplace_back(last_detector_switch, end_time_); |
+ |
TimeSeries created_series("Probe cluster created.", DOT_GRAPH); |
for (auto& cluster : bwe_probe_cluster_created_events_) { |
float x = static_cast<float>(cluster.timestamp - begin_time_) / 1000000; |
@@ -980,6 +1014,14 @@ void EventLogAnalyzer::CreateTotalBitrateGraph( |
result_series.points.emplace_back(x, y); |
} |
} |
+ |
+ if (show_detector_state) { |
+ plot->AppendIntervalSeries(std::move(overusing_series)); |
+ plot->AppendIntervalSeries(std::move(underusing_series)); |
+ plot->AppendIntervalSeries(std::move(normal_series)); |
+ } |
+ |
+ plot->AppendTimeSeries(std::move(bitrate_series)); |
plot->AppendTimeSeries(std::move(loss_series)); |
plot->AppendTimeSeries(std::move(delay_series)); |
plot->AppendTimeSeries(std::move(created_series)); |