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

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

Issue 1623583003: Add async tracing to SWVersion::AddRequest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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 <map> 9 #include <map>
10 #include <string> 10 #include <string>
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 CallbackArray callbacks; 84 CallbackArray callbacks;
85 callbacks.swap(*callbacks_ptr); 85 callbacks.swap(*callbacks_ptr);
86 for (const auto& callback : callbacks) 86 for (const auto& callback : callbacks)
87 callback.Run(arg); 87 callback.Run(arg);
88 } 88 }
89 89
90 template <typename IDMAP, typename... Params> 90 template <typename IDMAP, typename... Params>
91 void RunIDMapCallbacks(IDMAP* requests, const Params&... params) { 91 void RunIDMapCallbacks(IDMAP* requests, const Params&... params) {
92 typename IDMAP::iterator iter(requests); 92 typename IDMAP::iterator iter(requests);
93 while (!iter.IsAtEnd()) { 93 while (!iter.IsAtEnd()) {
94 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
95 iter.GetCurrentValue());
94 iter.GetCurrentValue()->callback.Run(params...); 96 iter.GetCurrentValue()->callback.Run(params...);
95 iter.Advance(); 97 iter.Advance();
96 } 98 }
97 requests->Clear(); 99 requests->Clear();
98 } 100 }
99 101
100 template <typename CallbackType, typename... Params> 102 template <typename CallbackType, typename... Params>
101 bool RunIDMapCallback(IDMap<CallbackType, IDMapOwnPointer>* requests, 103 bool RunIDMapCallback(IDMap<CallbackType, IDMapOwnPointer>* requests,
102 int request_id, 104 int request_id,
103 const Params&... params) { 105 const Params&... params) {
104 CallbackType* request = requests->Lookup(request_id); 106 CallbackType* request = requests->Lookup(request_id);
105 if (!request) 107 if (!request)
106 return false; 108 return false;
107 109
110 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
111 request);
108 request->callback.Run(params...); 112 request->callback.Run(params...);
109 requests->Remove(request_id); 113 requests->Remove(request_id);
110 return true; 114 return true;
111 } 115 }
112 116
113 void RunStartWorkerCallback( 117 void RunStartWorkerCallback(
114 const StatusCallback& callback, 118 const StatusCallback& callback,
115 scoped_refptr<ServiceWorkerRegistration> protect, 119 scoped_refptr<ServiceWorkerRegistration> protect,
116 ServiceWorkerStatusCode status) { 120 ServiceWorkerStatusCode status) {
117 callback.Run(status); 121 callback.Run(status);
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 ServiceWorkerVersion* worker, 875 ServiceWorkerVersion* worker,
872 const char* service_name) 876 const char* service_name)
873 : worker_(worker), service_name_(service_name) {} 877 : worker_(worker), service_name_(service_name) {}
874 878
875 ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() { 879 ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() {
876 IDMap<PendingRequest<StatusCallback>, IDMapOwnPointer>::iterator iter( 880 IDMap<PendingRequest<StatusCallback>, IDMapOwnPointer>::iterator iter(
877 &worker_->custom_requests_); 881 &worker_->custom_requests_);
878 while (!iter.IsAtEnd()) { 882 while (!iter.IsAtEnd()) {
879 PendingRequest<StatusCallback>* request = iter.GetCurrentValue(); 883 PendingRequest<StatusCallback>* request = iter.GetCurrentValue();
880 if (request->mojo_service == service_name_) { 884 if (request->mojo_service == service_name_) {
885 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
886 request);
881 request->callback.Run(SERVICE_WORKER_ERROR_FAILED); 887 request->callback.Run(SERVICE_WORKER_ERROR_FAILED);
882 worker_->custom_requests_.Remove(iter.GetCurrentKey()); 888 worker_->custom_requests_.Remove(iter.GetCurrentKey());
883 } 889 }
884 iter.Advance(); 890 iter.Advance();
885 } 891 }
886 } 892 }
887 893
888 void ServiceWorkerVersion::OnThreadStarted() { 894 void ServiceWorkerVersion::OnThreadStarted() {
889 if (running_status() == STOPPING) 895 if (running_status() == STOPPING)
890 return; 896 return;
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after
1783 DVLOG(1) << message; 1789 DVLOG(1) << message;
1784 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.TimeoutPhase", 1790 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.TimeoutPhase",
1785 phase, 1791 phase,
1786 EmbeddedWorkerInstance::STARTING_PHASE_MAX_VALUE); 1792 EmbeddedWorkerInstance::STARTING_PHASE_MAX_VALUE);
1787 } 1793 }
1788 1794
1789 template <typename IDMAP> 1795 template <typename IDMAP>
1790 void ServiceWorkerVersion::RemoveCallbackAndStopIfRedundant(IDMAP* callbacks, 1796 void ServiceWorkerVersion::RemoveCallbackAndStopIfRedundant(IDMAP* callbacks,
1791 int request_id) { 1797 int request_id) {
1792 RestartTick(&idle_time_); 1798 RestartTick(&idle_time_);
1799 auto* request = callbacks->Lookup(request_id);
1800 if (request) {
1801 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
1802 request);
1803 }
1793 callbacks->Remove(request_id); 1804 callbacks->Remove(request_id);
1794 if (is_redundant()) { 1805 if (is_redundant()) {
1795 // The stop should be already scheduled, but try to stop immediately, in 1806 // The stop should be already scheduled, but try to stop immediately, in
1796 // order to release worker resources soon. 1807 // order to release worker resources soon.
1797 StopWorkerIfIdle(); 1808 StopWorkerIfIdle();
1798 } 1809 }
1799 } 1810 }
1800 1811
1801 template <typename CallbackType> 1812 template <typename CallbackType>
1802 int ServiceWorkerVersion::AddRequest( 1813 int ServiceWorkerVersion::AddRequest(
1803 const CallbackType& callback, 1814 const CallbackType& callback,
1804 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map, 1815 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map,
1805 RequestType request_type, 1816 RequestType request_type,
1806 ServiceWorkerMetrics::EventType event_type) { 1817 ServiceWorkerMetrics::EventType event_type) {
1807 base::TimeTicks expiration_time = 1818 base::TimeTicks expiration_time =
1808 base::TimeTicks::Now() + 1819 base::TimeTicks::Now() +
1809 base::TimeDelta::FromMinutes(kRequestTimeoutMinutes); 1820 base::TimeDelta::FromMinutes(kRequestTimeoutMinutes);
1810 return AddRequestWithExpiration(callback, callback_map, request_type, 1821 return AddRequestWithExpiration(callback, callback_map, request_type,
1811 event_type, expiration_time, KILL_ON_TIMEOUT); 1822 event_type, expiration_time, KILL_ON_TIMEOUT);
1812 } 1823 }
1813 1824
1814 template <typename CallbackType> 1825 template <typename CallbackType>
1815 int ServiceWorkerVersion::AddRequestWithExpiration( 1826 int ServiceWorkerVersion::AddRequestWithExpiration(
1816 const CallbackType& callback, 1827 const CallbackType& callback,
1817 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map, 1828 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map,
1818 RequestType request_type, 1829 RequestType request_type,
1819 ServiceWorkerMetrics::EventType event_type, 1830 ServiceWorkerMetrics::EventType event_type,
1820 base::TimeTicks expiration, 1831 base::TimeTicks expiration,
1821 TimeoutBehavior timeout_behavior) { 1832 TimeoutBehavior timeout_behavior) {
1822 int request_id = callback_map->Add(new PendingRequest<CallbackType>( 1833 PendingRequest<CallbackType>* request = new PendingRequest<CallbackType>(
1823 callback, base::TimeTicks::Now(), event_type)); 1834 callback, base::TimeTicks::Now(), event_type);
1835 int request_id = callback_map->Add(request);
1836 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", "ServiceWorkerVersion::Request",
1837 request, "Request id", request_id, "Event type",
1838 ServiceWorkerMetrics::EventTypeToString(event_type));
1824 requests_.push(RequestInfo(request_id, request_type, event_type, expiration, 1839 requests_.push(RequestInfo(request_id, request_type, event_type, expiration,
1825 timeout_behavior)); 1840 timeout_behavior));
1826 return request_id; 1841 return request_id;
1827 } 1842 }
1828 1843
1829 bool ServiceWorkerVersion::MaybeTimeOutRequest(const RequestInfo& info) { 1844 bool ServiceWorkerVersion::MaybeTimeOutRequest(const RequestInfo& info) {
1830 switch (info.type) { 1845 switch (info.type) {
1831 case REQUEST_ACTIVATE: 1846 case REQUEST_ACTIVATE:
1832 return RunIDMapCallback(&activate_requests_, info.id, 1847 return RunIDMapCallback(&activate_requests_, info.id,
1833 SERVICE_WORKER_ERROR_TIMEOUT); 1848 SERVICE_WORKER_ERROR_TIMEOUT);
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1989 void ServiceWorkerVersion::OnBeginEvent() { 2004 void ServiceWorkerVersion::OnBeginEvent() {
1990 if (should_exclude_from_uma_ || running_status() != RUNNING || 2005 if (should_exclude_from_uma_ || running_status() != RUNNING ||
1991 idle_time_.is_null()) { 2006 idle_time_.is_null()) {
1992 return; 2007 return;
1993 } 2008 }
1994 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 2009 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
1995 idle_time_); 2010 idle_time_);
1996 } 2011 }
1997 2012
1998 } // namespace content 2013 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698