Index: net/quic/quic_connection_logger.cc |
diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc |
index b5ca18bae7ed7389234f6e4d6e9c9c5a1104698f..22d820ad2c02804041c67e2ca95fe4831144090f 100644 |
--- a/net/quic/quic_connection_logger.cc |
+++ b/net/quic/quic_connection_logger.cc |
@@ -29,11 +29,25 @@ namespace net { |
namespace { |
+// Histograms to track how often chrome sends/receives flow-control BLOCKED |
+// frames. Note: these values must be kept in sync with the corresponding values |
+// in: tools/metrics/histograms/histograms.xml |
+enum BlockedFrameType { |
+ BLOCKED_FRAME_RECEIVED = 0, |
+ BLOCKED_FRAME_SENT = 1, |
+ NUM_BLOCKED_FRAMES = 2, |
+}; |
+ |
// We have ranges-of-buckets in the cumulative histogram (covering 21 packet |
// sequences) of length 2, 3, 4, ... 22. |
// Hence the largest sample is bounded by the sum of those numbers. |
const int kBoundingSampleInCumulativeHistogram = ((2 + 22) * 21) / 2; |
+void RecordBlockedFrame(BlockedFrameType blocked_frame_type) { |
+ UMA_HISTOGRAM_ENUMERATION("Net.QuicSession.FlowControlBlockedFrame", |
+ blocked_frame_type, NUM_BLOCKED_FRAMES); |
Ryan Hamilton
2014/10/21 19:48:14
Instead of recording entry each time we become blo
ramant (doing other things)
2014/10/21 22:05:31
Done.
|
+} |
+ |
base::Value* NetLogQuicPacketCallback(const IPEndPoint* self_address, |
const IPEndPoint* peer_address, |
size_t packet_size, |
@@ -442,6 +456,7 @@ void QuicConnectionLogger::OnFrameAddedToPacket(const QuicFrame& frame) { |
frame.window_update_frame)); |
break; |
case BLOCKED_FRAME: |
+ RecordBlockedFrame(BLOCKED_FRAME_SENT); |
net_log_.AddEvent( |
NetLog::TYPE_QUIC_SESSION_BLOCKED_FRAME_SENT, |
base::Bind(&NetLogQuicBlockedFrameCallback, |
@@ -636,6 +651,7 @@ void QuicConnectionLogger::OnWindowUpdateFrame( |
} |
void QuicConnectionLogger::OnBlockedFrame(const QuicBlockedFrame& frame) { |
+ RecordBlockedFrame(BLOCKED_FRAME_RECEIVED); |
net_log_.AddEvent( |
NetLog::TYPE_QUIC_SESSION_BLOCKED_FRAME_RECEIVED, |
base::Bind(&NetLogQuicBlockedFrameCallback, &frame)); |