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

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

Issue 658163002: Fixed resource scheduler to not treat non-blocking js as render-blocking (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 | 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 <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/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 CountRequestsWithClassification(IN_FLIGHT_DELAYABLE_REQUEST, false), 504 CountRequestsWithClassification(IN_FLIGHT_DELAYABLE_REQUEST, false),
505 in_flight_delayable_count_); 505 in_flight_delayable_count_);
506 DCHECK_EQ(CountRequestsWithClassification(LAYOUT_BLOCKING_REQUEST, true), 506 DCHECK_EQ(CountRequestsWithClassification(LAYOUT_BLOCKING_REQUEST, true),
507 total_layout_blocking_count_); 507 total_layout_blocking_count_);
508 } 508 }
509 509
510 RequestClassification ClassifyRequest(ScheduledResourceRequest* request) { 510 RequestClassification ClassifyRequest(ScheduledResourceRequest* request) {
511 // If a request is already marked as layout-blocking make sure to keep the 511 // If a request is already marked as layout-blocking make sure to keep the
512 // classification across redirects unless the priority was lowered. 512 // classification across redirects unless the priority was lowered.
513 if (request->classification() == LAYOUT_BLOCKING_REQUEST && 513 if (request->classification() == LAYOUT_BLOCKING_REQUEST &&
514 request->url_request()->priority() >= net::LOW) { 514 request->url_request()->priority() > net::LOW) {
515 return LAYOUT_BLOCKING_REQUEST; 515 return LAYOUT_BLOCKING_REQUEST;
516 } 516 }
517 517
518 if (!has_body_ && request->url_request()->priority() >= net::LOW) 518 if (!has_body_ && request->url_request()->priority() > net::LOW)
519 return LAYOUT_BLOCKING_REQUEST; 519 return LAYOUT_BLOCKING_REQUEST;
520 520
521 if (request->url_request()->priority() < net::LOW) { 521 if (request->url_request()->priority() < net::LOW) {
522 net::HostPortPair host_port_pair = 522 net::HostPortPair host_port_pair =
523 net::HostPortPair::FromURL(request->url_request()->url()); 523 net::HostPortPair::FromURL(request->url_request()->url());
524 net::HttpServerProperties& http_server_properties = 524 net::HttpServerProperties& http_server_properties =
525 *request->url_request()->context()->http_server_properties(); 525 *request->url_request()->context()->http_server_properties();
526 if (!http_server_properties.SupportsSpdy(host_port_pair) && 526 if (!http_server_properties.SupportsSpdy(host_port_pair) &&
527 ContainsKey(in_flight_requests_, request)) { 527 ContainsKey(in_flight_requests_, request)) {
528 return IN_FLIGHT_DELAYABLE_REQUEST; 528 return IN_FLIGHT_DELAYABLE_REQUEST;
(...skipping 30 matching lines...) Expand all
559 // 1. Non-delayable requests: 559 // 1. Non-delayable requests:
560 // * Synchronous requests. 560 // * Synchronous requests.
561 // * Non-HTTP[S] requests. 561 // * Non-HTTP[S] requests.
562 // 562 //
563 // 2. Requests to SPDY-capable origin servers. 563 // 2. Requests to SPDY-capable origin servers.
564 // 564 //
565 // 3. High-priority requests: 565 // 3. High-priority requests:
566 // * Higher priority requests (>= net::LOW). 566 // * Higher priority requests (>= net::LOW).
567 // 567 //
568 // 4. Layout-blocking requests: 568 // 4. Layout-blocking requests:
569 // * High-priority requests initiated before the renderer has a <body>. 569 // * High-priority requests (> net::LOW) initiated before the renderer has
570 // a <body>.
570 // 571 //
571 // 5. Low priority requests 572 // 5. Low priority requests
572 // 573 //
573 // The following rules are followed: 574 // The following rules are followed:
574 // 575 //
575 // ACTIVE_AND_LOADING and UNTHROTTLED Clients follow these rules: 576 // ACTIVE_AND_LOADING and UNTHROTTLED Clients follow these rules:
576 // * Non-delayable, High-priority and SPDY capable requests are issued 577 // * Non-delayable, High-priority and SPDY capable requests are issued
577 // immediately. 578 // immediately.
578 // * Low priority requests are delayable. 579 // * Low priority requests are delayable.
579 // * Allow one delayable request to load at a time while layout-blocking 580 // * Allow one delayable request to load at a time while layout-blocking
580 // requests are loading. 581 // requests are loading or the body tag has not yet been parsed.
581 // * If no high priority or layout-blocking requests are in flight, start 582 // * If no high priority or layout-blocking requests are in flight, start
582 // loading delayable requests. 583 // loading delayable requests.
583 // * Never exceed 10 delayable requests in flight per client. 584 // * Never exceed 10 delayable requests in flight per client.
584 // * Never exceed 6 delayable requests for a given host. 585 // * Never exceed 6 delayable requests for a given host.
585 // 586 //
586 // THROTTLED Clients follow these rules: 587 // THROTTLED Clients follow these rules:
587 // * Non-delayable and SPDY-capable requests are issued immediately. 588 // * Non-delayable and SPDY-capable requests are issued immediately.
588 // * At most one non-SPDY request will be issued per THROTTLED Client 589 // * At most one non-SPDY request will be issued per THROTTLED Client
589 // * If no high priority requests are in flight, start loading low priority 590 // * If no high priority requests are in flight, start loading low priority
590 // requests. 591 // requests.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 650
650 if (ShouldKeepSearching(host_port_pair)) { 651 if (ShouldKeepSearching(host_port_pair)) {
651 // There may be other requests for other hosts we'd allow, 652 // There may be other requests for other hosts we'd allow,
652 // so keep checking. 653 // so keep checking.
653 return DO_NOT_START_REQUEST_AND_KEEP_SEARCHING; 654 return DO_NOT_START_REQUEST_AND_KEEP_SEARCHING;
654 } 655 }
655 656
656 bool have_immediate_requests_in_flight = 657 bool have_immediate_requests_in_flight =
657 in_flight_requests_.size() > in_flight_delayable_count_; 658 in_flight_requests_.size() > in_flight_delayable_count_;
658 if (have_immediate_requests_in_flight && 659 if (have_immediate_requests_in_flight &&
659 total_layout_blocking_count_ != 0 && 660 (!has_body_ || total_layout_blocking_count_ != 0) &&
mmenke 2014/10/16 15:59:01 Oh, may want a unit test for this.
Pat Meenan 2014/10/16 16:50:07 Done.
660 in_flight_delayable_count_ != 0) { 661 in_flight_delayable_count_ != 0) {
661 return DO_NOT_START_REQUEST_AND_STOP_SEARCHING; 662 return DO_NOT_START_REQUEST_AND_STOP_SEARCHING;
662 } 663 }
663 664
664 return START_REQUEST; 665 return START_REQUEST;
665 } 666 }
666 667
667 void LoadAnyStartablePendingRequests() { 668 void LoadAnyStartablePendingRequests() {
668 // We iterate through all the pending requests, starting with the highest 669 // We iterate through all the pending requests, starting with the highest
669 // priority one. For each entry, one of three things can happen: 670 // priority one. For each entry, one of three things can happen:
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 client->ReprioritizeRequest( 1035 client->ReprioritizeRequest(
1035 request, old_priority_params, new_priority_params); 1036 request, old_priority_params, new_priority_params);
1036 } 1037 }
1037 1038
1038 ResourceScheduler::ClientId ResourceScheduler::MakeClientId( 1039 ResourceScheduler::ClientId ResourceScheduler::MakeClientId(
1039 int child_id, int route_id) { 1040 int child_id, int route_id) {
1040 return (static_cast<ResourceScheduler::ClientId>(child_id) << 32) | route_id; 1041 return (static_cast<ResourceScheduler::ClientId>(child_id) << 32) | route_id;
1041 } 1042 }
1042 1043
1043 } // namespace content 1044 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698