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 c08f2659c7b0f86dc4df5b515fd031a8733587c2..ab799ada92e47256bd977b3da35161f95f74eeae 100644 |
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc |
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc |
@@ -8,8 +8,10 @@ |
#include <utility> |
#include "base/bind.h" |
+#include "base/time/time.h" |
#include "base/trace_event/trace_event.h" |
#include "content/browser/service_worker/embedded_worker_status.h" |
+#include "content/browser/service_worker/service_worker_metrics.h" |
#include "content/browser/service_worker/service_worker_version.h" |
#include "content/common/service_worker/service_worker_messages.h" |
#include "content/common/service_worker/service_worker_utils.h" |
@@ -76,12 +78,19 @@ ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType( |
class ServiceWorkerFetchDispatcher::ResponseCallback { |
public: |
ResponseCallback(base::WeakPtr<ServiceWorkerFetchDispatcher> fetch_dispatcher, |
- ServiceWorkerVersion* version) |
- : fetch_dispatcher_(fetch_dispatcher), version_(version) {} |
+ ServiceWorkerVersion* version, |
+ const base::Time& start_time) |
+ : fetch_dispatcher_(fetch_dispatcher), |
+ version_(version), |
+ start_time_(start_time) {} |
void Run(int request_id, |
ServiceWorkerFetchEventResult fetch_result, |
- const ServiceWorkerResponse& response) { |
+ const ServiceWorkerResponse& response, |
+ base::Time event_dispatch_time) { |
+ ServiceWorkerMetrics::RecordFetchEventDispatchingDelay( |
+ event_dispatch_time - start_time_, version_->site_for_uma()); |
+ |
const bool handled = |
(fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE); |
if (!version_->FinishRequest(request_id, handled)) |
@@ -96,6 +105,7 @@ class ServiceWorkerFetchDispatcher::ResponseCallback { |
base::WeakPtr<ServiceWorkerFetchDispatcher> fetch_dispatcher_; |
// Owns |this|. |
ServiceWorkerVersion* version_; |
+ base::Time start_time_; |
DISALLOW_COPY_AND_ASSIGN(ResponseCallback); |
}; |
@@ -197,8 +207,8 @@ void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { |
FetchTypeToWaitUntilEventType(request_->fetch_type), |
base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
- ResponseCallback* response_callback = |
- new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); |
+ ResponseCallback* response_callback = new ResponseCallback( |
+ weak_factory_.GetWeakPtr(), version_.get(), base::Time::Now()); |
version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( |
response_id, |
base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, |