| Index: content/browser/service_worker/embedded_worker_instance.cc
|
| diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
|
| index f6f463883623462f21342bbab0df5e2306527c87..b8e06a01601c4e42f3c3438d2e0b154502393715 100644
|
| --- a/content/browser/service_worker/embedded_worker_instance.cc
|
| +++ b/content/browser/service_worker/embedded_worker_instance.cc
|
| @@ -216,7 +216,7 @@ class EmbeddedWorkerInstance::StartTask {
|
| : instance_(instance),
|
| state_(ProcessAllocationState::NOT_ALLOCATED),
|
| is_installed_(false),
|
| - start_situation_(ServiceWorkerMetrics::StartSituation::UNKNOWN),
|
| + started_during_browser_startup_(false),
|
| weak_factory_(this) {
|
| TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "EmbeddedWorkerInstance::Start",
|
| this, "Script", script_url.spec());
|
| @@ -263,7 +263,7 @@ class EmbeddedWorkerInstance::StartTask {
|
| is_installed_ = params->is_installed;
|
|
|
| if (!GetContentClient()->browser()->IsBrowserStartupComplete())
|
| - start_situation_ = ServiceWorkerMetrics::StartSituation::DURING_STARTUP;
|
| + started_during_browser_startup_ = true;
|
|
|
| GURL scope(params->scope);
|
| GURL script_url(params->script_url);
|
| @@ -288,9 +288,6 @@ class EmbeddedWorkerInstance::StartTask {
|
| }
|
|
|
| bool is_installed() const { return is_installed_; }
|
| - ServiceWorkerMetrics::StartSituation start_situation() const {
|
| - return start_situation_;
|
| - }
|
|
|
| private:
|
| void OnProcessAllocated(
|
| @@ -319,19 +316,22 @@ class EmbeddedWorkerInstance::StartTask {
|
| if (is_installed_)
|
| ServiceWorkerMetrics::RecordProcessCreated(is_new_process);
|
|
|
| - if (start_situation_ == ServiceWorkerMetrics::StartSituation::UNKNOWN) {
|
| - if (is_new_process)
|
| - start_situation_ = ServiceWorkerMetrics::StartSituation::NEW_PROCESS;
|
| - else
|
| - start_situation_ =
|
| - ServiceWorkerMetrics::StartSituation::EXISTING_PROCESS;
|
| - }
|
| + ServiceWorkerMetrics::StartSituation start_situation =
|
| + ServiceWorkerMetrics::StartSituation::UNKNOWN;
|
| + if (started_during_browser_startup_)
|
| + start_situation = ServiceWorkerMetrics::StartSituation::DURING_STARTUP;
|
| + else if (is_new_process)
|
| + start_situation = ServiceWorkerMetrics::StartSituation::NEW_PROCESS;
|
| + else
|
| + start_situation = ServiceWorkerMetrics::StartSituation::EXISTING_PROCESS;
|
|
|
| // Notify the instance that a process is allocated.
|
| state_ = ProcessAllocationState::ALLOCATED;
|
| - instance_->OnProcessAllocated(base::WrapUnique(new WorkerProcessHandle(
|
| - instance_->context_, instance_->embedded_worker_id(), process_id,
|
| - is_new_process)));
|
| + instance_->OnProcessAllocated(
|
| + base::WrapUnique(new WorkerProcessHandle(
|
| + instance_->context_, instance_->embedded_worker_id(), process_id,
|
| + is_new_process)),
|
| + start_situation);
|
|
|
| // TODO(bengr): Support changes to this setting while the worker
|
| // is running.
|
| @@ -399,7 +399,7 @@ class EmbeddedWorkerInstance::StartTask {
|
|
|
| // Used for UMA.
|
| bool is_installed_;
|
| - ServiceWorkerMetrics::StartSituation start_situation_;
|
| + bool started_during_browser_startup_;
|
|
|
| base::WeakPtrFactory<StartTask> weak_factory_;
|
|
|
| @@ -412,7 +412,8 @@ bool EmbeddedWorkerInstance::Listener::OnMessageReceived(
|
| }
|
|
|
| EmbeddedWorkerInstance::~EmbeddedWorkerInstance() {
|
| - DCHECK(status_ == STOPPING || status_ == STOPPED) << status_;
|
| + DCHECK(status_ == Status::STOPPING || status_ == Status::STOPPED)
|
| + << static_cast<int>(status_);
|
| devtools_proxy_.reset();
|
| if (registry_->GetWorker(embedded_worker_id_))
|
| registry_->RemoveWorker(process_id(), embedded_worker_id_);
|
| @@ -427,12 +428,12 @@ void EmbeddedWorkerInstance::Start(
|
| // |this| may be destroyed by the callback.
|
| return;
|
| }
|
| - DCHECK(status_ == STOPPED);
|
| + DCHECK(status_ == Status::STOPPED);
|
|
|
| DCHECK(!params->pause_after_download || !params->is_installed);
|
| DCHECK_NE(kInvalidServiceWorkerVersionId, params->service_worker_version_id);
|
| step_time_ = base::TimeTicks::Now();
|
| - status_ = STARTING;
|
| + status_ = Status::STARTING;
|
| starting_phase_ = ALLOCATING_PROCESS;
|
| network_accessed_for_script_ = false;
|
| service_registry_.reset(new ServiceRegistryImpl());
|
| @@ -448,7 +449,8 @@ void EmbeddedWorkerInstance::Start(
|
| }
|
|
|
| ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() {
|
| - DCHECK(status_ == STARTING || status_ == RUNNING) << status_;
|
| + DCHECK(status_ == Status::STARTING || status_ == Status::RUNNING)
|
| + << static_cast<int>(status_);
|
|
|
| // Abort an inflight start task.
|
| inflight_start_task_.reset();
|
| @@ -464,7 +466,7 @@ ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() {
|
| return status;
|
| }
|
|
|
| - status_ = STOPPING;
|
| + status_ = Status::STOPPING;
|
| FOR_EACH_OBSERVER(Listener, listener_list_, OnStopping());
|
| return status;
|
| }
|
| @@ -481,7 +483,7 @@ void EmbeddedWorkerInstance::StopIfIdle() {
|
| ServiceWorkerStatusCode EmbeddedWorkerInstance::SendMessage(
|
| const IPC::Message& message) {
|
| DCHECK_NE(kInvalidEmbeddedWorkerThreadId, thread_id_);
|
| - if (status_ != RUNNING && status_ != STARTING)
|
| + if (status_ != Status::RUNNING && status_ != Status::STARTING)
|
| return SERVICE_WORKER_ERROR_IPC_FAILED;
|
| return registry_->Send(process_id(),
|
| new EmbeddedWorkerContextMsg_MessageToWorker(
|
| @@ -489,14 +491,17 @@ ServiceWorkerStatusCode EmbeddedWorkerInstance::SendMessage(
|
| }
|
|
|
| void EmbeddedWorkerInstance::ResumeAfterDownload() {
|
| - if (process_id() == ChildProcessHost::kInvalidUniqueID || status_ != STARTING)
|
| + if (process_id() == ChildProcessHost::kInvalidUniqueID ||
|
| + status_ != Status::STARTING) {
|
| return;
|
| + }
|
| registry_->Send(process_id(), new EmbeddedWorkerMsg_ResumeAfterDownload(
|
| embedded_worker_id_));
|
| }
|
|
|
| ServiceRegistry* EmbeddedWorkerInstance::GetServiceRegistry() {
|
| - DCHECK(status_ == STARTING || status_ == RUNNING) << status_;
|
| + DCHECK(status_ == Status::STARTING || status_ == Status::RUNNING)
|
| + << static_cast<int>(status_);
|
| return service_registry_.get();
|
| }
|
|
|
| @@ -506,7 +511,7 @@ EmbeddedWorkerInstance::EmbeddedWorkerInstance(
|
| : context_(context),
|
| registry_(context->embedded_worker_registry()),
|
| embedded_worker_id_(embedded_worker_id),
|
| - status_(STOPPED),
|
| + status_(Status::STOPPED),
|
| starting_phase_(NOT_STARTING),
|
| thread_id_(kInvalidEmbeddedWorkerThreadId),
|
| devtools_attached_(false),
|
| @@ -514,12 +519,14 @@ EmbeddedWorkerInstance::EmbeddedWorkerInstance(
|
| weak_factory_(this) {}
|
|
|
| void EmbeddedWorkerInstance::OnProcessAllocated(
|
| - std::unique_ptr<WorkerProcessHandle> handle) {
|
| - DCHECK_EQ(STARTING, status_);
|
| + std::unique_ptr<WorkerProcessHandle> handle,
|
| + ServiceWorkerMetrics::StartSituation start_situation) {
|
| + DCHECK_EQ(Status::STARTING, status_);
|
| DCHECK(!process_handle_);
|
|
|
| process_handle_ = std::move(handle);
|
| starting_phase_ = REGISTERING_TO_DEVTOOLS;
|
| + start_situation_ = start_situation;
|
| FOR_EACH_OBSERVER(Listener, listener_list_, OnProcessAllocated());
|
| }
|
|
|
| @@ -543,8 +550,8 @@ void EmbeddedWorkerInstance::OnStartWorkerMessageSent() {
|
| if (!step_time_.is_null()) {
|
| base::TimeDelta duration = UpdateStepTime();
|
| if (inflight_start_task_->is_installed()) {
|
| - ServiceWorkerMetrics::RecordTimeToSendStartWorker(
|
| - duration, inflight_start_task_->start_situation());
|
| + ServiceWorkerMetrics::RecordTimeToSendStartWorker(duration,
|
| + start_situation_);
|
| }
|
| }
|
|
|
| @@ -586,8 +593,7 @@ void EmbeddedWorkerInstance::OnScriptLoaded() {
|
|
|
| if (!step_time_.is_null()) {
|
| base::TimeDelta duration = UpdateStepTime();
|
| - ServiceWorkerMetrics::RecordTimeToLoad(
|
| - duration, source, inflight_start_task_->start_situation());
|
| + ServiceWorkerMetrics::RecordTimeToLoad(duration, source, start_situation_);
|
| }
|
|
|
| starting_phase_ = SCRIPT_LOADED;
|
| @@ -603,8 +609,7 @@ void EmbeddedWorkerInstance::OnURLJobCreatedForMainScript() {
|
| if (!step_time_.is_null()) {
|
| base::TimeDelta duration = UpdateStepTime();
|
| if (inflight_start_task_->is_installed())
|
| - ServiceWorkerMetrics::RecordTimeToURLJob(
|
| - duration, inflight_start_task_->start_situation());
|
| + ServiceWorkerMetrics::RecordTimeToURLJob(duration, start_situation_);
|
| }
|
| }
|
|
|
| @@ -628,8 +633,7 @@ void EmbeddedWorkerInstance::OnThreadStarted(int thread_id) {
|
| if (!step_time_.is_null()) {
|
| base::TimeDelta duration = UpdateStepTime();
|
| if (inflight_start_task_->is_installed())
|
| - ServiceWorkerMetrics::RecordTimeToStartThread(
|
| - duration, inflight_start_task_->start_situation());
|
| + ServiceWorkerMetrics::RecordTimeToStartThread(duration, start_situation_);
|
| }
|
|
|
| thread_id_ = thread_id;
|
| @@ -659,7 +663,7 @@ void EmbeddedWorkerInstance::OnScriptLoadFailed() {
|
| void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) {
|
| if (!inflight_start_task_)
|
| return;
|
| - DCHECK_EQ(STARTING, status_);
|
| + DCHECK_EQ(Status::STARTING, status_);
|
|
|
| TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start",
|
| inflight_start_task_.get(), "OnScriptEvaluated",
|
| @@ -668,8 +672,8 @@ void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) {
|
| if (!step_time_.is_null()) {
|
| base::TimeDelta duration = UpdateStepTime();
|
| if (success && inflight_start_task_->is_installed())
|
| - ServiceWorkerMetrics::RecordTimeToEvaluateScript(
|
| - duration, inflight_start_task_->start_situation());
|
| + ServiceWorkerMetrics::RecordTimeToEvaluateScript(duration,
|
| + start_situation_);
|
| }
|
|
|
| base::WeakPtr<EmbeddedWorkerInstance> weak_this = weak_factory_.GetWeakPtr();
|
| @@ -682,10 +686,10 @@ void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) {
|
|
|
| void EmbeddedWorkerInstance::OnStarted() {
|
| // Stop is requested before OnStarted is sent back from the worker.
|
| - if (status_ == STOPPING)
|
| + if (status_ == Status::STOPPING)
|
| return;
|
| - DCHECK(status_ == STARTING);
|
| - status_ = RUNNING;
|
| + DCHECK(status_ == Status::STARTING);
|
| + status_ = Status::RUNNING;
|
| inflight_start_task_.reset();
|
| FOR_EACH_OBSERVER(Listener, listener_list_, OnStarted());
|
| }
|
| @@ -785,7 +789,7 @@ void EmbeddedWorkerInstance::ReleaseProcess() {
|
|
|
| devtools_proxy_.reset();
|
| process_handle_.reset();
|
| - status_ = STOPPED;
|
| + status_ = Status::STOPPED;
|
| thread_id_ = kInvalidEmbeddedWorkerThreadId;
|
| service_registry_.reset();
|
| }
|
| @@ -796,7 +800,7 @@ void EmbeddedWorkerInstance::OnStartFailed(const StatusCallback& callback,
|
| ReleaseProcess();
|
| base::WeakPtr<EmbeddedWorkerInstance> weak_this = weak_factory_.GetWeakPtr();
|
| callback.Run(status);
|
| - if (weak_this && old_status != STOPPED)
|
| + if (weak_this && old_status != Status::STOPPED)
|
| FOR_EACH_OBSERVER(Listener, weak_this->listener_list_,
|
| OnStopped(old_status));
|
| }
|
| @@ -812,7 +816,7 @@ base::TimeDelta EmbeddedWorkerInstance::UpdateStepTime() {
|
|
|
| void EmbeddedWorkerInstance::AddMessageToConsole(ConsoleMessageLevel level,
|
| const std::string& message) {
|
| - if (status_ != RUNNING && status_ != STARTING)
|
| + if (status_ != Status::RUNNING && status_ != Status::STARTING)
|
| return;
|
| registry_->Send(process_id(), new EmbeddedWorkerMsg_AddMessageToConsole(
|
| embedded_worker_id_, level, message));
|
| @@ -821,16 +825,16 @@ void EmbeddedWorkerInstance::AddMessageToConsole(ConsoleMessageLevel level,
|
| // static
|
| std::string EmbeddedWorkerInstance::StatusToString(Status status) {
|
| switch (status) {
|
| - case STOPPED:
|
| + case Status::STOPPED:
|
| return "STOPPED";
|
| - case STARTING:
|
| + case Status::STARTING:
|
| return "STARTING";
|
| - case RUNNING:
|
| + case Status::RUNNING:
|
| return "RUNNING";
|
| - case STOPPING:
|
| + case Status::STOPPING:
|
| return "STOPPING";
|
| }
|
| - NOTREACHED() << status;
|
| + NOTREACHED();
|
| return std::string();
|
| }
|
|
|
|
|