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

Unified Diff: content/browser/service_worker/service_worker_url_request_job.cc

Issue 2039743003: Introduce ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time UMA. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_url_request_job.cc
diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc
index e06e5935e242c6eada3978d177e1aeeb823458eb..c117b43fe65e1d78d487d3e65e4dcfdfc165529f 100644
--- a/content/browser/service_worker/service_worker_url_request_job.cc
+++ b/content/browser/service_worker/service_worker_url_request_job.cc
@@ -22,6 +22,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "content/browser/resource_context_impl.h"
+#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
#include "content/browser/service_worker/service_worker_provider_host.h"
#include "content/browser/service_worker/service_worker_response_info.h"
@@ -632,9 +633,34 @@ void ServiceWorkerURLRequestJob::CreateRequestBodyBlob(std::string* blob_uuid,
*blob_size = total_size;
}
-void ServiceWorkerURLRequestJob::DidPrepareFetchEvent() {
+void ServiceWorkerURLRequestJob::DidPrepareFetchEvent(
+ scoped_refptr<ServiceWorkerVersion> version) {
worker_ready_time_ = base::TimeTicks::Now();
load_timing_info_.send_start = worker_ready_time_;
+
+ // Record the time taken to find a Service Worker registration and wait for a
+ // worker started to send a FetchEvent request for a main frame resource. The
+ // measurement starts when the browser process recieves the request and ends
+ // when it finds a running worker or it successfully starts a worker. We
+ // don't record it in the following situations:
+ // 1) The worker was not activated yet. This is intended to avoid including
+ // the time for the activation.
+ // 2) The worker was started for the fetch AND DevTools was attached during
+ // startup. This is intended to avoid including the time for debugging.
+ // 3) The request is for New Tab Page.
+ if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME)
+ return;
+ if (worker_already_activated_)
+ return;
+ if (version->skip_recording_startup_time() &&
+ initial_worker_status_ != EmbeddedWorkerStatus::RUNNING) {
+ return;
+ }
+ if (ServiceWorkerMetrics::ShouldExcludeURLFromHistogram(request()->url()))
+ return;
+ ServiceWorkerMetrics::RecordActivatedWorkerPreparationTimeForMainFrame(
+ worker_ready_time_ - request()->creation_time(), initial_worker_status_,
+ version->embedded_worker()->start_situation());
}
void ServiceWorkerURLRequestJob::DidDispatchFetchEvent(
@@ -962,11 +988,15 @@ void ServiceWorkerURLRequestJob::RequestBodyBlobsCompleted(bool success) {
return;
}
+ worker_already_activated_ =
+ active_worker->status() == ServiceWorkerVersion::ACTIVATED;
+ initial_worker_status_ = active_worker->running_status();
+
DCHECK(!fetch_dispatcher_);
fetch_dispatcher_.reset(new ServiceWorkerFetchDispatcher(
CreateFetchRequest(), active_worker, resource_type_,
base::Bind(&ServiceWorkerURLRequestJob::DidPrepareFetchEvent,
- weak_factory_.GetWeakPtr()),
+ weak_factory_.GetWeakPtr(), active_worker),
base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent,
weak_factory_.GetWeakPtr())));
worker_start_time_ = base::TimeTicks::Now();

Powered by Google App Engine
This is Rietveld 408576698