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

Side by Side Diff: net/http/http_stream_factory_impl.cc

Issue 2928763002: Move SpdySessionRequestMap to SpdySessionPool (Closed)
Patch Set: address comment Created 3 years, 6 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/http/http_stream_factory_impl.h" 5 #include "net/http/http_stream_factory_impl.h"
6 6
7 #include <tuple> 7 #include <tuple>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 22 matching lines...) Expand all
33 namespace net { 33 namespace net {
34 34
35 HttpStreamFactoryImpl::HttpStreamFactoryImpl(HttpNetworkSession* session, 35 HttpStreamFactoryImpl::HttpStreamFactoryImpl(HttpNetworkSession* session,
36 bool for_websockets) 36 bool for_websockets)
37 : session_(session), 37 : session_(session),
38 job_factory_(new JobFactory()), 38 job_factory_(new JobFactory()),
39 for_websockets_(for_websockets), 39 for_websockets_(for_websockets),
40 last_logged_job_controller_count_(0) {} 40 last_logged_job_controller_count_(0) {}
41 41
42 HttpStreamFactoryImpl::~HttpStreamFactoryImpl() { 42 HttpStreamFactoryImpl::~HttpStreamFactoryImpl() {
43 DCHECK(spdy_session_request_map_.empty());
44 UMA_HISTOGRAM_COUNTS_1M("Net.JobControllerSet.CountOfJobControllerAtShutDown", 43 UMA_HISTOGRAM_COUNTS_1M("Net.JobControllerSet.CountOfJobControllerAtShutDown",
45 job_controller_set_.size()); 44 job_controller_set_.size());
46 } 45 }
47 46
48 std::unique_ptr<HttpStreamRequest> HttpStreamFactoryImpl::RequestStream( 47 std::unique_ptr<HttpStreamRequest> HttpStreamFactoryImpl::RequestStream(
49 const HttpRequestInfo& request_info, 48 const HttpRequestInfo& request_info,
50 RequestPriority priority, 49 RequestPriority priority,
51 const SSLConfig& server_ssl_config, 50 const SSLConfig& server_ssl_config,
52 const SSLConfig& proxy_ssl_config, 51 const SSLConfig& proxy_ssl_config,
53 HttpStreamRequest::Delegate* delegate, 52 HttpStreamRequest::Delegate* delegate,
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 proxy_ssl_config); 147 proxy_ssl_config);
149 JobController* job_controller_raw_ptr = job_controller.get(); 148 JobController* job_controller_raw_ptr = job_controller.get();
150 job_controller_set_.insert(std::move(job_controller)); 149 job_controller_set_.insert(std::move(job_controller));
151 job_controller_raw_ptr->Preconnect(num_streams); 150 job_controller_raw_ptr->Preconnect(num_streams);
152 } 151 }
153 152
154 const HostMappingRules* HttpStreamFactoryImpl::GetHostMappingRules() const { 153 const HostMappingRules* HttpStreamFactoryImpl::GetHostMappingRules() const {
155 return &session_->params().host_mapping_rules; 154 return &session_->params().host_mapping_rules;
156 } 155 }
157 156
158 void HttpStreamFactoryImpl::OnNewSpdySessionReady(
159 const base::WeakPtr<SpdySession>& spdy_session,
160 bool direct,
161 const SSLConfig& used_ssl_config,
162 const ProxyInfo& used_proxy_info,
163 bool was_alpn_negotiated,
164 NextProto negotiated_protocol,
165 bool using_spdy,
166 NetLogSource source_dependency) {
167 while (true) {
168 if (!spdy_session)
169 break;
170 const SpdySessionKey& spdy_session_key = spdy_session->spdy_session_key();
171 // Each iteration may empty out the RequestSet for |spdy_session_key| in
172 // |spdy_session_request_map_|. So each time, check for RequestSet and use
173 // the first one.
174 //
175 // TODO(willchan): If it's important, switch RequestSet out for a FIFO
176 // queue (Order by priority first, then FIFO within same priority). Unclear
177 // that it matters here.
178 if (!base::ContainsKey(spdy_session_request_map_, spdy_session_key))
179 break;
180 Request* request = *spdy_session_request_map_[spdy_session_key].begin();
181 request->Complete(was_alpn_negotiated, negotiated_protocol, using_spdy);
182 if (for_websockets_) {
183 // TODO(ricea): Restore this code path when WebSocket over SPDY
184 // implementation is ready.
185 NOTREACHED();
186 } else if (request->stream_type() ==
187 HttpStreamRequest::BIDIRECTIONAL_STREAM) {
188 request->OnBidirectionalStreamImplReady(
189 used_ssl_config, used_proxy_info,
190 new BidirectionalStreamSpdyImpl(spdy_session, source_dependency));
191 } else {
192 bool use_relative_url =
193 direct || request->url().SchemeIs(url::kHttpsScheme);
194 request->OnStreamReady(used_ssl_config, used_proxy_info,
195 new SpdyHttpStream(spdy_session, use_relative_url,
196 source_dependency));
197 }
198 }
199 // TODO(mbelshe): Alert other valid requests.
200 }
201
202 void HttpStreamFactoryImpl::OnJobControllerComplete(JobController* controller) { 157 void HttpStreamFactoryImpl::OnJobControllerComplete(JobController* controller) {
203 for (auto it = job_controller_set_.begin(); it != job_controller_set_.end(); 158 for (auto it = job_controller_set_.begin(); it != job_controller_set_.end();
204 ++it) { 159 ++it) {
205 if (it->get() == controller) { 160 if (it->get() == controller) {
206 job_controller_set_.erase(it); 161 job_controller_set_.erase(it);
207 return; 162 return;
208 } 163 }
209 } 164 }
210 NOTREACHED(); 165 NOTREACHED();
211 } 166 }
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 factory_dump->AddScalar("main_job_count", 340 factory_dump->AddScalar("main_job_count",
386 base::trace_event::MemoryAllocatorDump::kUnitsObjects, 341 base::trace_event::MemoryAllocatorDump::kUnitsObjects,
387 main_job_count); 342 main_job_count);
388 // The number of preconnect controllers. 343 // The number of preconnect controllers.
389 factory_dump->AddScalar("preconnect_count", 344 factory_dump->AddScalar("preconnect_count",
390 base::trace_event::MemoryAllocatorDump::kUnitsObjects, 345 base::trace_event::MemoryAllocatorDump::kUnitsObjects,
391 num_controllers_for_preconnect); 346 num_controllers_for_preconnect);
392 } 347 }
393 348
394 } // namespace net 349 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl.h ('k') | net/http/http_stream_factory_impl_job_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698