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); |
} |