Chromium Code Reviews| Index: content/browser/service_worker/service_worker_url_request_job.cc |
| diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc |
| index f69a0ac376a99a62458a61cead649368117f6733..d274cf353bf3b4c0a573073cd1fc1502b9682d32 100644 |
| --- a/content/browser/service_worker/service_worker_url_request_job.cc |
| +++ b/content/browser/service_worker/service_worker_url_request_job.cc |
| @@ -555,9 +555,11 @@ void ServiceWorkerURLRequestJob::DidPrepareFetchEvent( |
| } |
| if (version->should_exclude_from_uma()) |
| return; |
| + worker_start_situation_ = version->embedded_worker()->start_situation(); |
| ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame( |
| worker_ready_time_ - request()->creation_time(), initial_worker_status_, |
| - version->embedded_worker()->start_situation(), did_navigation_preload_); |
| + worker_start_situation_, did_navigation_preload_); |
| + MaybeReportNavigationPreloadMetrics(); |
| } |
| void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( |
| @@ -885,9 +887,35 @@ void ServiceWorkerURLRequestJob::RequestBodyFileSizesResolved(bool success) { |
| base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent, |
| weak_factory_.GetWeakPtr()))); |
| worker_start_time_ = base::TimeTicks::Now(); |
| - did_navigation_preload_ = |
| - fetch_dispatcher_->MaybeStartNavigationPreload(request()); |
| + did_navigation_preload_ = fetch_dispatcher_->MaybeStartNavigationPreload( |
| + request(), |
| + base::Bind(&ServiceWorkerURLRequestJob::OnNavigationPreloadResponse, |
| + weak_factory_.GetWeakPtr())); |
| fetch_dispatcher_->Run(); |
| } |
| +void ServiceWorkerURLRequestJob::OnNavigationPreloadResponse() { |
| + DCHECK(navigation_preload_response_time_.is_null()); |
| + navigation_preload_response_time_ = base::TimeTicks::Now(); |
| + MaybeReportNavigationPreloadMetrics(); |
| +} |
| + |
| +void ServiceWorkerURLRequestJob::MaybeReportNavigationPreloadMetrics() { |
| + if (worker_start_time_.is_null() || worker_ready_time_.is_null() || |
| + navigation_preload_response_time_.is_null()) { |
| + return; |
| + } |
| + // Don't expect this to happen, but don't ruin the UMA if it does. |
|
horo
2017/01/24 01:48:33
Do we actually need this check??
I think DCHECK()
falken
2017/01/24 04:41:18
I wasn't sure if OnReceivedResposne() is gaurantee
|
| + if (reported_navigation_preload_metrics_) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + reported_navigation_preload_metrics_ = true; |
| + |
| + ServiceWorkerMetrics::RecordNavigationPreloadResponse( |
| + worker_ready_time_ - worker_start_time_, |
| + navigation_preload_response_time_ - worker_start_time_, |
| + initial_worker_status_, worker_start_situation_); |
| +} |
| + |
| } // namespace content |