diff options
author | falken <falken@chromium.org> | 2015-08-06 18:09:22 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-07 01:09:58 +0000 |
commit | 4a729c84c4faa344b4f6bdc624b454c314289e83 (patch) | |
tree | 0b6b478e495a5c030a91b8e5628a2dbf720fb9e7 | |
parent | add030b55dee834423004bde2a0d92afd8a7be7e (diff) | |
download | chromium_src-4a729c84c4faa344b4f6bdc624b454c314289e83.zip chromium_src-4a729c84c4faa344b4f6bdc624b454c314289e83.tar.gz chromium_src-4a729c84c4faa344b4f6bdc624b454c314289e83.tar.bz2 |
Service Worker: Add UMA for stopping workers.
These may help us understand the cause of
stalled-in-stopping workers.
BUG=509904
Review URL: https://codereview.chromium.org/1276773002
Cr-Commit-Position: refs/heads/master@{#342253}
4 files changed, 33 insertions, 0 deletions
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc index c79fdfe..c2ec4a3 100644 --- a/content/browser/service_worker/embedded_worker_instance.cc +++ b/content/browser/service_worker/embedded_worker_instance.cc @@ -5,6 +5,7 @@ #include "content/browser/service_worker/embedded_worker_instance.h" #include <algorithm> +#include <string> #include <utility> #include "base/bind_helpers.h" @@ -197,6 +198,8 @@ ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() { // the status to STOPPING. status_ = STOPPING; FOR_EACH_OBSERVER(Listener, listener_list_, OnStopping()); + UMA_HISTOGRAM_ENUMERATION("ServiceWorker.SendStopWorker.Status", status, + SERVICE_WORKER_ERROR_MAX_VALUE); return status; } diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.cc b/content/renderer/service_worker/embedded_worker_dispatcher.cc index 1bd384a..8fcea3b 100644 --- a/content/renderer/service_worker/embedded_worker_dispatcher.cc +++ b/content/renderer/service_worker/embedded_worker_dispatcher.cc @@ -5,6 +5,7 @@ #include "content/renderer/service_worker/embedded_worker_dispatcher.h" #include "base/memory/scoped_ptr.h" +#include "base/metrics/histogram_macros.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "content/child/child_process.h" @@ -59,6 +60,13 @@ bool EmbeddedWorkerDispatcher::OnMessageReceived( void EmbeddedWorkerDispatcher::WorkerContextDestroyed( int embedded_worker_id) { + if (ContainsKey(stop_worker_times_, embedded_worker_id)) { + base::TimeTicks stop_time = stop_worker_times_[embedded_worker_id]; + UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.TerminateThread.Time", + base::TimeTicks::Now() - stop_time); + stop_worker_times_.erase(embedded_worker_id); + } + RenderThreadImpl::current()->thread_safe_sender()->Send( new EmbeddedWorkerHostMsg_WorkerStopped(embedded_worker_id)); workers_.Remove(embedded_worker_id); @@ -105,6 +113,7 @@ void EmbeddedWorkerDispatcher::OnStopWorker(int embedded_worker_id) { // This should eventually call WorkerContextDestroyed. (We may need to post // a delayed task to forcibly abort the worker context if we find it // necessary) + stop_worker_times_[embedded_worker_id] = base::TimeTicks::Now(); wrapper->worker()->terminateWorkerContext(); } diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.h b/content/renderer/service_worker/embedded_worker_dispatcher.h index c11ea37..0ecd75a 100644 --- a/content/renderer/service_worker/embedded_worker_dispatcher.h +++ b/content/renderer/service_worker/embedded_worker_dispatcher.h @@ -5,9 +5,12 @@ #ifndef CONTENT_RENDERER_SERVICE_WORKER_EMBEDDED_WORKER_DISPATCHER_H_ #define CONTENT_RENDERER_SERVICE_WORKER_EMBEDDED_WORKER_DISPATCHER_H_ +#include <map> + #include "base/basictypes.h" #include "base/id_map.h" #include "base/memory/weak_ptr.h" +#include "base/time/time.h" #include "ipc/ipc_listener.h" struct EmbeddedWorkerMsg_StartWorker_Params; @@ -33,6 +36,7 @@ class EmbeddedWorkerDispatcher : public IPC::Listener { void OnStopWorker(int embedded_worker_id); IDMap<WorkerWrapper, IDMapOwnPointer> workers_; + std::map<int /* embedded_worker_id */, base::TimeTicks> stop_worker_times_; base::WeakPtrFactory<EmbeddedWorkerDispatcher> weak_factory_; DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerDispatcher); diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index af3ec5c..8f4649f 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -38553,6 +38553,15 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. </summary> </histogram> +<histogram name="ServiceWorker.SendStopWorker.Status" + enum="ServiceWorkerStatusCode"> + <owner>falken@chromium.org</owner> + <summary> + The result of trying to send the IPC message to a renderer process telling + it to stop an embedded worker. Recorded in EmbeddedWorkerInstance::Stop. + </summary> +</histogram> + <histogram name="ServiceWorker.StartNewWorker.Status" enum="ServiceWorkerStatusCode"> <owner>falken@chromium.org</owner> @@ -38644,6 +38653,14 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. </summary> </histogram> +<histogram name="ServiceWorker.TerminateThread.Time" units="milliseconds"> + <owner>falken@chromium.org</owner> + <summary> + The time taken in the renderer process between the main thread asking the + worker thread to terminate and getting ACK that it terminated. + </summary> +</histogram> + <histogram name="ServiceWorker.UnhandledEventRatio" units="percent"> <owner>kinuko@chromium.org</owner> <obsolete> |