summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfalken <falken@chromium.org>2015-08-06 18:09:22 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-07 01:09:58 +0000
commit4a729c84c4faa344b4f6bdc624b454c314289e83 (patch)
tree0b6b478e495a5c030a91b8e5628a2dbf720fb9e7
parentadd030b55dee834423004bde2a0d92afd8a7be7e (diff)
downloadchromium_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}
-rw-r--r--content/browser/service_worker/embedded_worker_instance.cc3
-rw-r--r--content/renderer/service_worker/embedded_worker_dispatcher.cc9
-rw-r--r--content/renderer/service_worker/embedded_worker_dispatcher.h4
-rw-r--r--tools/metrics/histograms/histograms.xml17
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>