Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: net/spdy/spdy_session.h

Issue 11644088: SPDY - implement greedy approach to read all the data and process it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | net/spdy/spdy_session.cc » ('j') | net/spdy/spdy_session.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_SPDY_SPDY_SESSION_H_ 5 #ifndef NET_SPDY_SPDY_SESSION_H_
6 #define NET_SPDY_SPDY_SESSION_H_ 6 #define NET_SPDY_SPDY_SESSION_H_
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 257
258 // Returns the ServerBoundCertService used by this Socket, or NULL 258 // Returns the ServerBoundCertService used by this Socket, or NULL
259 // if server bound certs are not supported in this session. 259 // if server bound certs are not supported in this session.
260 ServerBoundCertService* GetServerBoundCertService() const; 260 ServerBoundCertService* GetServerBoundCertService() const;
261 261
262 // Send WINDOW_UPDATE frame, called by a stream whenever receive window 262 // Send WINDOW_UPDATE frame, called by a stream whenever receive window
263 // size is increased. 263 // size is increased.
264 void SendWindowUpdate(SpdyStreamId stream_id, int32 delta_window_size); 264 void SendWindowUpdate(SpdyStreamId stream_id, int32 delta_window_size);
265 265
266 // If session is closed, no new streams/transactions should be created. 266 // If session is closed, no new streams/transactions should be created.
267 bool IsClosed() const { return state_ == CLOSED; } 267 bool IsClosed() const { return state_ == STATE_CLOSED; }
268 268
269 // Closes this session. This will close all active streams and mark 269 // Closes this session. This will close all active streams and mark
270 // the session as permanently closed. 270 // the session as permanently closed.
271 // |err| should not be OK; this function is intended to be called on 271 // |err| should not be OK; this function is intended to be called on
272 // error. 272 // error.
273 // |remove_from_pool| indicates whether to also remove the session from the 273 // |remove_from_pool| indicates whether to also remove the session from the
274 // session pool. 274 // session pool.
275 // |description| indicates the reason for the error. 275 // |description| indicates the reason for the error.
276 void CloseSessionOnError(net::Error err, 276 void CloseSessionOnError(net::Error err,
277 bool remove_from_pool, 277 bool remove_from_pool,
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 ~CallbackResultPair(); 398 ~CallbackResultPair();
399 399
400 CompletionCallback callback; 400 CompletionCallback callback;
401 int result; 401 int result;
402 }; 402 };
403 403
404 typedef std::map<const scoped_refptr<SpdyStream>*, CallbackResultPair> 404 typedef std::map<const scoped_refptr<SpdyStream>*, CallbackResultPair>
405 PendingCallbackMap; 405 PendingCallbackMap;
406 406
407 enum State { 407 enum State {
408 IDLE, 408 STATE_IDLE,
409 CONNECTING, 409 STATE_CONNECTING,
410 CONNECTED, 410 STATE_DO_READ,
411 CLOSED 411 STATE_DO_READ_COMPLETE,
412 STATE_CLOSED
412 }; 413 };
413 414
414 virtual ~SpdySession(); 415 virtual ~SpdySession();
415 416
416 void ProcessPendingCreateStreams(); 417 void ProcessPendingCreateStreams();
417 int CreateStreamImpl( 418 int CreateStreamImpl(
418 const GURL& url, 419 const GURL& url,
419 RequestPriority priority, 420 RequestPriority priority,
420 scoped_refptr<SpdyStream>* spdy_stream, 421 scoped_refptr<SpdyStream>* spdy_stream,
421 const BoundNetLog& stream_net_log); 422 const BoundNetLog& stream_net_log);
422 423
424 // Start the DoLoop to read data from socket.
425 void StartRead();
426
427 // Try to make progress by reading and processing data.
428 int DoLoop(int result);
429 // The implementations of STATE_DO_READ/STATE_DO_READ_COMPLETE state changes
430 // of the state machine.
431 int DoRead();
432 int DoReadComplete(int bytes_read);
433
434 // Check if session is connected or not.
435 bool IsConnected() const {
436 return state_ == STATE_DO_READ || state_ == STATE_DO_READ_COMPLETE;
437 }
438
423 // IO Callbacks 439 // IO Callbacks
424 void OnReadComplete(int result); 440 void OnReadComplete(int result);
425 void OnWriteComplete(int result); 441 void OnWriteComplete(int result);
426 442
427 // Send relevant SETTINGS. This is generally called on connection setup. 443 // Send relevant SETTINGS. This is generally called on connection setup.
428 void SendInitialSettings(); 444 void SendInitialSettings();
429 445
430 // Helper method to send SETTINGS a frame. 446 // Helper method to send SETTINGS a frame.
431 void SendSettings(const SettingsMap& settings); 447 void SendSettings(const SettingsMap& settings);
432 448
(...skipping 14 matching lines...) Expand all
447 void WritePingFrame(uint32 unique_id); 463 void WritePingFrame(uint32 unique_id);
448 464
449 // Post a CheckPingStatus call after delay. Don't post if there is already 465 // Post a CheckPingStatus call after delay. Don't post if there is already
450 // CheckPingStatus running. 466 // CheckPingStatus running.
451 void PlanToCheckPingStatus(); 467 void PlanToCheckPingStatus();
452 468
453 // Check the status of the connection. It calls |CloseSessionOnError| if we 469 // Check the status of the connection. It calls |CloseSessionOnError| if we
454 // haven't received any data in |kHungInterval| time period. 470 // haven't received any data in |kHungInterval| time period.
455 void CheckPingStatus(base::TimeTicks last_check_time); 471 void CheckPingStatus(base::TimeTicks last_check_time);
456 472
457 // Start reading from the socket.
458 // Returns OK on success, or an error on failure.
459 net::Error ReadSocket();
460
461 // Write current data to the socket. 473 // Write current data to the socket.
462 void WriteSocketLater(); 474 void WriteSocketLater();
463 void WriteSocket(); 475 void WriteSocket();
464 476
465 // Get a new stream id. 477 // Get a new stream id.
466 int GetNewStreamId(); 478 int GetNewStreamId();
467 479
468 // Queue a frame for sending. 480 // Queue a frame for sending.
469 // |frame| is the frame to send. 481 // |frame| is the frame to send.
470 // |priority| is the priority for insertion into the queue. 482 // |priority| is the priority for insertion into the queue.
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 660
649 // Limits 661 // Limits
650 size_t max_concurrent_streams_; // 0 if no limit 662 size_t max_concurrent_streams_; // 0 if no limit
651 size_t max_concurrent_streams_limit_; 663 size_t max_concurrent_streams_limit_;
652 664
653 // Some statistics counters for the session. 665 // Some statistics counters for the session.
654 int streams_initiated_count_; 666 int streams_initiated_count_;
655 int streams_pushed_count_; 667 int streams_pushed_count_;
656 int streams_pushed_and_claimed_count_; 668 int streams_pushed_and_claimed_count_;
657 int streams_abandoned_count_; 669 int streams_abandoned_count_;
658 int bytes_received_; 670 int total_bytes_received_;
671 int bytes_read_;
659 bool sent_settings_; // Did this session send settings when it started. 672 bool sent_settings_; // Did this session send settings when it started.
660 bool received_settings_; // Did this session receive at least one settings 673 bool received_settings_; // Did this session receive at least one settings
661 // frame. 674 // frame.
662 int stalled_streams_; // Count of streams that were ever stalled. 675 int stalled_streams_; // Count of streams that were ever stalled.
663 676
664 // Count of all pings on the wire, for which we have not gotten a response. 677 // Count of all pings on the wire, for which we have not gotten a response.
665 int64 pings_in_flight_; 678 int64 pings_in_flight_;
666 679
667 // This is the next ping_id (unique_id) to be sent in PING frame. 680 // This is the next ping_id (unique_id) to be sent in PING frame.
668 uint32 next_ping_id_; 681 uint32 next_ping_id_;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 // This SPDY proxy is allowed to push resources from origins that are 745 // This SPDY proxy is allowed to push resources from origins that are
733 // different from those of their associated streams. 746 // different from those of their associated streams.
734 HostPortPair trusted_spdy_proxy_; 747 HostPortPair trusted_spdy_proxy_;
735 748
736 TimeFunc time_func_; 749 TimeFunc time_func_;
737 }; 750 };
738 751
739 } // namespace net 752 } // namespace net
740 753
741 #endif // NET_SPDY_SPDY_SESSION_H_ 754 #endif // NET_SPDY_SPDY_SESSION_H_
OLDNEW
« no previous file with comments | « no previous file | net/spdy/spdy_session.cc » ('j') | net/spdy/spdy_session.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698