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

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: switch instead of array of strings 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
« no previous file with comments | « content/browser/service_worker/service_worker_metrics.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 CallbackArray callbacks; 87 CallbackArray callbacks;
88 callbacks.swap(*callbacks_ptr); 88 callbacks.swap(*callbacks_ptr);
89 for (const auto& callback : callbacks) 89 for (const auto& callback : callbacks)
90 callback.Run(arg); 90 callback.Run(arg);
91 } 91 }
92 92
93 template <typename IDMAP, typename... Params> 93 template <typename IDMAP, typename... Params>
94 void RunIDMapCallbacks(IDMAP* requests, const Params&... params) { 94 void RunIDMapCallbacks(IDMAP* requests, const Params&... params) {
95 typename IDMAP::iterator iter(requests); 95 typename IDMAP::iterator iter(requests);
96 while (!iter.IsAtEnd()) { 96 while (!iter.IsAtEnd()) {
97 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
98 iter.GetCurrentValue());
97 iter.GetCurrentValue()->callback.Run(params...); 99 iter.GetCurrentValue()->callback.Run(params...);
98 iter.Advance(); 100 iter.Advance();
99 } 101 }
100 requests->Clear(); 102 requests->Clear();
101 } 103 }
102 104
103 template <typename CallbackType, typename... Params> 105 template <typename CallbackType, typename... Params>
104 bool RunIDMapCallback(IDMap<CallbackType, IDMapOwnPointer>* requests, 106 bool RunIDMapCallback(IDMap<CallbackType, IDMapOwnPointer>* requests,
105 int request_id, 107 int request_id,
106 const Params&... params) { 108 const Params&... params) {
107 CallbackType* request = requests->Lookup(request_id); 109 CallbackType* request = requests->Lookup(request_id);
108 if (!request) 110 if (!request)
109 return false; 111 return false;
110 112
113 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
114 request);
111 request->callback.Run(params...); 115 request->callback.Run(params...);
112 requests->Remove(request_id); 116 requests->Remove(request_id);
113 return true; 117 return true;
114 } 118 }
115 119
116 void RunStartWorkerCallback( 120 void RunStartWorkerCallback(
117 const StatusCallback& callback, 121 const StatusCallback& callback,
118 scoped_refptr<ServiceWorkerRegistration> protect, 122 scoped_refptr<ServiceWorkerRegistration> protect,
119 ServiceWorkerStatusCode status) { 123 ServiceWorkerStatusCode status) {
120 callback.Run(status); 124 callback.Run(status);
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 ServiceWorkerVersion* worker, 894 ServiceWorkerVersion* worker,
891 const char* service_name) 895 const char* service_name)
892 : worker_(worker), service_name_(service_name) {} 896 : worker_(worker), service_name_(service_name) {}
893 897
894 ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() { 898 ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() {
895 IDMap<PendingRequest<StatusCallback>, IDMapOwnPointer>::iterator iter( 899 IDMap<PendingRequest<StatusCallback>, IDMapOwnPointer>::iterator iter(
896 &worker_->custom_requests_); 900 &worker_->custom_requests_);
897 while (!iter.IsAtEnd()) { 901 while (!iter.IsAtEnd()) {
898 PendingRequest<StatusCallback>* request = iter.GetCurrentValue(); 902 PendingRequest<StatusCallback>* request = iter.GetCurrentValue();
899 if (request->mojo_service == service_name_) { 903 if (request->mojo_service == service_name_) {
904 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
905 request);
900 request->callback.Run(SERVICE_WORKER_ERROR_FAILED); 906 request->callback.Run(SERVICE_WORKER_ERROR_FAILED);
901 worker_->custom_requests_.Remove(iter.GetCurrentKey()); 907 worker_->custom_requests_.Remove(iter.GetCurrentKey());
902 } 908 }
903 iter.Advance(); 909 iter.Advance();
904 } 910 }
905 } 911 }
906 912
907 void ServiceWorkerVersion::OnThreadStarted() { 913 void ServiceWorkerVersion::OnThreadStarted() {
908 if (running_status() == STOPPING) 914 if (running_status() == STOPPING)
909 return; 915 return;
(...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 DVLOG(1) << message; 1811 DVLOG(1) << message;
1806 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.TimeoutPhase", 1812 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.TimeoutPhase",
1807 phase, 1813 phase,
1808 EmbeddedWorkerInstance::STARTING_PHASE_MAX_VALUE); 1814 EmbeddedWorkerInstance::STARTING_PHASE_MAX_VALUE);
1809 } 1815 }
1810 1816
1811 template <typename IDMAP> 1817 template <typename IDMAP>
1812 void ServiceWorkerVersion::RemoveCallbackAndStopIfRedundant(IDMAP* callbacks, 1818 void ServiceWorkerVersion::RemoveCallbackAndStopIfRedundant(IDMAP* callbacks,
1813 int request_id) { 1819 int request_id) {
1814 RestartTick(&idle_time_); 1820 RestartTick(&idle_time_);
1821 auto* request = callbacks->Lookup(request_id);
1822 if (request) {
1823 TRACE_EVENT_ASYNC_END0("ServiceWorker", "ServiceWorkerVersion::Request",
1824 request);
1825 }
1815 callbacks->Remove(request_id); 1826 callbacks->Remove(request_id);
1816 if (is_redundant()) { 1827 if (is_redundant()) {
1817 // The stop should be already scheduled, but try to stop immediately, in 1828 // The stop should be already scheduled, but try to stop immediately, in
1818 // order to release worker resources soon. 1829 // order to release worker resources soon.
1819 StopWorkerIfIdle(); 1830 StopWorkerIfIdle();
1820 } 1831 }
1821 } 1832 }
1822 1833
1823 template <typename CallbackType> 1834 template <typename CallbackType>
1824 int ServiceWorkerVersion::AddRequest( 1835 int ServiceWorkerVersion::AddRequest(
1825 const CallbackType& callback, 1836 const CallbackType& callback,
1826 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map, 1837 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map,
1827 RequestType request_type, 1838 RequestType request_type,
1828 ServiceWorkerMetrics::EventType event_type) { 1839 ServiceWorkerMetrics::EventType event_type) {
1829 base::TimeTicks expiration_time = 1840 base::TimeTicks expiration_time =
1830 base::TimeTicks::Now() + 1841 base::TimeTicks::Now() +
1831 base::TimeDelta::FromMinutes(kRequestTimeoutMinutes); 1842 base::TimeDelta::FromMinutes(kRequestTimeoutMinutes);
1832 return AddRequestWithExpiration(callback, callback_map, request_type, 1843 return AddRequestWithExpiration(callback, callback_map, request_type,
1833 event_type, expiration_time, KILL_ON_TIMEOUT); 1844 event_type, expiration_time, KILL_ON_TIMEOUT);
1834 } 1845 }
1835 1846
1836 template <typename CallbackType> 1847 template <typename CallbackType>
1837 int ServiceWorkerVersion::AddRequestWithExpiration( 1848 int ServiceWorkerVersion::AddRequestWithExpiration(
1838 const CallbackType& callback, 1849 const CallbackType& callback,
1839 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map, 1850 IDMap<PendingRequest<CallbackType>, IDMapOwnPointer>* callback_map,
1840 RequestType request_type, 1851 RequestType request_type,
1841 ServiceWorkerMetrics::EventType event_type, 1852 ServiceWorkerMetrics::EventType event_type,
1842 base::TimeTicks expiration, 1853 base::TimeTicks expiration,
1843 TimeoutBehavior timeout_behavior) { 1854 TimeoutBehavior timeout_behavior) {
1844 int request_id = callback_map->Add(new PendingRequest<CallbackType>( 1855 PendingRequest<CallbackType>* request = new PendingRequest<CallbackType>(
1845 callback, base::TimeTicks::Now(), event_type)); 1856 callback, base::TimeTicks::Now(), event_type);
1857 int request_id = callback_map->Add(request);
1858 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", "ServiceWorkerVersion::Request",
1859 request, "Request id", request_id, "Event type",
1860 ServiceWorkerMetrics::EventTypeToString(event_type));
1846 requests_.push(RequestInfo(request_id, request_type, event_type, expiration, 1861 requests_.push(RequestInfo(request_id, request_type, event_type, expiration,
1847 timeout_behavior)); 1862 timeout_behavior));
1848 return request_id; 1863 return request_id;
1849 } 1864 }
1850 1865
1851 bool ServiceWorkerVersion::MaybeTimeOutRequest(const RequestInfo& info) { 1866 bool ServiceWorkerVersion::MaybeTimeOutRequest(const RequestInfo& info) {
1852 switch (info.type) { 1867 switch (info.type) {
1853 case REQUEST_ACTIVATE: 1868 case REQUEST_ACTIVATE:
1854 return RunIDMapCallback(&activate_requests_, info.id, 1869 return RunIDMapCallback(&activate_requests_, info.id,
1855 SERVICE_WORKER_ERROR_TIMEOUT); 1870 SERVICE_WORKER_ERROR_TIMEOUT);
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
2011 void ServiceWorkerVersion::OnBeginEvent() { 2026 void ServiceWorkerVersion::OnBeginEvent() {
2012 if (should_exclude_from_uma_ || running_status() != RUNNING || 2027 if (should_exclude_from_uma_ || running_status() != RUNNING ||
2013 idle_time_.is_null()) { 2028 idle_time_.is_null()) {
2014 return; 2029 return;
2015 } 2030 }
2016 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 2031 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
2017 idle_time_); 2032 idle_time_);
2018 } 2033 }
2019 2034
2020 } // namespace content 2035 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_metrics.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698