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

Side by Side Diff: net/spdy/chromium/spdy_session_pool.cc

Issue 2932513004: Throttle HttpStreamFactoryImpl::Job to HTTP/2-supported servers (Closed)
Patch Set: address comments 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
« no previous file with comments | « net/spdy/chromium/spdy_session_pool.h ('k') | no next file » | no next file with comments »
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 #include "net/spdy/chromium/spdy_session_pool.h" 5 #include "net/spdy/chromium/spdy_session_pool.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 direct || request->url().SchemeIs(url::kHttpsScheme); 432 direct || request->url().SchemeIs(url::kHttpsScheme);
433 request->OnStreamReady( 433 request->OnStreamReady(
434 used_ssl_config, used_proxy_info, 434 used_ssl_config, used_proxy_info,
435 base::MakeUnique<SpdyHttpStream>(spdy_session, use_relative_url, 435 base::MakeUnique<SpdyHttpStream>(spdy_session, use_relative_url,
436 source_dependency)); 436 source_dependency));
437 } 437 }
438 } 438 }
439 // TODO(mbelshe): Alert other valid requests. 439 // TODO(mbelshe): Alert other valid requests.
440 } 440 }
441 441
442 bool SpdySessionPool::StartRequest(const SpdySessionKey& spdy_session_key,
443 const base::Closure& callback) {
444 auto iter = spdy_session_pending_request_map_.find(spdy_session_key);
445 if (iter == spdy_session_pending_request_map_.end()) {
446 spdy_session_pending_request_map_.emplace(spdy_session_key,
447 std::list<base::Closure>{});
448 return true;
449 }
450 iter->second.push_back(callback);
451 return false;
452 }
453
454 void SpdySessionPool::ResumeAllPendingRequests(
455 const SpdySessionKey& spdy_session_key) {
456 auto iter = spdy_session_pending_request_map_.find(spdy_session_key);
457 if (iter != spdy_session_pending_request_map_.end()) {
458 for (auto callback : iter->second) {
459 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
460 }
461 spdy_session_pending_request_map_.erase(iter);
462 }
463 }
464
442 void SpdySessionPool::AddRequestToSpdySessionRequestMap( 465 void SpdySessionPool::AddRequestToSpdySessionRequestMap(
443 const SpdySessionKey& spdy_session_key, 466 const SpdySessionKey& spdy_session_key,
444 HttpStreamFactoryImpl::Request* request) { 467 HttpStreamFactoryImpl::Request* request) {
445 if (request->HasSpdySessionKey()) 468 if (request->HasSpdySessionKey())
446 return; 469 return;
447 RequestSet& request_set = spdy_session_request_map_[spdy_session_key]; 470 RequestSet& request_set = spdy_session_request_map_[spdy_session_key];
448 DCHECK(!base::ContainsKey(request_set, request)); 471 DCHECK(!base::ContainsKey(request_set, request));
449 request_set.insert(request); 472 request_set.insert(request);
450 request->SetSpdySessionKey(spdy_session_key); 473 request->SetSpdySessionKey(spdy_session_key);
451 } 474 }
452 475
453 void SpdySessionPool::RemoveRequestFromSpdySessionRequestMap( 476 void SpdySessionPool::RemoveRequestFromSpdySessionRequestMap(
454 HttpStreamFactoryImpl::Request* request) { 477 HttpStreamFactoryImpl::Request* request) {
455 if (!request->HasSpdySessionKey()) 478 if (!request->HasSpdySessionKey())
456 return; 479 return;
457 const SpdySessionKey& spdy_session_key = request->GetSpdySessionKey(); 480 const SpdySessionKey& spdy_session_key = request->GetSpdySessionKey();
458 auto iter = spdy_session_request_map_.find(spdy_session_key); 481 auto iter = spdy_session_request_map_.find(spdy_session_key);
459 DCHECK(iter != spdy_session_request_map_.end()); 482 DCHECK(iter != spdy_session_request_map_.end());
460 RequestSet& request_set = iter->second; 483 RequestSet& request_set = iter->second;
461 DCHECK(base::ContainsKey(request_set, request)); 484 DCHECK(base::ContainsKey(request_set, request));
462 request_set.erase(request); 485 request_set.erase(request);
463 if (request_set.empty()) 486 if (request_set.empty())
464 spdy_session_request_map_.erase(spdy_session_key); 487 spdy_session_request_map_.erase(spdy_session_key);
465 request->ResetSpdySessionKey(); 488 request->ResetSpdySessionKey();
489 // If the request failed or canceled, open the floodgate to resume all
490 // requests.
491 ResumeAllPendingRequests(spdy_session_key);
xunjieli 2017/06/13 15:23:11 I remove ResumeNextPendingRequest() to make the lo
466 } 492 }
467 493
468 void SpdySessionPool::DumpMemoryStats( 494 void SpdySessionPool::DumpMemoryStats(
469 base::trace_event::ProcessMemoryDump* pmd, 495 base::trace_event::ProcessMemoryDump* pmd,
470 const SpdyString& parent_dump_absolute_name) const { 496 const SpdyString& parent_dump_absolute_name) const {
471 if (sessions_.empty()) 497 if (sessions_.empty())
472 return; 498 return;
473 size_t total_size = 0; 499 size_t total_size = 0;
474 size_t buffer_size = 0; 500 size_t buffer_size = 0;
475 size_t cert_count = 0; 501 size_t cert_count = 0;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 601
576 if (idle_only && (*it)->is_active()) 602 if (idle_only && (*it)->is_active())
577 continue; 603 continue;
578 604
579 (*it)->CloseSessionOnError(error, description); 605 (*it)->CloseSessionOnError(error, description);
580 DCHECK(!IsSessionAvailable(*it)); 606 DCHECK(!IsSessionAvailable(*it));
581 } 607 }
582 } 608 }
583 609
584 } // namespace net 610 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/chromium/spdy_session_pool.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698