summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-26 20:39:53 +0000
committerrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-26 20:39:53 +0000
commitcbbff8b86d52459613d7d83f3cd8d5812740aa97 (patch)
treea03dbc9ac66fc3a9f66c789ff3a43ba09594f09c /net
parentdffc8c2ef7a5c43a9457366d8114f2d2d03e600b (diff)
downloadchromium_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.cc7
-rw-r--r--net/spdy/buffered_spdy_framer.h12
-rw-r--r--net/spdy/buffered_spdy_framer_spdy2_unittest.cc5
-rw-r--r--net/spdy/buffered_spdy_framer_spdy3_unittest.cc5
-rw-r--r--net/spdy/spdy_framer.cc3
-rw-r--r--net/spdy/spdy_framer.h6
-rw-r--r--net/spdy/spdy_framer_test.cc13
-rw-r--r--net/spdy/spdy_session.cc23
-rw-r--r--net/spdy/spdy_session.h3
-rw-r--r--net/tools/flip_server/spdy_interface.h3
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(