| 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,
|
|
|