Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(476)

Side by Side Diff: content/browser/service_worker/service_worker_version.cc

Issue 2218943002: Introduce ServiceWorker.EventDispatchingDelay UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: incorporated mpearson@'s comment Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <map> 10 #include <map>
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 OnBeginEvent(); 543 OnBeginEvent();
544 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()) 544 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status())
545 << "Can only start a request with a running worker."; 545 << "Can only start a request with a running worker.";
546 DCHECK(event_type == ServiceWorkerMetrics::EventType::INSTALL || 546 DCHECK(event_type == ServiceWorkerMetrics::EventType::INSTALL ||
547 event_type == ServiceWorkerMetrics::EventType::ACTIVATE || 547 event_type == ServiceWorkerMetrics::EventType::ACTIVATE ||
548 event_type == ServiceWorkerMetrics::EventType::MESSAGE || 548 event_type == ServiceWorkerMetrics::EventType::MESSAGE ||
549 status() == ACTIVATED) 549 status() == ACTIVATED)
550 << "Event of type " << static_cast<int>(event_type) 550 << "Event of type " << static_cast<int>(event_type)
551 << " can only be dispatched to an active worker: " << status(); 551 << " can only be dispatched to an active worker: " << status();
552 552
553 PendingRequest* request = 553 PendingRequest* request = new PendingRequest(
554 new PendingRequest(error_callback, base::TimeTicks::Now(), event_type); 554 error_callback, base::Time::Now(), base::TimeTicks::Now(), event_type);
555 int request_id = pending_requests_.Add(request); 555 int request_id = pending_requests_.Add(request);
556 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", "ServiceWorkerVersion::Request", 556 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", "ServiceWorkerVersion::Request",
557 request, "Request id", request_id, "Event type", 557 request, "Request id", request_id, "Event type",
558 ServiceWorkerMetrics::EventTypeToString(event_type)); 558 ServiceWorkerMetrics::EventTypeToString(event_type));
559 base::TimeTicks expiration_time = base::TimeTicks::Now() + timeout; 559 base::TimeTicks expiration_time = base::TimeTicks::Now() + timeout;
560 timeout_queue_.push( 560 timeout_queue_.push(
561 RequestInfo(request_id, event_type, expiration_time, timeout_behavior)); 561 RequestInfo(request_id, event_type, expiration_time, timeout_behavior));
562 return request_id; 562 return request_id;
563 } 563 }
564 564
565 bool ServiceWorkerVersion::FinishRequest(int request_id, bool was_handled) { 565 bool ServiceWorkerVersion::FinishRequest(int request_id,
566 bool was_handled,
567 base::Time dispatch_event_time) {
566 PendingRequest* request = pending_requests_.Lookup(request_id); 568 PendingRequest* request = pending_requests_.Lookup(request_id);
567 if (!request) 569 if (!request)
568 return false; 570 return false;
569 // TODO(kinuko): Record other event statuses too. 571 // TODO(kinuko): Record other event statuses too.
570 metrics_->RecordEventHandledStatus(request->event_type, was_handled); 572 metrics_->RecordEventHandledStatus(request->event_type, was_handled);
571 ServiceWorkerMetrics::RecordEventDuration( 573 ServiceWorkerMetrics::RecordEventDuration(
572 request->event_type, base::TimeTicks::Now() - request->start_time, 574 request->event_type, base::TimeTicks::Now() - request->start_time_ticks,
573 was_handled); 575 was_handled);
576 ServiceWorkerMetrics::RecordEventDispatchingDelay(
577 request->event_type, dispatch_event_time - request->start_time,
578 site_for_uma());
574 579
575 RestartTick(&idle_time_); 580 RestartTick(&idle_time_);
576 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request", 581 TRACE_EVENT_ASYNC_END1("ServiceWorker", "ServiceWorkerVersion::Request",
577 request, "Handled", was_handled); 582 request, "Handled", was_handled);
578 pending_requests_.Remove(request_id); 583 pending_requests_.Remove(request_id);
579 if (!HasWork()) 584 if (!HasWork())
580 FOR_EACH_OBSERVER(Listener, listeners_, OnNoWork(this)); 585 FOR_EACH_OBSERVER(Listener, listeners_, OnNoWork(this));
581 586
582 return true; 587 return true;
583 } 588 }
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 ServiceWorkerVersion::RequestInfo::~RequestInfo() { 765 ServiceWorkerVersion::RequestInfo::~RequestInfo() {
761 } 766 }
762 767
763 bool ServiceWorkerVersion::RequestInfo::operator>( 768 bool ServiceWorkerVersion::RequestInfo::operator>(
764 const RequestInfo& other) const { 769 const RequestInfo& other) const {
765 return expiration > other.expiration; 770 return expiration > other.expiration;
766 } 771 }
767 772
768 ServiceWorkerVersion::PendingRequest::PendingRequest( 773 ServiceWorkerVersion::PendingRequest::PendingRequest(
769 const StatusCallback& callback, 774 const StatusCallback& callback,
770 const base::TimeTicks& time, 775 base::Time time,
776 const base::TimeTicks& time_ticks,
771 ServiceWorkerMetrics::EventType event_type) 777 ServiceWorkerMetrics::EventType event_type)
772 : error_callback(callback), start_time(time), event_type(event_type) {} 778 : error_callback(callback),
779 start_time(time),
780 start_time_ticks(time_ticks),
781 event_type(event_type) {}
773 782
774 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} 783 ServiceWorkerVersion::PendingRequest::~PendingRequest() {}
775 784
776 ServiceWorkerVersion::BaseMojoServiceWrapper::BaseMojoServiceWrapper( 785 ServiceWorkerVersion::BaseMojoServiceWrapper::BaseMojoServiceWrapper(
777 ServiceWorkerVersion* worker, 786 ServiceWorkerVersion* worker,
778 const char* service_name) 787 const char* service_name)
779 : worker_(worker), service_name_(service_name) {} 788 : worker_(worker), service_name_(service_name) {}
780 789
781 ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() { 790 ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() {
782 IDMap<PendingRequest, IDMapOwnPointer>::iterator iter( 791 IDMap<PendingRequest, IDMapOwnPointer>::iterator iter(
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 running_status() != EmbeddedWorkerStatus::RUNNING) { 993 running_status() != EmbeddedWorkerStatus::RUNNING) {
985 return; 994 return;
986 } 995 }
987 996
988 embedded_worker_->SendMessage( 997 embedded_worker_->SendMessage(
989 ServiceWorkerMsg_DidGetClients(request_id, *clients)); 998 ServiceWorkerMsg_DidGetClients(request_id, *clients));
990 } 999 }
991 1000
992 void ServiceWorkerVersion::OnSimpleEventResponse( 1001 void ServiceWorkerVersion::OnSimpleEventResponse(
993 int request_id, 1002 int request_id,
994 blink::WebServiceWorkerEventResult result) { 1003 blink::WebServiceWorkerEventResult result,
1004 base::Time dispatch_event_time) {
995 // Copy error callback before calling FinishRequest. 1005 // Copy error callback before calling FinishRequest.
996 PendingRequest* request = pending_requests_.Lookup(request_id); 1006 PendingRequest* request = pending_requests_.Lookup(request_id);
997 DCHECK(request) << "Invalid request id"; 1007 DCHECK(request) << "Invalid request id";
998 StatusCallback callback = request->error_callback; 1008 StatusCallback callback = request->error_callback;
999 1009
1000 FinishRequest(request_id, 1010 FinishRequest(request_id,
1001 result == blink::WebServiceWorkerEventResultCompleted); 1011 result == blink::WebServiceWorkerEventResultCompleted,
1012 dispatch_event_time);
1002 1013
1003 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; 1014 ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
1004 if (result == blink::WebServiceWorkerEventResultRejected) 1015 if (result == blink::WebServiceWorkerEventResultRejected)
1005 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; 1016 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
1006 callback.Run(status); 1017 callback.Run(status);
1007 } 1018 }
1008 1019
1009 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) { 1020 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) {
1010 // Just abort if we are shutting down. 1021 // Just abort if we are shutting down.
1011 if (!context_) 1022 if (!context_)
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
1778 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 1789 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
1779 idle_time_); 1790 idle_time_);
1780 } 1791 }
1781 1792
1782 void ServiceWorkerVersion::FinishStartWorker(ServiceWorkerStatusCode status) { 1793 void ServiceWorkerVersion::FinishStartWorker(ServiceWorkerStatusCode status) {
1783 start_worker_first_purpose_ = base::nullopt; 1794 start_worker_first_purpose_ = base::nullopt;
1784 RunCallbacks(this, &start_callbacks_, status); 1795 RunCallbacks(this, &start_callbacks_, status);
1785 } 1796 }
1786 1797
1787 } // namespace content 1798 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698