Index: net/spdy/spdy_session.h |
diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h |
index 88496839a2b495e845e8c8b80b7bf5765e7b8329..88cfee37b02bc3973244f0d9212b3c79a4ca0559 100644 |
--- a/net/spdy/spdy_session.h |
+++ b/net/spdy/spdy_session.h |
@@ -47,6 +47,10 @@ const int kMaxSpdyFrameChunkSize = (2 * kMss) - 8; |
// Specifies the maxiumum concurrent streams server could send (via push). |
const int kMaxConcurrentPushedStreams = 1000; |
+// Specifies the number of bytes read synchronously (without yielding) if the |
+// data is available. |
+const int kMaxReadBytes = 32 * 1024; |
+ |
// The initial receive window size for both streams and sessions. |
const int32 kDefaultInitialRecvWindowSize = 10 * 1024 * 1024; // 10MB |
@@ -337,7 +341,7 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, |
void IncreaseRecvWindowSize(int32 delta_window_size); |
// If session is closed, no new streams/transactions should be created. |
- bool IsClosed() const { return state_ == CLOSED; } |
+ bool IsClosed() const { return state_ == STATE_CLOSED; } |
// Closes this session. This will close all active streams and mark |
// the session as permanently closed. |
@@ -488,10 +492,11 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, |
SpdyIOBufferProducerCompare> WriteQueue; |
enum State { |
- IDLE, |
- CONNECTING, |
- CONNECTED, |
- CLOSED |
+ STATE_IDLE, |
+ STATE_CONNECTING, |
+ STATE_DO_READ, |
+ STATE_DO_READ_COMPLETE, |
+ STATE_CLOSED |
}; |
virtual ~SpdySession(); |
@@ -519,6 +524,21 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, |
// possible. |
void ProcessPendingStreamRequests(); |
+ // Start the DoLoop to read data from socket. |
+ void StartRead(); |
+ |
+ // Try to make progress by reading and processing data. |
+ int DoLoop(int result); |
+ // The implementations of STATE_DO_READ/STATE_DO_READ_COMPLETE state changes |
+ // of the state machine. |
+ int DoRead(); |
+ int DoReadComplete(int bytes_read); |
+ |
+ // Check if session is connected or not. |
+ bool IsConnected() const { |
+ return state_ == STATE_DO_READ || state_ == STATE_DO_READ_COMPLETE; |
+ } |
+ |
// IO Callbacks |
void OnReadComplete(int result); |
void OnWriteComplete(int result); |
@@ -557,10 +577,6 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, |
// haven't received any data in |kHungInterval| time period. |
void CheckPingStatus(base::TimeTicks last_check_time); |
- // Start reading from the socket. |
- // Returns OK on success, or an error on failure. |
- net::Error ReadSocket(); |
- |
// Write current data to the socket. |
void WriteSocketLater(); |
void WriteSocket(); |
@@ -724,7 +740,6 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, |
// The read buffer used to read data from the socket. |
scoped_refptr<IOBuffer> read_buffer_; |
- bool read_pending_; |
int stream_hi_water_mark_; // The next stream id to use. |
@@ -794,7 +809,15 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, |
int streams_pushed_count_; |
int streams_pushed_and_claimed_count_; |
int streams_abandoned_count_; |
- int bytes_received_; |
+ |
+ // |total_bytes_received_| keeps track of all the bytes read by the |
+ // SpdySession. It is used by the |Net.SpdySettingsCwnd...| histograms. |
+ int total_bytes_received_; |
+ |
+ // |bytes_read_| keeps track of number of bytes read continously in the |
+ // DoLoop() without yielding. |
+ int bytes_read_; |
+ |
bool sent_settings_; // Did this session send settings when it started. |
bool received_settings_; // Did this session receive at least one settings |
// frame. |