| Index: content/browser/service_worker/service_worker_fetch_dispatcher.cc
|
| diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
|
| index 84eeb7f097d87adc5704ac10077743fd308d1cc6..0f5fa4f71b626d684d1464c795b5174c6321c4bb 100644
|
| --- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc
|
| +++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
|
| @@ -9,6 +9,7 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/metrics/histogram_macros.h"
|
| #include "base/time/time.h"
|
| #include "base/trace_event/trace_event.h"
|
| #include "content/browser/devtools/service_worker_devtools_agent_host.h"
|
| @@ -280,7 +281,8 @@ class ServiceWorkerFetchDispatcher::ResponseCallback {
|
| void Run(int request_id,
|
| ServiceWorkerFetchEventResult fetch_result,
|
| const ServiceWorkerResponse& response,
|
| - base::Time dispatch_event_time) {
|
| + base::Time dispatch_event_time,
|
| + base::TimeTicks response_time) {
|
| const bool handled =
|
| (fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE);
|
| if (!version_->FinishRequest(request_id, handled, dispatch_event_time))
|
| @@ -288,7 +290,8 @@ class ServiceWorkerFetchDispatcher::ResponseCallback {
|
|
|
| // |fetch_dispatcher| is null if the URLRequest was killed.
|
| if (fetch_dispatcher_)
|
| - fetch_dispatcher_->DidFinish(request_id, fetch_result, response);
|
| + fetch_dispatcher_->DidFinish(request_id, fetch_result, response,
|
| + response_time);
|
| }
|
|
|
| private:
|
| @@ -418,6 +421,7 @@ void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
|
| DCHECK(!prepare_callback_.is_null());
|
| base::Closure prepare_callback = prepare_callback_;
|
| prepare_callback.Run();
|
| + worker_ready_time_ = base::TimeTicks::Now();
|
|
|
| net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT);
|
| int fetch_event_id;
|
| @@ -465,7 +469,9 @@ void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
|
| fetch_event_id, *request_, std::move(preload_handle_),
|
| base::Bind(&ServiceWorkerFetchDispatcher::OnFetchEventFinished,
|
| base::Unretained(version_.get()), event_finish_id,
|
| - url_loader_assets_));
|
| + url_loader_assets_, renderer_request_time_,
|
| + handler_creation_time_, job_creation_time_, worker_start_time_,
|
| + worker_ready_time_));
|
| }
|
|
|
| void ServiceWorkerFetchDispatcher::DidFailToDispatch(
|
| @@ -484,7 +490,11 @@ void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) {
|
| void ServiceWorkerFetchDispatcher::DidFinish(
|
| int request_id,
|
| ServiceWorkerFetchEventResult fetch_result,
|
| - const ServiceWorkerResponse& response) {
|
| + const ServiceWorkerResponse& response,
|
| + base::TimeTicks response_time) {
|
| + base::TimeTicks now(base::TimeTicks::Now());
|
| + UMA_HISTOGRAM_TIMES("SWF.D1.Response.WorkerToBrowser", now - response_time);
|
| +
|
| net_log_.EndEvent(net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT);
|
| Complete(SERVICE_WORKER_OK, fetch_result, response);
|
| }
|
| @@ -618,8 +628,24 @@ void ServiceWorkerFetchDispatcher::OnFetchEventFinished(
|
| ServiceWorkerVersion* version,
|
| int event_finish_id,
|
| scoped_refptr<URLLoaderAssets> url_loader_assets,
|
| + base::TimeTicks renderer_request_time,
|
| + base::TimeTicks handler_creation_time,
|
| + base::TimeTicks job_creation_time,
|
| + base::TimeTicks worker_start_time,
|
| + base::TimeTicks worker_ready_time,
|
| + base::TimeTicks dispatch_event_time_ticks,
|
| ServiceWorkerStatusCode status,
|
| base::Time dispatch_event_time) {
|
| + UMA_HISTOGRAM_TIMES("SWF.A1.Request.RendererMainToBrowser",
|
| + handler_creation_time - renderer_request_time);
|
| + UMA_HISTOGRAM_TIMES("SWF.A2.Request.JobCreated",
|
| + job_creation_time - handler_creation_time);
|
| + UMA_HISTOGRAM_TIMES("SWF.A3.Request.WorkerFound",
|
| + worker_start_time - job_creation_time);
|
| + UMA_HISTOGRAM_TIMES("SWF.A4.Request.WorkerReady",
|
| + worker_ready_time - worker_start_time);
|
| + UMA_HISTOGRAM_TIMES("SWF.A5.Request.BrowserToWorker",
|
| + dispatch_event_time_ticks - worker_ready_time);
|
| version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
|
| dispatch_event_time);
|
| }
|
|
|