Index: webrtc/tools/event_log_visualizer/analyzer.cc |
diff --git a/webrtc/tools/event_log_visualizer/analyzer.cc b/webrtc/tools/event_log_visualizer/analyzer.cc |
index 88ca33935f44a11a10afd67497cd7ef4f6a98fc5..94f02aa0518bd0c58e01e0db2e3fb0cf8b99b4c6 100644 |
--- a/webrtc/tools/event_log_visualizer/analyzer.cc |
+++ b/webrtc/tools/event_log_visualizer/analyzer.cc |
@@ -883,7 +883,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; |
@@ -943,14 +944,58 @@ void EventLogAnalyzer::CreateTotalBitrateGraph( |
loss_series.points.emplace_back(x, y); |
} |
+ TimeSeries overusing_series("Overusing", VSPAN_GRAPH); |
+ overusing_series.color = "#ff8e82"; |
+ TimeSeries underusing_series("Underusing", VSPAN_GRAPH); |
+ underusing_series.color = "#5092fc"; |
+ TimeSeries normal_series("Normal", VSPAN_GRAPH); |
+ normal_series.color = "#c4ffc4"; |
+ normal_series.points.emplace_back(0, 0); |
TimeSeries delay_series("Delay-based estimate", LINE_STEP_GRAPH); |
+ TimeSeries* last_series = &normal_series; |
+ BandwidthUsage 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 (detector_state != delay_update.detector_state) { |
+ RTC_CHECK(last_series); |
+ last_series->points.emplace_back(x, 0); |
+ last_series = nullptr; |
+ } |
+ |
+ switch (delay_update.detector_state) { |
+ case BandwidthUsage::kBwNormal: |
+ if (detector_state != BandwidthUsage::kBwNormal) { |
+ normal_series.points.emplace_back(x, 0); |
+ last_series = &normal_series; |
+ detector_state = delay_update.detector_state; |
+ } |
+ break; |
+ case BandwidthUsage::kBwUnderusing: |
+ if (detector_state != BandwidthUsage::kBwUnderusing) { |
+ underusing_series.points.emplace_back(x, 0); |
+ last_series = &underusing_series; |
+ detector_state = delay_update.detector_state; |
+ } |
+ break; |
+ case BandwidthUsage::kBwOverusing: |
+ if (detector_state != BandwidthUsage::kBwOverusing) { |
+ overusing_series.points.emplace_back(x, 0); |
+ last_series = &overusing_series; |
+ detector_state = delay_update.detector_state; |
+ } |
+ break; |
+ } |
+ |
delay_series.points.emplace_back(x, y); |
} |
+ RTC_CHECK(last_series); |
+ last_series->points.emplace_back(end_time_, 0); |
+ |
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; |
@@ -966,6 +1011,14 @@ void EventLogAnalyzer::CreateTotalBitrateGraph( |
result_series.points.emplace_back(x, y); |
} |
} |
+ |
+ if (show_detector_state) { |
+ plot->AppendTimeSeries(std::move(underusing_series)); |
+ plot->AppendTimeSeries(std::move(normal_series)); |
+ plot->AppendTimeSeries(std::move(overusing_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)); |