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

Unified Diff: content/browser/loader/resource_scheduler.cc

Issue 1209013003: [ABANDONED] [WIP] Schedule async revalidations after other requests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@s-w-r-browser-content
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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/loader/resource_scheduler.cc
diff --git a/content/browser/loader/resource_scheduler.cc b/content/browser/loader/resource_scheduler.cc
index 7bc6c0458b86648b22e88ed16bd5cfceea8c52e6..69ec83d29357784f27da5f58a1bbd68d92477c7c 100644
--- a/content/browser/loader/resource_scheduler.cc
+++ b/content/browser/loader/resource_scheduler.cc
@@ -167,10 +167,13 @@ class ResourceScheduler::ScheduledResourceRequest
request_(request),
ready_(false),
deferred_(false),
+ is_async_revalidation_(false),
classification_(NORMAL_REQUEST),
scheduler_(scheduler),
priority_(priority),
fifo_ordering_(0) {
+ is_async_revalidation_ =
+ ResourceRequestInfo::ForRequest(request)->IsAsyncRevalidation();
}
~ScheduledResourceRequest() override { scheduler_->RemoveRequest(this); }
@@ -226,6 +229,7 @@ class ResourceScheduler::ScheduledResourceRequest
void set_classification(RequestClassification classification) {
classification_ = classification;
}
+ bool is_async_revalidation() const { return is_async_revalidation_; }
private:
// ResourceMessageDelegate interface:
@@ -256,6 +260,7 @@ class ResourceScheduler::ScheduledResourceRequest
net::URLRequest* request_;
bool ready_;
bool deferred_;
+ bool is_async_revalidation_;
RequestClassification classification_;
ResourceScheduler* scheduler_;
RequestPriorityParams priority_;
@@ -268,6 +273,10 @@ class ResourceScheduler::ScheduledResourceRequest
bool ResourceScheduler::ScheduledResourceSorter::operator()(
const ScheduledResourceRequest* a,
const ScheduledResourceRequest* b) const {
+ // Want all other requests to be ordered before async revalidations.
+ if (a->is_async_revalidation() != b->is_async_revalidation())
+ return b->is_async_revalidation();
+
// Want the set to be ordered first by decreasing priority, then by
// decreasing intra_priority.
// ie. with (priority, intra_priority)
@@ -689,6 +698,10 @@ class ResourceScheduler::Client {
// UNTHROTTLED Client, and then return to the COALESCED state.
// * When an active Client makes a request, they are THROTTLED until the
// active Client finishes loading.
+ //
+ // 6. Async revalidations
+ // * Async revalidations come after all other requests, and are never loaded
+ // until the document has a body.
ShouldStartReqResult ShouldStartRequest(
ScheduledResourceRequest* request) const {
const net::URLRequest& url_request = *request->url_request();
@@ -706,6 +719,12 @@ class ResourceScheduler::Client {
return START_REQUEST;
}
+ if (request->is_async_revalidation() && !has_body_) {
+ // Because async revalidations are sorted last, all following requests
+ // will also be async revalidations.
+ return DO_NOT_START_REQUEST_AND_STOP_SEARCHING;
+ }
+
if (throttle_state_ == COALESCED) {
return DO_NOT_START_REQUEST_AND_STOP_SEARCHING;
}
« 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