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

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

Issue 965773002: Optimize chained string concatenation in SPDY code. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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
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 #include "net/spdy/spdy_session.h" 5 #include "net/spdy/spdy_session.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 // Minimum seconds that unclaimed pushed streams will be kept in memory. 58 // Minimum seconds that unclaimed pushed streams will be kept in memory.
59 const int kMinPushedStreamLifetimeSeconds = 300; 59 const int kMinPushedStreamLifetimeSeconds = 300;
60 60
61 scoped_ptr<base::ListValue> SpdyHeaderBlockToListValue( 61 scoped_ptr<base::ListValue> SpdyHeaderBlockToListValue(
62 const SpdyHeaderBlock& headers, 62 const SpdyHeaderBlock& headers,
63 net::NetLog::LogLevel log_level) { 63 net::NetLog::LogLevel log_level) {
64 scoped_ptr<base::ListValue> headers_list(new base::ListValue()); 64 scoped_ptr<base::ListValue> headers_list(new base::ListValue());
65 for (SpdyHeaderBlock::const_iterator it = headers.begin(); 65 for (SpdyHeaderBlock::const_iterator it = headers.begin();
66 it != headers.end(); ++it) { 66 it != headers.end(); ++it) {
67 headers_list->AppendString( 67 headers_list->AppendString(std::string(it->first).append(": ").append(
68 it->first + ": " + 68 ElideHeaderValueForNetLog(log_level, it->first, it->second)));
69 ElideHeaderValueForNetLog(log_level, it->first, it->second));
70 } 69 }
71 return headers_list.Pass(); 70 return headers_list.Pass();
72 } 71 }
73 72
74 base::Value* NetLogSpdySynStreamSentCallback(const SpdyHeaderBlock* headers, 73 base::Value* NetLogSpdySynStreamSentCallback(const SpdyHeaderBlock* headers,
75 bool fin, 74 bool fin,
76 bool unidirectional, 75 bool unidirectional,
77 SpdyPriority spdy_priority, 76 SpdyPriority spdy_priority,
78 SpdyStreamId stream_id, 77 SpdyStreamId stream_id,
79 NetLog::LogLevel log_level) { 78 NetLog::LogLevel log_level) {
(...skipping 2448 matching lines...) Expand 10 before | Expand all | Expand 10 after
2528 LOG(WARNING) << "Received WINDOW_UPDATE for session when " 2527 LOG(WARNING) << "Received WINDOW_UPDATE for session when "
2529 << "session flow control is not turned on"; 2528 << "session flow control is not turned on";
2530 // TODO(akalin): Record an error and close the session. 2529 // TODO(akalin): Record an error and close the session.
2531 return; 2530 return;
2532 } 2531 }
2533 2532
2534 if (delta_window_size < 1u) { 2533 if (delta_window_size < 1u) {
2535 RecordProtocolErrorHistogram(PROTOCOL_ERROR_INVALID_WINDOW_UPDATE_SIZE); 2534 RecordProtocolErrorHistogram(PROTOCOL_ERROR_INVALID_WINDOW_UPDATE_SIZE);
2536 DoDrainSession( 2535 DoDrainSession(
2537 ERR_SPDY_PROTOCOL_ERROR, 2536 ERR_SPDY_PROTOCOL_ERROR,
2538 "Received WINDOW_UPDATE with an invalid delta_window_size " + 2537 std::string(
2539 base::UintToString(delta_window_size)); 2538 "Received WINDOW_UPDATE with an invalid delta_window_size ")
2539 .append(base::UintToString(delta_window_size)));
mmenke 2015/03/09 20:21:58 This could just be: base::StringPrintf("Received.
2540 return; 2540 return;
2541 } 2541 }
2542 2542
2543 IncreaseSendWindowSize(static_cast<int32>(delta_window_size)); 2543 IncreaseSendWindowSize(static_cast<int32>(delta_window_size));
2544 } else { 2544 } else {
2545 // WINDOW_UPDATE for a stream. 2545 // WINDOW_UPDATE for a stream.
2546 if (flow_control_state_ < FLOW_CONTROL_STREAM) { 2546 if (flow_control_state_ < FLOW_CONTROL_STREAM) {
2547 // TODO(akalin): Record an error and close the session. 2547 // TODO(akalin): Record an error and close the session.
2548 LOG(WARNING) << "Received WINDOW_UPDATE for stream " << stream_id 2548 LOG(WARNING) << "Received WINDOW_UPDATE for stream " << stream_id
2549 << " when flow control is not turned on"; 2549 << " when flow control is not turned on";
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
3140 3140
3141 DCHECK_EQ(flow_control_state_, FLOW_CONTROL_STREAM_AND_SESSION); 3141 DCHECK_EQ(flow_control_state_, FLOW_CONTROL_STREAM_AND_SESSION);
3142 DCHECK_GE(delta_window_size, 1); 3142 DCHECK_GE(delta_window_size, 1);
3143 3143
3144 // Check for overflow. 3144 // Check for overflow.
3145 int32 max_delta_window_size = kint32max - session_send_window_size_; 3145 int32 max_delta_window_size = kint32max - session_send_window_size_;
3146 if (delta_window_size > max_delta_window_size) { 3146 if (delta_window_size > max_delta_window_size) {
3147 RecordProtocolErrorHistogram(PROTOCOL_ERROR_INVALID_WINDOW_UPDATE_SIZE); 3147 RecordProtocolErrorHistogram(PROTOCOL_ERROR_INVALID_WINDOW_UPDATE_SIZE);
3148 DoDrainSession( 3148 DoDrainSession(
3149 ERR_SPDY_PROTOCOL_ERROR, 3149 ERR_SPDY_PROTOCOL_ERROR,
3150 "Received WINDOW_UPDATE [delta: " + 3150 std::string("Received WINDOW_UPDATE [delta: ")
3151 base::IntToString(delta_window_size) + 3151 .append(base::IntToString(delta_window_size))
3152 "] for session overflows session_send_window_size_ [current: " + 3152 .append(
3153 base::IntToString(session_send_window_size_) + "]"); 3153 "] for session overflows session_send_window_size_ [current: ")
3154 .append(base::IntToString(session_send_window_size_))
3155 .append("]"));
3154 return; 3156 return;
3155 } 3157 }
3156 3158
3157 session_send_window_size_ += delta_window_size; 3159 session_send_window_size_ += delta_window_size;
3158 3160
3159 net_log_.AddEvent( 3161 net_log_.AddEvent(
3160 NetLog::TYPE_SPDY_SESSION_UPDATE_SEND_WINDOW, 3162 NetLog::TYPE_SPDY_SESSION_UPDATE_SEND_WINDOW,
3161 base::Bind(&NetLogSpdySessionWindowUpdateCallback, 3163 base::Bind(&NetLogSpdySessionWindowUpdateCallback,
3162 delta_window_size, session_send_window_size_)); 3164 delta_window_size, session_send_window_size_));
3163 3165
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
3225 void SpdySession::DecreaseRecvWindowSize(int32 delta_window_size) { 3227 void SpdySession::DecreaseRecvWindowSize(int32 delta_window_size) {
3226 CHECK(in_io_loop_); 3228 CHECK(in_io_loop_);
3227 DCHECK_EQ(flow_control_state_, FLOW_CONTROL_STREAM_AND_SESSION); 3229 DCHECK_EQ(flow_control_state_, FLOW_CONTROL_STREAM_AND_SESSION);
3228 DCHECK_GE(delta_window_size, 1); 3230 DCHECK_GE(delta_window_size, 1);
3229 3231
3230 // Since we never decrease the initial receive window size, 3232 // Since we never decrease the initial receive window size,
3231 // |delta_window_size| should never cause |recv_window_size_| to go 3233 // |delta_window_size| should never cause |recv_window_size_| to go
3232 // negative. If we do, the receive window isn't being respected. 3234 // negative. If we do, the receive window isn't being respected.
3233 if (delta_window_size > session_recv_window_size_) { 3235 if (delta_window_size > session_recv_window_size_) {
3234 RecordProtocolErrorHistogram(PROTOCOL_ERROR_RECEIVE_WINDOW_VIOLATION); 3236 RecordProtocolErrorHistogram(PROTOCOL_ERROR_RECEIVE_WINDOW_VIOLATION);
3235 DoDrainSession( 3237 DoDrainSession(ERR_SPDY_FLOW_CONTROL_ERROR,
3236 ERR_SPDY_FLOW_CONTROL_ERROR, 3238 std::string("delta_window_size is ")
3237 "delta_window_size is " + base::IntToString(delta_window_size) + 3239 .append(base::IntToString(delta_window_size))
3238 " in DecreaseRecvWindowSize, which is larger than the receive " + 3240 .append(
3239 "window size of " + base::IntToString(session_recv_window_size_)); 3241 " in DecreaseRecvWindowSize, which is larger than "
3242 "the receive window size of ")
3243 .append(base::IntToString(session_recv_window_size_)));
3240 return; 3244 return;
3241 } 3245 }
3242 3246
3243 session_recv_window_size_ -= delta_window_size; 3247 session_recv_window_size_ -= delta_window_size;
3244 net_log_.AddEvent( 3248 net_log_.AddEvent(
3245 NetLog::TYPE_SPDY_SESSION_UPDATE_RECV_WINDOW, 3249 NetLog::TYPE_SPDY_SESSION_UPDATE_RECV_WINDOW,
3246 base::Bind(&NetLogSpdySessionWindowUpdateCallback, 3250 base::Bind(&NetLogSpdySessionWindowUpdateCallback,
3247 -delta_window_size, session_recv_window_size_)); 3251 -delta_window_size, session_recv_window_size_));
3248 } 3252 }
3249 3253
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3291 if (!queue->empty()) { 3295 if (!queue->empty()) {
3292 SpdyStreamId stream_id = queue->front(); 3296 SpdyStreamId stream_id = queue->front();
3293 queue->pop_front(); 3297 queue->pop_front();
3294 return stream_id; 3298 return stream_id;
3295 } 3299 }
3296 } 3300 }
3297 return 0; 3301 return 0;
3298 } 3302 }
3299 3303
3300 } // namespace net 3304 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698