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

Unified Diff: content/browser/service_worker/service_worker_version.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_version.cc
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 470bc86f5ee2b94066316433b3d34c1670103fe0..621f6cf92e14b334b98fdfcb68dca7571e8840d2 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -28,6 +28,7 @@
#include "content/browser/message_port_service.h"
#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/browser/service_worker/embedded_worker_registry.h"
+#include "content/browser/service_worker/embedded_worker_status.h"
#include "content/browser/service_worker/service_worker_client_utils.h"
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
@@ -103,7 +104,7 @@ void RunTaskAfterStartWorker(
error_callback.Run(status);
return;
}
- if (version->running_status() != ServiceWorkerVersion::RUNNING) {
+ if (version->running_status() != EmbeddedWorkerStatus::RUNNING) {
// We've tried to start the worker (and it has succeeded), but
// it looks it's not running yet.
NOTREACHED() << "The worker's not running after successful StartWorker";
@@ -326,8 +327,10 @@ ServiceWorkerVersion::~ServiceWorkerVersion() {
if (context_)
context_->RemoveLiveVersion(version_id_);
- if (running_status() == STARTING || running_status() == RUNNING)
+ if (running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::RUNNING) {
embedded_worker_->Stop();
+ }
embedded_worker_->RemoveListener(this);
}
@@ -446,7 +449,7 @@ void ServiceWorkerVersion::StopWorker(const StatusCallback& callback) {
TRACE_EVENT_SCOPE_THREAD, "Script", script_url_.spec(),
"Status", VersionStatusToString(status_));
- if (running_status() == STOPPED) {
+ if (running_status() == EmbeddedWorkerStatus::STOPPED) {
RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
return;
}
@@ -509,7 +512,7 @@ int ServiceWorkerVersion::StartRequestWithCustomTimeout(
const base::TimeDelta& timeout,
TimeoutBehavior timeout_behavior) {
OnBeginEvent();
- DCHECK_EQ(RUNNING, running_status())
+ DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status())
<< "Can only start a request with a running worker.";
DCHECK(event_type == ServiceWorkerMetrics::EventType::INSTALL ||
event_type == ServiceWorkerMetrics::EventType::ACTIVATE ||
@@ -556,7 +559,7 @@ void ServiceWorkerVersion::RunAfterStartWorker(
ServiceWorkerMetrics::EventType purpose,
const base::Closure& task,
const StatusCallback& error_callback) {
- if (running_status() == RUNNING) {
+ if (running_status() == EmbeddedWorkerStatus::RUNNING) {
DCHECK(start_callbacks_.empty());
task.Run();
return;
@@ -630,7 +633,8 @@ void ServiceWorkerVersion::SetStartWorkerStatusCode(
void ServiceWorkerVersion::Doom() {
DCHECK(!HasControllee());
SetStatus(REDUNDANT);
- if (running_status() == STARTING || running_status() == RUNNING) {
+ if (running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::RUNNING) {
if (embedded_worker()->devtools_attached())
stop_when_devtools_detached_ = true;
else
@@ -647,8 +651,10 @@ void ServiceWorkerVersion::SetDevToolsAttached(bool attached) {
embedded_worker()->set_devtools_attached(attached);
if (stop_when_devtools_detached_ && !attached) {
DCHECK_EQ(REDUNDANT, status());
- if (running_status() == STARTING || running_status() == RUNNING)
+ if (running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::RUNNING) {
embedded_worker_->Stop();
+ }
return;
}
if (attached) {
@@ -667,8 +673,9 @@ void ServiceWorkerVersion::SetDevToolsAttached(bool attached) {
if (!start_callbacks_.empty()) {
// Reactivate the timer for start timeout.
DCHECK(timeout_timer_.IsRunning());
- DCHECK(running_status() == STARTING || running_status() == STOPPING)
- << running_status();
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::STOPPING)
+ << static_cast<int>(running_status());
RestartTick(&start_time_);
}
@@ -740,7 +747,7 @@ ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() {
}
void ServiceWorkerVersion::OnThreadStarted() {
- DCHECK_EQ(STARTING, running_status());
+ DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status());
// Activate ping/pong now that JavaScript execution will start.
ping_controller_->Activate();
}
@@ -750,7 +757,7 @@ void ServiceWorkerVersion::OnStarting() {
}
void ServiceWorkerVersion::OnStarted() {
- DCHECK_EQ(RUNNING, running_status());
+ DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status());
RestartTick(&idle_time_);
// Fire all start callbacks.
@@ -775,8 +782,7 @@ void ServiceWorkerVersion::OnStopping() {
FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this));
}
-void ServiceWorkerVersion::OnStopped(
- EmbeddedWorkerInstance::Status old_status) {
+void ServiceWorkerVersion::OnStopped(EmbeddedWorkerStatus old_status) {
if (IsInstalled(status())) {
ServiceWorkerMetrics::RecordWorkerStopped(
ServiceWorkerMetrics::StopStatus::NORMAL);
@@ -787,8 +793,7 @@ void ServiceWorkerVersion::OnStopped(
OnStoppedInternal(old_status);
}
-void ServiceWorkerVersion::OnDetached(
- EmbeddedWorkerInstance::Status old_status) {
+void ServiceWorkerVersion::OnDetached(EmbeddedWorkerStatus old_status) {
if (IsInstalled(status())) {
ServiceWorkerMetrics::RecordWorkerStopped(
ServiceWorkerMetrics::StopStatus::DETACH_BY_REGISTRY);
@@ -899,8 +904,10 @@ void ServiceWorkerVersion::OnGetClientFinished(
// When Clients.get() is called on the script evaluation phase, the running
// status can be STARTING here.
- if (running_status() != STARTING && running_status() != RUNNING)
+ if (running_status() != EmbeddedWorkerStatus::STARTING &&
+ running_status() != EmbeddedWorkerStatus::RUNNING) {
return;
+ }
embedded_worker_->SendMessage(
ServiceWorkerMsg_DidGetClient(request_id, client_info));
@@ -927,8 +934,10 @@ void ServiceWorkerVersion::OnGetClientsFinished(int request_id,
// When Clients.matchAll() is called on the script evaluation phase, the
// running status can be STARTING here.
- if (running_status() != STARTING && running_status() != RUNNING)
+ if (running_status() != EmbeddedWorkerStatus::STARTING &&
+ running_status() != EmbeddedWorkerStatus::RUNNING) {
return;
+ }
embedded_worker_->SendMessage(
ServiceWorkerMsg_DidGetClients(request_id, *clients));
@@ -993,7 +1002,7 @@ void ServiceWorkerVersion::OnOpenWindowFinished(
const ServiceWorkerClientInfo& client_info) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (running_status() != RUNNING)
+ if (running_status() != EmbeddedWorkerStatus::RUNNING)
return;
if (status != SERVICE_WORKER_OK) {
@@ -1101,7 +1110,7 @@ void ServiceWorkerVersion::OnFocusClientFinished(
const ServiceWorkerClientInfo& client_info) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (running_status() != RUNNING)
+ if (running_status() != EmbeddedWorkerStatus::RUNNING)
return;
embedded_worker_->SendMessage(
@@ -1157,7 +1166,7 @@ void ServiceWorkerVersion::OnNavigateClientFinished(
const ServiceWorkerClientInfo& client_info) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (running_status() != RUNNING)
+ if (running_status() != EmbeddedWorkerStatus::RUNNING)
return;
if (status != SERVICE_WORKER_OK) {
@@ -1187,8 +1196,10 @@ void ServiceWorkerVersion::OnSkipWaiting(int request_id) {
}
void ServiceWorkerVersion::DidSkipWaiting(int request_id) {
- if (running_status() == STARTING || running_status() == RUNNING)
+ if (running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::RUNNING) {
embedded_worker_->SendMessage(ServiceWorkerMsg_DidSkipWaiting(request_id));
+ }
}
void ServiceWorkerVersion::OnClaimClients(int request_id) {
@@ -1287,14 +1298,14 @@ void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker(
MarkIfStale();
switch (running_status()) {
- case RUNNING:
+ case EmbeddedWorkerStatus::RUNNING:
RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
return;
- case STARTING:
+ case EmbeddedWorkerStatus::STARTING:
DCHECK(!start_callbacks_.empty());
break;
- case STOPPING:
- case STOPPED:
+ case EmbeddedWorkerStatus::STOPPING:
+ case EmbeddedWorkerStatus::STOPPED:
if (start_callbacks_.empty()) {
int trace_id = NextTraceId();
TRACE_EVENT_ASYNC_BEGIN2(
@@ -1313,13 +1324,13 @@ void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker(
start_callbacks_.push_back(
base::Bind(&RunStartWorkerCallback, callback, protect));
- if (running_status() == STOPPED)
+ if (running_status() == EmbeddedWorkerStatus::STOPPED)
StartWorkerInternal();
DCHECK(timeout_timer_.IsRunning());
}
void ServiceWorkerVersion::StartWorkerInternal() {
- DCHECK_EQ(STOPPED, running_status());
+ DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status());
DCHECK(!metrics_);
metrics_.reset(new Metrics(this));
@@ -1385,9 +1396,10 @@ void ServiceWorkerVersion::SetTimeoutTimerInterval(base::TimeDelta interval) {
}
void ServiceWorkerVersion::OnTimeoutTimer() {
- DCHECK(running_status() == STARTING || running_status() == RUNNING ||
- running_status() == STOPPING)
- << running_status();
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::RUNNING ||
+ running_status() == EmbeddedWorkerStatus::STOPPING)
+ << static_cast<int>(running_status());
if (!context_)
return;
@@ -1397,7 +1409,7 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
// Stopping the worker hasn't finished within a certain period.
if (GetTickDuration(stop_time_) >
base::TimeDelta::FromSeconds(kStopWorkerTimeoutSeconds)) {
- DCHECK_EQ(STOPPING, running_status());
+ DCHECK_EQ(EmbeddedWorkerStatus::STOPPING, running_status());
if (IsInstalled(status())) {
ServiceWorkerMetrics::RecordWorkerStopped(
ServiceWorkerMetrics::StopStatus::TIMEOUT);
@@ -1413,7 +1425,7 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
embedded_worker_->AddListener(this);
// Call OnStoppedInternal to fail callbacks and possibly restart.
- OnStoppedInternal(EmbeddedWorkerInstance::STOPPING);
+ OnStoppedInternal(EmbeddedWorkerStatus::STOPPING);
return;
}
@@ -1432,11 +1444,12 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
? base::TimeDelta::FromSeconds(kStartInstalledWorkerTimeoutSeconds)
: base::TimeDelta::FromMinutes(kStartNewWorkerTimeoutMinutes);
if (GetTickDuration(start_time_) > start_limit) {
- DCHECK(running_status() == STARTING || running_status() == STOPPING)
- << running_status();
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::STOPPING)
+ << static_cast<int>(running_status());
scoped_refptr<ServiceWorkerVersion> protect(this);
RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_ERROR_TIMEOUT);
- if (running_status() == STARTING)
+ if (running_status() == EmbeddedWorkerStatus::STARTING)
embedded_worker_->Stop();
return;
}
@@ -1454,12 +1467,12 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
}
requests_.pop();
}
- if (stop_for_timeout && running_status() != STOPPING)
+ if (stop_for_timeout && running_status() != EmbeddedWorkerStatus::STOPPING)
embedded_worker_->Stop();
// For the timeouts below, there are no callbacks to timeout so there is
// nothing more to do if the worker is already stopping.
- if (running_status() == STOPPING)
+ if (running_status() == EmbeddedWorkerStatus::STOPPING)
return;
// The worker has been idle for longer than a certain period.
@@ -1474,12 +1487,14 @@ void ServiceWorkerVersion::OnTimeoutTimer() {
}
ServiceWorkerStatusCode ServiceWorkerVersion::PingWorker() {
- DCHECK(running_status() == STARTING || running_status() == RUNNING);
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::RUNNING);
return embedded_worker_->SendMessage(ServiceWorkerMsg_Ping());
}
void ServiceWorkerVersion::OnPingTimeout() {
- DCHECK(running_status() == STARTING || running_status() == RUNNING);
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING ||
+ running_status() == EmbeddedWorkerStatus::RUNNING);
// TODO(falken): Show a message to the developer that the SW was stopped due
// to timeout (crbug.com/457968). Also, change the error code to
// SERVICE_WORKER_ERROR_TIMEOUT.
@@ -1489,7 +1504,8 @@ void ServiceWorkerVersion::OnPingTimeout() {
void ServiceWorkerVersion::StopWorkerIfIdle() {
if (HasInflightRequests() && !ping_controller_->IsTimedOut())
return;
- if (running_status() == STOPPED || running_status() == STOPPING ||
+ if (running_status() == EmbeddedWorkerStatus::STOPPED ||
+ running_status() == EmbeddedWorkerStatus::STOPPING ||
!stop_callbacks_.empty()) {
return;
}
@@ -1534,11 +1550,11 @@ void ServiceWorkerVersion::RecordStartWorkerResult(
return;
EmbeddedWorkerInstance::StartingPhase phase =
EmbeddedWorkerInstance::NOT_STARTING;
- EmbeddedWorkerInstance::Status running_status = embedded_worker_->status();
+ EmbeddedWorkerStatus running_status = embedded_worker_->status();
// Build an artifical JavaScript exception to show in the ServiceWorker
// log for developers; it's not user-facing so it's not a localized resource.
std::string message = "ServiceWorker startup timed out. ";
- if (running_status != EmbeddedWorkerInstance::STARTING) {
+ if (running_status != EmbeddedWorkerStatus::STARTING) {
message.append("The worker had unexpected status: ");
message.append(EmbeddedWorkerInstance::StatusToString(running_status));
} else {
@@ -1637,9 +1653,8 @@ void ServiceWorkerVersion::FoundRegistrationForUpdate(
false /* force_bypass_cache */);
}
-void ServiceWorkerVersion::OnStoppedInternal(
- EmbeddedWorkerInstance::Status old_status) {
- DCHECK_EQ(STOPPED, running_status());
+void ServiceWorkerVersion::OnStoppedInternal(EmbeddedWorkerStatus old_status) {
+ DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status());
scoped_refptr<ServiceWorkerVersion> protect;
if (!in_dtor_)
protect = this;
@@ -1648,7 +1663,7 @@ void ServiceWorkerVersion::OnStoppedInternal(
metrics_.reset();
bool should_restart = !is_redundant() && !start_callbacks_.empty() &&
- (old_status != EmbeddedWorkerInstance::STARTING) &&
+ (old_status != EmbeddedWorkerStatus::STARTING) &&
!in_dtor_ && !ping_controller_->IsTimedOut();
if (!stop_time_.is_null()) {
@@ -1702,7 +1717,8 @@ void ServiceWorkerVersion::OnMojoConnectionError(const char* service_name) {
}
void ServiceWorkerVersion::OnBeginEvent() {
- if (should_exclude_from_uma_ || running_status() != RUNNING ||
+ if (should_exclude_from_uma_ ||
+ running_status() != EmbeddedWorkerStatus::RUNNING ||
idle_time_.is_null()) {
return;
}

Powered by Google App Engine
This is Rietveld 408576698