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

Side by Side Diff: content/browser/loader/resource_scheduler.cc

Issue 1192673002: Ensure ResourceScheduler starts requests even if the tab is closed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 | « no previous file | content/browser/loader/resource_scheduler_unittest.cc » ('j') | 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 <set> 5 #include <set>
6 6
7 #include "content/browser/loader/resource_scheduler.h" 7 #include "content/browser/loader/resource_scheduler.h"
8 8
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 pending_requests_.Erase(request); 330 pending_requests_.Erase(request);
331 DCHECK(!ContainsKey(in_flight_requests_, request)); 331 DCHECK(!ContainsKey(in_flight_requests_, request));
332 } else { 332 } else {
333 EraseInFlightRequest(request); 333 EraseInFlightRequest(request);
334 334
335 // Removing this request may have freed up another to load. 335 // Removing this request may have freed up another to load.
336 LoadAnyStartablePendingRequests(); 336 LoadAnyStartablePendingRequests();
337 } 337 }
338 } 338 }
339 339
340 RequestSet RemoveAllRequests() { 340 RequestSet StartAndRemoveAllRequests() {
341 // First start any pending requests so that they will be moved into
342 // in_flight_requests_. This may exceed the limits
343 // kMaxNumDelayableRequestsPerClient, kMaxNumDelayableRequestsPerHost and
344 // kMaxNumThrottledRequestsPerClient, so this method must not do anything
345 // that depends on those limits before calling ClearInFlightRequests()
346 // below.
347 while (!pending_requests_.IsEmpty()) {
348 ScheduledResourceRequest* request =
349 *pending_requests_.GetNextHighestIterator();
350 pending_requests_.Erase(request);
351 // StartRequest() may modify pending_requests_. TODO(ricea): Does it?
352 StartRequest(request);
353 }
341 RequestSet unowned_requests; 354 RequestSet unowned_requests;
342 for (RequestSet::iterator it = in_flight_requests_.begin(); 355 for (RequestSet::iterator it = in_flight_requests_.begin();
343 it != in_flight_requests_.end(); ++it) { 356 it != in_flight_requests_.end(); ++it) {
344 unowned_requests.insert(*it); 357 unowned_requests.insert(*it);
345 (*it)->set_classification(NORMAL_REQUEST); 358 (*it)->set_classification(NORMAL_REQUEST);
346 } 359 }
347 ClearInFlightRequests(); 360 ClearInFlightRequests();
348 return unowned_requests; 361 return unowned_requests;
349 } 362 }
350 363
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 924
912 void ResourceScheduler::OnClientDeleted(int child_id, int route_id) { 925 void ResourceScheduler::OnClientDeleted(int child_id, int route_id) {
913 DCHECK(CalledOnValidThread()); 926 DCHECK(CalledOnValidThread());
914 ClientId client_id = MakeClientId(child_id, route_id); 927 ClientId client_id = MakeClientId(child_id, route_id);
915 DCHECK(ContainsKey(client_map_, client_id)); 928 DCHECK(ContainsKey(client_map_, client_id));
916 ClientMap::iterator it = client_map_.find(client_id); 929 ClientMap::iterator it = client_map_.find(client_id);
917 if (it == client_map_.end()) 930 if (it == client_map_.end())
918 return; 931 return;
919 932
920 Client* client = it->second; 933 Client* client = it->second;
921 // FYI, ResourceDispatcherHost cancels all of the requests after this function 934 // ResourceDispatcherHost cancels all requests except for cross-renderer
922 // is called. It should end up canceling all of the requests except for a 935 // navigations, async revalidations and detachable requests after
923 // cross-renderer navigation. 936 // OnClientDeleted() returns.
mmenke 2015/06/18 14:49:26 Wait...So we start a bunch of requests, and then w
Adam Rice 2015/06/19 13:06:53 Even without this CL up to 10 requests will be sta
mmenke 2015/06/19 15:10:16 You mean in the destructor, when we call UpdateThr
Adam Rice 2015/06/23 17:06:52 Sorry, I was confused because throttling is enable
924 RequestSet client_unowned_requests = client->RemoveAllRequests(); 937 RequestSet client_unowned_requests = client->StartAndRemoveAllRequests();
925 for (RequestSet::iterator it = client_unowned_requests.begin(); 938 for (RequestSet::iterator it = client_unowned_requests.begin();
926 it != client_unowned_requests.end(); ++it) { 939 it != client_unowned_requests.end(); ++it) {
927 unowned_requests_.insert(*it); 940 unowned_requests_.insert(*it);
928 } 941 }
929 942
930 delete client; 943 delete client;
931 client_map_.erase(it); 944 client_map_.erase(it);
932 } 945 }
933 946
934 void ResourceScheduler::OnLoadingStateChanged(int child_id, 947 void ResourceScheduler::OnLoadingStateChanged(int child_id,
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1148 client->ReprioritizeRequest( 1161 client->ReprioritizeRequest(
1149 request, old_priority_params, new_priority_params); 1162 request, old_priority_params, new_priority_params);
1150 } 1163 }
1151 1164
1152 ResourceScheduler::ClientId ResourceScheduler::MakeClientId( 1165 ResourceScheduler::ClientId ResourceScheduler::MakeClientId(
1153 int child_id, int route_id) { 1166 int child_id, int route_id) {
1154 return (static_cast<ResourceScheduler::ClientId>(child_id) << 32) | route_id; 1167 return (static_cast<ResourceScheduler::ClientId>(child_id) << 32) | route_id;
1155 } 1168 }
1156 1169
1157 } // namespace content 1170 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/loader/resource_scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698