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

Side by Side Diff: content/browser/service_worker/service_worker_controllee_request_handler.cc

Issue 538913002: ServiceWorker: Insert TRACE_EVENT to watch a breakdown of the ServiceWorker's performance on chome:… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unnecessary include Created 6 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/service_worker/service_worker_controllee_request_handl er.h" 5 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h"
6 6
7 #include "base/debug/trace_event.h"
7 #include "content/browser/service_worker/service_worker_context_core.h" 8 #include "content/browser/service_worker/service_worker_context_core.h"
8 #include "content/browser/service_worker/service_worker_metrics.h" 9 #include "content/browser/service_worker/service_worker_metrics.h"
9 #include "content/browser/service_worker/service_worker_provider_host.h" 10 #include "content/browser/service_worker/service_worker_provider_host.h"
10 #include "content/browser/service_worker/service_worker_registration.h" 11 #include "content/browser/service_worker/service_worker_registration.h"
11 #include "content/browser/service_worker/service_worker_url_request_job.h" 12 #include "content/browser/service_worker/service_worker_url_request_job.h"
12 #include "content/browser/service_worker/service_worker_utils.h" 13 #include "content/browser/service_worker/service_worker_utils.h"
13 #include "content/common/resource_request_body.h" 14 #include "content/common/resource_request_body.h"
14 #include "content/common/service_worker/service_worker_types.h" 15 #include "content/common/service_worker/service_worker_types.h"
15 #include "net/base/load_flags.h" 16 #include "net/base/load_flags.h"
16 #include "net/base/net_util.h" 17 #include "net/base/net_util.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 return; 100 return;
100 } 101 }
101 job_->GetExtraResponseInfo(was_fetched_via_service_worker, 102 job_->GetExtraResponseInfo(was_fetched_via_service_worker,
102 original_url_via_service_worker); 103 original_url_via_service_worker);
103 } 104 }
104 105
105 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( 106 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource(
106 const GURL& url) { 107 const GURL& url) {
107 DCHECK(job_.get()); 108 DCHECK(job_.get());
108 DCHECK(context_); 109 DCHECK(context_);
110 TRACE_EVENT_ASYNC_BEGIN1(
111 "ServiceWorker",
112 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource",
113 job_.get(),
114 "URL", url.spec());
109 // The corresponding provider_host may already have associated a registration 115 // The corresponding provider_host may already have associated a registration
110 // in redirect case, unassociate it now. 116 // in redirect case, unassociate it now.
111 provider_host_->UnassociateRegistration(); 117 provider_host_->UnassociateRegistration();
112 118
113 GURL stripped_url = net::SimplifyUrlForRequest(url); 119 GURL stripped_url = net::SimplifyUrlForRequest(url);
114 provider_host_->SetDocumentUrl(stripped_url); 120 provider_host_->SetDocumentUrl(stripped_url);
115 context_->storage()->FindRegistrationForDocument( 121 context_->storage()->FindRegistrationForDocument(
116 stripped_url, 122 stripped_url,
117 base::Bind(&self::DidLookupRegistrationForMainResource, 123 base::Bind(&self::DidLookupRegistrationForMainResource,
118 weak_factory_.GetWeakPtr())); 124 weak_factory_.GetWeakPtr()));
119 } 125 }
120 126
121 void 127 void
122 ServiceWorkerControlleeRequestHandler::DidLookupRegistrationForMainResource( 128 ServiceWorkerControlleeRequestHandler::DidLookupRegistrationForMainResource(
123 ServiceWorkerStatusCode status, 129 ServiceWorkerStatusCode status,
124 const scoped_refptr<ServiceWorkerRegistration>& registration) { 130 const scoped_refptr<ServiceWorkerRegistration>& registration) {
125 DCHECK(job_.get()); 131 DCHECK(job_.get());
126 if (status != SERVICE_WORKER_OK) { 132 if (status != SERVICE_WORKER_OK) {
127 job_->FallbackToNetwork(); 133 job_->FallbackToNetwork();
134 TRACE_EVENT_ASYNC_END1(
135 "ServiceWorker",
136 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource",
137 job_.get(),
138 "Status", status);
128 return; 139 return;
129 } 140 }
130 DCHECK(registration.get()); 141 DCHECK(registration.get());
131 142
132 ServiceWorkerMetrics::CountControlledPageLoad(); 143 ServiceWorkerMetrics::CountControlledPageLoad();
133 144
134 // Initiate activation of a waiting version. 145 // Initiate activation of a waiting version.
135 // Usually a register job initiates activation but that 146 // Usually a register job initiates activation but that
136 // doesn't happen if the browser exits prior to activation 147 // doesn't happen if the browser exits prior to activation
137 // having occurred. This check handles that case. 148 // having occurred. This check handles that case.
138 if (registration->waiting_version()) 149 if (registration->waiting_version())
139 registration->ActivateWaitingVersionWhenReady(); 150 registration->ActivateWaitingVersionWhenReady();
140 151
141 scoped_refptr<ServiceWorkerVersion> active_version = 152 scoped_refptr<ServiceWorkerVersion> active_version =
142 registration->active_version(); 153 registration->active_version();
143 154
144 // Wait until it's activated before firing fetch events. 155 // Wait until it's activated before firing fetch events.
145 if (active_version.get() && 156 if (active_version.get() &&
146 active_version->status() == ServiceWorkerVersion::ACTIVATING) { 157 active_version->status() == ServiceWorkerVersion::ACTIVATING) {
147 registration->active_version()->RegisterStatusChangeCallback( 158 registration->active_version()->RegisterStatusChangeCallback(
148 base::Bind(&self::OnVersionStatusChanged, 159 base::Bind(&self::OnVersionStatusChanged,
149 weak_factory_.GetWeakPtr(), 160 weak_factory_.GetWeakPtr(),
150 registration, 161 registration,
151 active_version)); 162 active_version));
163 TRACE_EVENT_ASYNC_END2(
164 "ServiceWorker",
165 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource",
166 job_.get(),
167 "Status", status,
168 "Info", "Wait until finished SW activation");
152 return; 169 return;
153 } 170 }
154 171
155 if (!active_version.get() || 172 if (!active_version.get() ||
156 active_version->status() != ServiceWorkerVersion::ACTIVATED) { 173 active_version->status() != ServiceWorkerVersion::ACTIVATED) {
157 job_->FallbackToNetwork(); 174 job_->FallbackToNetwork();
175 TRACE_EVENT_ASYNC_END2(
176 "ServiceWorker",
177 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource",
178 job_.get(),
179 "Status", status,
180 "Info",
181 "ServiceWorkerVersion is not available, so falling back to network");
158 return; 182 return;
159 } 183 }
160 184
161 provider_host_->AssociateRegistration(registration.get()); 185 provider_host_->AssociateRegistration(registration.get());
162 job_->ForwardToServiceWorker(); 186 job_->ForwardToServiceWorker();
187 TRACE_EVENT_ASYNC_END2(
188 "ServiceWorker",
189 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource",
190 job_.get(),
191 "Status", status,
192 "Info",
193 "Forwarded to the ServiceWorker");
163 } 194 }
164 195
165 void ServiceWorkerControlleeRequestHandler::OnVersionStatusChanged( 196 void ServiceWorkerControlleeRequestHandler::OnVersionStatusChanged(
166 ServiceWorkerRegistration* registration, 197 ServiceWorkerRegistration* registration,
167 ServiceWorkerVersion* version) { 198 ServiceWorkerVersion* version) {
168 if (version != registration->active_version() || 199 if (version != registration->active_version() ||
169 version->status() != ServiceWorkerVersion::ACTIVATED) { 200 version->status() != ServiceWorkerVersion::ACTIVATED) {
170 job_->FallbackToNetwork(); 201 job_->FallbackToNetwork();
171 return; 202 return;
172 } 203 }
173 204
174 provider_host_->AssociateRegistration(registration); 205 provider_host_->AssociateRegistration(registration);
175 job_->ForwardToServiceWorker(); 206 job_->ForwardToServiceWorker();
176 } 207 }
177 208
178 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { 209 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() {
179 DCHECK(job_.get()); 210 DCHECK(job_.get());
180 DCHECK(context_); 211 DCHECK(context_);
181 DCHECK(provider_host_->active_version()); 212 DCHECK(provider_host_->active_version());
182 job_->ForwardToServiceWorker(); 213 job_->ForwardToServiceWorker();
183 } 214 }
184 215
185 } // namespace content 216 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698