| Index: content/browser/service_worker/service_worker_version.cc
|
| diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
|
| index 13f1305c6966e2bd2b31f80ee933473ebea0e7fb..fb22db42dea541943905818470e2f64d03ae67be 100644
|
| --- a/content/browser/service_worker/service_worker_version.cc
|
| +++ b/content/browser/service_worker/service_worker_version.cc
|
| @@ -550,8 +550,8 @@ int ServiceWorkerVersion::StartRequestWithCustomTimeout(
|
| << "Event of type " << static_cast<int>(event_type)
|
| << " can only be dispatched to an active worker: " << status();
|
|
|
| - PendingRequest* request =
|
| - new PendingRequest(error_callback, base::TimeTicks::Now(), event_type);
|
| + PendingRequest* request = new PendingRequest(
|
| + error_callback, base::Time::Now(), base::TimeTicks::Now(), event_type);
|
| int request_id = pending_requests_.Add(request);
|
| TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", "ServiceWorkerVersion::Request",
|
| request, "Request id", request_id, "Event type",
|
| @@ -562,15 +562,20 @@ int ServiceWorkerVersion::StartRequestWithCustomTimeout(
|
| return request_id;
|
| }
|
|
|
| -bool ServiceWorkerVersion::FinishRequest(int request_id, bool was_handled) {
|
| +bool ServiceWorkerVersion::FinishRequest(int request_id,
|
| + bool was_handled,
|
| + base::Time dispatch_event_time) {
|
| PendingRequest* request = pending_requests_.Lookup(request_id);
|
| if (!request)
|
| return false;
|
| // TODO(kinuko): Record other event statuses too.
|
| metrics_->RecordEventHandledStatus(request->event_type, was_handled);
|
| ServiceWorkerMetrics::RecordEventDuration(
|
| - request->event_type, base::TimeTicks::Now() - request->start_time,
|
| + request->event_type, base::TimeTicks::Now() - request->start_time_ticks,
|
| was_handled);
|
| + ServiceWorkerMetrics::RecordEventDispatchingDelay(
|
| + request->event_type, dispatch_event_time - request->start_time,
|
| + site_for_uma());
|
|
|
| RestartTick(&idle_time_);
|
| TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request",
|
| @@ -767,9 +772,13 @@ bool ServiceWorkerVersion::RequestInfo::operator>(
|
|
|
| ServiceWorkerVersion::PendingRequest::PendingRequest(
|
| const StatusCallback& callback,
|
| - const base::TimeTicks& time,
|
| + base::Time time,
|
| + const base::TimeTicks& time_ticks,
|
| ServiceWorkerMetrics::EventType event_type)
|
| - : error_callback(callback), start_time(time), event_type(event_type) {}
|
| + : error_callback(callback),
|
| + start_time(time),
|
| + start_time_ticks(time_ticks),
|
| + event_type(event_type) {}
|
|
|
| ServiceWorkerVersion::PendingRequest::~PendingRequest() {}
|
|
|
| @@ -991,14 +1000,16 @@ void ServiceWorkerVersion::OnGetClientsFinished(int request_id,
|
|
|
| void ServiceWorkerVersion::OnSimpleEventResponse(
|
| int request_id,
|
| - blink::WebServiceWorkerEventResult result) {
|
| + blink::WebServiceWorkerEventResult result,
|
| + base::Time dispatch_event_time) {
|
| // Copy error callback before calling FinishRequest.
|
| PendingRequest* request = pending_requests_.Lookup(request_id);
|
| DCHECK(request) << "Invalid request id";
|
| StatusCallback callback = request->error_callback;
|
|
|
| FinishRequest(request_id,
|
| - result == blink::WebServiceWorkerEventResultCompleted);
|
| + result == blink::WebServiceWorkerEventResultCompleted,
|
| + dispatch_event_time);
|
|
|
| ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
|
| if (result == blink::WebServiceWorkerEventResultRejected)
|
|
|