diff options
author | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-26 20:39:53 +0000 |
---|---|---|
committer | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-26 20:39:53 +0000 |
commit | cbbff8b86d52459613d7d83f3cd8d5812740aa97 (patch) | |
tree | a03dbc9ac66fc3a9f66c789ff3a43ba09594f09c /net | |
parent | dffc8c2ef7a5c43a9457366d8114f2d2d03e600b (diff) | |
download | chromium_src-cbbff8b86d52459613d7d83f3cd8d5812740aa97.zip chromium_src-cbbff8b86d52459613d7d83f3cd8d5812740aa97.tar.gz chromium_src-cbbff8b86d52459613d7d83f3cd8d5812740aa97.tar.bz2 |
Add a new OnControlFrameCompressed method to SpdyFramerVisitor which is invoked after a control frame is compressed.
Review URL: https://chromiumcodereview.appspot.com/10669034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@144265 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/spdy/buffered_spdy_framer.cc | 7 | ||||
-rw-r--r-- | net/spdy/buffered_spdy_framer.h | 12 | ||||
-rw-r--r-- | net/spdy/buffered_spdy_framer_spdy2_unittest.cc | 5 | ||||
-rw-r--r-- | net/spdy/buffered_spdy_framer_spdy3_unittest.cc | 5 | ||||
-rw-r--r-- | net/spdy/spdy_framer.cc | 3 | ||||
-rw-r--r-- | net/spdy/spdy_framer.h | 6 | ||||
-rw-r--r-- | net/spdy/spdy_framer_test.cc | 13 | ||||
-rw-r--r-- | net/spdy/spdy_session.cc | 23 | ||||
-rw-r--r-- | net/spdy/spdy_session.h | 3 | ||||
-rw-r--r-- | net/tools/flip_server/spdy_interface.h | 3 |
10 files changed, 71 insertions, 9 deletions
diff --git a/net/spdy/buffered_spdy_framer.cc b/net/spdy/buffered_spdy_framer.cc index b544dcb..0b76361 100644 --- a/net/spdy/buffered_spdy_framer.cc +++ b/net/spdy/buffered_spdy_framer.cc @@ -147,6 +147,13 @@ void BufferedSpdyFramer::OnSetting(SpdySettingsIds id, visitor_->OnSetting(id, flags, value); } +void BufferedSpdyFramer::OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) { + visitor_->OnControlFrameCompressed(uncompressed_frame, compressed_frame); +} + + int BufferedSpdyFramer::protocol_version() { return spdy_framer_.protocol_version(); } diff --git a/net/spdy/buffered_spdy_framer.h b/net/spdy/buffered_spdy_framer.h index 494238e..2cb4253 100644 --- a/net/spdy/buffered_spdy_framer.h +++ b/net/spdy/buffered_spdy_framer.h @@ -68,6 +68,12 @@ class NET_EXPORT_PRIVATE BufferedSpdyFramerVisitorInterface { // and validated. virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) = 0; + // Called after a control frame has been compressed to allow the visitor + // to record compression statistics. + virtual void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) = 0; + protected: virtual ~BufferedSpdyFramerVisitorInterface() {} @@ -102,6 +108,12 @@ class NET_EXPORT_PRIVATE BufferedSpdyFramer SpdySettingsIds id, uint8 flags, uint32 value) OVERRIDE; virtual void OnDataFrameHeader(const SpdyDataFrame* frame) OVERRIDE; + // Called after a control frame has been compressed to allow the visitor + // to record compression statistics. + virtual void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) OVERRIDE; + // SpdyFramer methods. size_t ProcessInput(const char* data, size_t len); int protocol_version(); diff --git a/net/spdy/buffered_spdy_framer_spdy2_unittest.cc b/net/spdy/buffered_spdy_framer_spdy2_unittest.cc index 4bdb8f7..78013cd 100644 --- a/net/spdy/buffered_spdy_framer_spdy2_unittest.cc +++ b/net/spdy/buffered_spdy_framer_spdy2_unittest.cc @@ -71,6 +71,11 @@ class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface { setting_count_++; } + void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) { + } + bool OnCredentialFrameData(const char*, size_t) { LOG(FATAL) << "Unexpected OnCredentialFrameData call."; return false; diff --git a/net/spdy/buffered_spdy_framer_spdy3_unittest.cc b/net/spdy/buffered_spdy_framer_spdy3_unittest.cc index cb4a15b..5f7c0ee 100644 --- a/net/spdy/buffered_spdy_framer_spdy3_unittest.cc +++ b/net/spdy/buffered_spdy_framer_spdy3_unittest.cc @@ -71,6 +71,11 @@ class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface { setting_count_++; } + void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) { + } + bool OnCredentialFrameData(const char*, size_t) { LOG(FATAL) << "Unexpected OnCredentialFrameData call."; return false; diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc index 3a2ad73..79b21e3 100644 --- a/net/spdy/spdy_framer.cc +++ b/net/spdy/spdy_framer.cc @@ -1426,6 +1426,9 @@ SpdyControlFrame* SpdyFramer::CompressControlFrame( compressed_frames.Increment(); + if (visitor_) + visitor_->OnControlFrameCompressed(frame, *new_frame); + return new_frame.release(); } diff --git a/net/spdy/spdy_framer.h b/net/spdy/spdy_framer.h index 63570a6..a7461b2 100644 --- a/net/spdy/spdy_framer.h +++ b/net/spdy/spdy_framer.h @@ -184,6 +184,12 @@ class NET_EXPORT_PRIVATE SpdyFramerVisitorInterface { // Called when a complete setting within a SETTINGS frame has been parsed and // validated. virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) = 0; + + // Called after a control frame has been compressed to allow the visitor + // to record compression statistics. + virtual void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) = 0; }; class NET_EXPORT_PRIVATE SpdyFramer { diff --git a/net/spdy/spdy_framer_test.cc b/net/spdy/spdy_framer_test.cc index fd80da4..9e20724 100644 --- a/net/spdy/spdy_framer_test.cc +++ b/net/spdy/spdy_framer_test.cc @@ -39,6 +39,9 @@ class MockVisitor : public SpdyFramerVisitorInterface { const char* data, size_t len)); MOCK_METHOD3(OnSetting, void(SpdySettingsIds id, uint8 flags, uint32 value)); + MOCK_METHOD2(OnControlFrameCompressed, + void(const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame)); }; class SpdyFramerTestUtil { @@ -132,6 +135,10 @@ class SpdyFramerTestUtil { virtual void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) { LOG(FATAL); } + virtual void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) { + } char* ReleaseBuffer() { CHECK(finished_); @@ -322,6 +329,11 @@ class TestSpdyVisitor : public SpdyFramerVisitorInterface { setting_count_++; } + virtual void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) { + } + bool OnControlFrameHeaderData(SpdyStreamId stream_id, const char* header_data, size_t len) { @@ -3020,6 +3032,7 @@ TEST_P(SpdyFramerTest, EmptySynStream) { SpdyFramer framer(spdy_version_); framer.set_visitor(&visitor); + EXPECT_CALL(visitor, OnControlFrameCompressed(_, _)); scoped_ptr<SpdySynStreamControlFrame> frame(framer.CreateSynStream(1, 0, 1, 0, CONTROL_FLAG_NONE, true, &headers)); diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index fb1a653..7a7275e 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -921,15 +921,6 @@ void SpdySession::WriteSocket() { DCHECK_GT(size, 0u); - if (uncompressed_control_frame->type() == SYN_STREAM) { - int uncompressed_size = uncompressed_control_frame->length(); - int compressed_size = compressed_frame->length(); - // Make sure we avoid early decimal truncation. - int compression_pct = 100 - (100* compressed_size)/uncompressed_size; - UMA_HISTOGRAM_PERCENTAGE("Net.SpdySynStreamCompressionPercentage", - compression_pct); - } - // TODO(mbelshe): We have too much copying of data here. IOBufferWithSize* buffer = new IOBufferWithSize(size); memcpy(buffer->data(), compressed_frame->data(), size); @@ -1244,6 +1235,20 @@ void SpdySession::OnSetting(SpdySettingsIds id, id, static_cast<SpdySettingsFlags>(flags), value)); } +void SpdySession::OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) { + if (uncompressed_frame.type() == SYN_STREAM) { + int uncompressed_size = uncompressed_frame.length(); + int compressed_size = compressed_frame.length(); + // Make sure we avoid early decimal truncation. + int compression_pct = 100 - (100 * compressed_size) / uncompressed_size; + UMA_HISTOGRAM_PERCENTAGE("Net.SpdySynStreamCompressionPercentage", + compression_pct); + } +} + + bool SpdySession::Respond(const SpdyHeaderBlock& headers, const scoped_refptr<SpdyStream> stream) { int rv = OK; diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index cd2d37c..a23bdc5 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h @@ -478,6 +478,9 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, size_t len) OVERRIDE; virtual void OnSetting( SpdySettingsIds id, uint8 flags, uint32 value) OVERRIDE; + virtual void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) OVERRIDE; virtual void OnSynStream( const SpdySynStreamControlFrame& frame, const linked_ptr<SpdyHeaderBlock>& headers) OVERRIDE; diff --git a/net/tools/flip_server/spdy_interface.h b/net/tools/flip_server/spdy_interface.h index 6d66eb0..c75704f 100644 --- a/net/tools/flip_server/spdy_interface.h +++ b/net/tools/flip_server/spdy_interface.h @@ -68,6 +68,9 @@ class SpdySM : public BufferedSpdyFramerVisitorInterface, virtual void OnStreamFrameData(SpdyStreamId stream_id, const char* data, size_t len) OVERRIDE; + virtual void OnControlFrameCompressed( + const SpdyControlFrame& uncompressed_frame, + const SpdyControlFrame& compressed_frame) OVERRIDE {}; virtual void OnSetting( SpdySettingsIds id, uint8 flags, uint32 value) OVERRIDE {} virtual void OnSynStream( |