Commit 599b266d authored by Matt Falkenhagen's avatar Matt Falkenhagen Committed by Commit Bot

service worker: Add instrumentation for crash on bad timing.

The crash is a renderer kill when the browser receives timing data
that goes back in time. TimeTicks is supposed to be monotonically
increasing.

Bug: 881100
Change-Id: I3337b3e4102dfebfb3d2eeeb28cef85ecaf5e4ea
Reviewed-on: https://chromium-review.googlesource.com/c/1322251Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Commit-Queue: Matt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605989}
parent faa9ab42
...@@ -737,6 +737,17 @@ void ServiceWorkerContextClient::WorkerContextStarted( ...@@ -737,6 +737,17 @@ void ServiceWorkerContextClient::WorkerContextStarted(
void ServiceWorkerContextClient::WillEvaluateScript() { void ServiceWorkerContextClient::WillEvaluateScript() {
DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); DCHECK(worker_task_runner_->RunsTasksInCurrentSequence());
start_timing_->script_evaluation_start_time = base::TimeTicks::Now(); start_timing_->script_evaluation_start_time = base::TimeTicks::Now();
// Temporary CHECK for https://crbug.com/881100
int64_t t0 =
start_timing_->start_worker_received_time.since_origin().InMicroseconds();
int64_t t1 = start_timing_->script_evaluation_start_time.since_origin()
.InMicroseconds();
base::debug::Alias(&t0);
base::debug::Alias(&t1);
CHECK_LE(start_timing_->start_worker_received_time,
start_timing_->script_evaluation_start_time);
(*instance_host_)->OnScriptEvaluationStart(); (*instance_host_)->OnScriptEvaluationStart();
} }
...@@ -744,6 +755,16 @@ void ServiceWorkerContextClient::DidEvaluateScript(bool success) { ...@@ -744,6 +755,16 @@ void ServiceWorkerContextClient::DidEvaluateScript(bool success) {
DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); DCHECK(worker_task_runner_->RunsTasksInCurrentSequence());
start_timing_->script_evaluation_end_time = base::TimeTicks::Now(); start_timing_->script_evaluation_end_time = base::TimeTicks::Now();
// Temporary CHECK for https://crbug.com/881100
int64_t t0 = start_timing_->script_evaluation_start_time.since_origin()
.InMicroseconds();
int64_t t1 =
start_timing_->script_evaluation_end_time.since_origin().InMicroseconds();
base::debug::Alias(&t0);
base::debug::Alias(&t1);
CHECK_LE(start_timing_->script_evaluation_start_time,
start_timing_->script_evaluation_end_time);
blink::mojom::ServiceWorkerStartStatus status = blink::mojom::ServiceWorkerStartStatus status =
success ? blink::mojom::ServiceWorkerStartStatus::kNormalCompletion success ? blink::mojom::ServiceWorkerStartStatus::kNormalCompletion
: blink::mojom::ServiceWorkerStartStatus::kAbruptCompletion; : blink::mojom::ServiceWorkerStartStatus::kAbruptCompletion;
...@@ -1368,6 +1389,21 @@ void ServiceWorkerContextClient::SendWorkerStarted( ...@@ -1368,6 +1389,21 @@ void ServiceWorkerContextClient::SendWorkerStarted(
service_worker_version_id_, service_worker_scope_, script_url_); service_worker_version_id_, service_worker_scope_, script_url_);
} }
// Temporary CHECK for https://crbug.com/881100
int64_t t0 =
start_timing_->start_worker_received_time.since_origin().InMicroseconds();
int64_t t1 = start_timing_->script_evaluation_start_time.since_origin()
.InMicroseconds();
int64_t t2 =
start_timing_->script_evaluation_end_time.since_origin().InMicroseconds();
base::debug::Alias(&t0);
base::debug::Alias(&t1);
base::debug::Alias(&t2);
CHECK_LE(start_timing_->start_worker_received_time,
start_timing_->script_evaluation_start_time);
CHECK_LE(start_timing_->script_evaluation_start_time,
start_timing_->script_evaluation_end_time);
(*instance_host_) (*instance_host_)
->OnStarted(status, WorkerThread::GetCurrentId(), ->OnStarted(status, WorkerThread::GetCurrentId(),
std::move(start_timing_)); std::move(start_timing_));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment