| OLD | NEW |
| 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_url_request_job.h" | 5 #include "content/browser/service_worker/service_worker_url_request_job.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME) | 548 if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME) |
| 549 return; | 549 return; |
| 550 if (!worker_already_activated_) | 550 if (!worker_already_activated_) |
| 551 return; | 551 return; |
| 552 if (version->skip_recording_startup_time() && | 552 if (version->skip_recording_startup_time() && |
| 553 initial_worker_status_ != EmbeddedWorkerStatus::RUNNING) { | 553 initial_worker_status_ != EmbeddedWorkerStatus::RUNNING) { |
| 554 return; | 554 return; |
| 555 } | 555 } |
| 556 if (version->should_exclude_from_uma()) | 556 if (version->should_exclude_from_uma()) |
| 557 return; | 557 return; |
| 558 worker_start_situation_ = version->embedded_worker()->start_situation(); |
| 558 ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame( | 559 ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame( |
| 559 worker_ready_time_ - request()->creation_time(), initial_worker_status_, | 560 worker_ready_time_ - request()->creation_time(), initial_worker_status_, |
| 560 version->embedded_worker()->start_situation(), did_navigation_preload_); | 561 worker_start_situation_, did_navigation_preload_); |
| 562 MaybeReportNavigationPreloadMetrics(); |
| 561 } | 563 } |
| 562 | 564 |
| 563 void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( | 565 void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( |
| 564 ServiceWorkerStatusCode status, | 566 ServiceWorkerStatusCode status, |
| 565 ServiceWorkerFetchEventResult fetch_result, | 567 ServiceWorkerFetchEventResult fetch_result, |
| 566 const ServiceWorkerResponse& response, | 568 const ServiceWorkerResponse& response, |
| 567 const scoped_refptr<ServiceWorkerVersion>& version) { | 569 const scoped_refptr<ServiceWorkerVersion>& version) { |
| 568 // Do not clear |fetch_dispatcher_| if it has dispatched a navigation preload | 570 // Do not clear |fetch_dispatcher_| if it has dispatched a navigation preload |
| 569 // request to keep the mojom::URLLoader related objects in it, because the | 571 // request to keep the mojom::URLLoader related objects in it, because the |
| 570 // preload response might still need to be streamed even after calling | 572 // preload response might still need to be streamed even after calling |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 | 880 |
| 879 DCHECK(!fetch_dispatcher_); | 881 DCHECK(!fetch_dispatcher_); |
| 880 fetch_dispatcher_.reset(new ServiceWorkerFetchDispatcher( | 882 fetch_dispatcher_.reset(new ServiceWorkerFetchDispatcher( |
| 881 CreateFetchRequest(), active_worker, resource_type_, timeout_, | 883 CreateFetchRequest(), active_worker, resource_type_, timeout_, |
| 882 request()->net_log(), | 884 request()->net_log(), |
| 883 base::Bind(&ServiceWorkerURLRequestJob::DidPrepareFetchEvent, | 885 base::Bind(&ServiceWorkerURLRequestJob::DidPrepareFetchEvent, |
| 884 weak_factory_.GetWeakPtr(), active_worker), | 886 weak_factory_.GetWeakPtr(), active_worker), |
| 885 base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent, | 887 base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent, |
| 886 weak_factory_.GetWeakPtr()))); | 888 weak_factory_.GetWeakPtr()))); |
| 887 worker_start_time_ = base::TimeTicks::Now(); | 889 worker_start_time_ = base::TimeTicks::Now(); |
| 888 did_navigation_preload_ = | 890 did_navigation_preload_ = fetch_dispatcher_->MaybeStartNavigationPreload( |
| 889 fetch_dispatcher_->MaybeStartNavigationPreload(request()); | 891 request(), |
| 892 base::BindOnce(&ServiceWorkerURLRequestJob::OnNavigationPreloadResponse, |
| 893 weak_factory_.GetWeakPtr())); |
| 890 fetch_dispatcher_->Run(); | 894 fetch_dispatcher_->Run(); |
| 891 } | 895 } |
| 892 | 896 |
| 897 void ServiceWorkerURLRequestJob::OnNavigationPreloadResponse() { |
| 898 DCHECK(navigation_preload_response_time_.is_null()); |
| 899 navigation_preload_response_time_ = base::TimeTicks::Now(); |
| 900 MaybeReportNavigationPreloadMetrics(); |
| 901 } |
| 902 |
| 903 void ServiceWorkerURLRequestJob::MaybeReportNavigationPreloadMetrics() { |
| 904 if (worker_start_time_.is_null() || worker_ready_time_.is_null() || |
| 905 navigation_preload_response_time_.is_null()) { |
| 906 return; |
| 907 } |
| 908 DCHECK(!reported_navigation_preload_metrics_); |
| 909 reported_navigation_preload_metrics_ = true; |
| 910 |
| 911 ServiceWorkerMetrics::RecordNavigationPreloadResponse( |
| 912 worker_ready_time_ - worker_start_time_, |
| 913 navigation_preload_response_time_ - worker_start_time_, |
| 914 initial_worker_status_, worker_start_situation_); |
| 915 } |
| 916 |
| 893 } // namespace content | 917 } // namespace content |
| OLD | NEW |