OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/service_worker/service_worker_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 case ServiceWorkerVersion::ACTIVATED: | 198 case ServiceWorkerVersion::ACTIVATED: |
199 return true; | 199 return true; |
200 } | 200 } |
201 NOTREACHED() << "Unexpected status: " << status; | 201 NOTREACHED() << "Unexpected status: " << status; |
202 return false; | 202 return false; |
203 } | 203 } |
204 | 204 |
205 } // namespace | 205 } // namespace |
206 | 206 |
207 const int ServiceWorkerVersion::kTimeoutTimerDelaySeconds = 30; | 207 const int ServiceWorkerVersion::kTimeoutTimerDelaySeconds = 30; |
208 const int ServiceWorkerVersion::kStartInstalledWorkerTimeoutSeconds = 10; | 208 const int ServiceWorkerVersion::kStartInstalledWorkerTimeoutSeconds = 60; |
209 const int ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes = 5; | 209 const int ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes = 5; |
210 const int ServiceWorkerVersion::kRequestTimeoutMinutes = 5; | 210 const int ServiceWorkerVersion::kRequestTimeoutMinutes = 5; |
211 const int ServiceWorkerVersion::kStopWorkerTimeoutSeconds = 5; | 211 const int ServiceWorkerVersion::kStopWorkerTimeoutSeconds = 5; |
212 | 212 |
213 class ServiceWorkerVersion::Metrics { | 213 class ServiceWorkerVersion::Metrics { |
214 public: | 214 public: |
215 using EventType = ServiceWorkerMetrics::EventType; | 215 using EventType = ServiceWorkerMetrics::EventType; |
216 explicit Metrics(ServiceWorkerVersion* owner) : owner_(owner) {} | 216 explicit Metrics(ServiceWorkerVersion* owner) : owner_(owner) {} |
217 ~Metrics() { | 217 ~Metrics() { |
218 if (owner_->should_exclude_from_uma_) | 218 if (owner_->should_exclude_from_uma_) |
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
801 } | 801 } |
802 | 802 |
803 void ServiceWorkerVersion::OnStarting() { | 803 void ServiceWorkerVersion::OnStarting() { |
804 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); | 804 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); |
805 } | 805 } |
806 | 806 |
807 void ServiceWorkerVersion::OnStarted() { | 807 void ServiceWorkerVersion::OnStarted() { |
808 DCHECK_EQ(RUNNING, running_status()); | 808 DCHECK_EQ(RUNNING, running_status()); |
809 RestartTick(&idle_time_); | 809 RestartTick(&idle_time_); |
810 | 810 |
811 // Reset the interval to normal. If may have been shortened so starting an | |
812 // existing worker can timeout quickly. | |
813 SetTimeoutTimerInterval( | |
814 base::TimeDelta::FromSeconds(kTimeoutTimerDelaySeconds)); | |
815 | |
816 // Fire all start callbacks. | 811 // Fire all start callbacks. |
817 scoped_refptr<ServiceWorkerVersion> protect(this); | 812 scoped_refptr<ServiceWorkerVersion> protect(this); |
818 RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_OK); | 813 RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_OK); |
819 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); | 814 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); |
820 } | 815 } |
821 | 816 |
822 void ServiceWorkerVersion::OnStopping() { | 817 void ServiceWorkerVersion::OnStopping() { |
823 DCHECK(stop_time_.is_null()); | 818 DCHECK(stop_time_.is_null()); |
824 RestartTick(&stop_time_); | 819 RestartTick(&stop_time_); |
825 | 820 |
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1385 RestartTick(&start_time_); | 1380 RestartTick(&start_time_); |
1386 skip_recording_startup_time_ = false; | 1381 skip_recording_startup_time_ = false; |
1387 } | 1382 } |
1388 | 1383 |
1389 // The worker is starting up and not yet idle. | 1384 // The worker is starting up and not yet idle. |
1390 ClearTick(&idle_time_); | 1385 ClearTick(&idle_time_); |
1391 | 1386 |
1392 // Ping will be activated in OnScriptLoaded. | 1387 // Ping will be activated in OnScriptLoaded. |
1393 ping_controller_->Deactivate(); | 1388 ping_controller_->Deactivate(); |
1394 | 1389 |
1395 // Make the timer delay shorter for starting an existing | |
1396 // worker so stalled in starting workers can be timed out quickly. | |
1397 // The timer will be reset to normal in OnStarted or the next start | |
1398 // attempt. | |
1399 const int delay_in_seconds = IsInstalled(status_) | |
1400 ? kStartInstalledWorkerTimeoutSeconds | |
1401 : kTimeoutTimerDelaySeconds; | |
1402 timeout_timer_.Start(FROM_HERE, | 1390 timeout_timer_.Start(FROM_HERE, |
1403 base::TimeDelta::FromSeconds(delay_in_seconds), this, | 1391 base::TimeDelta::FromSeconds(kTimeoutTimerDelaySeconds), |
1404 &ServiceWorkerVersion::OnTimeoutTimer); | 1392 this, &ServiceWorkerVersion::OnTimeoutTimer); |
1405 } | 1393 } |
1406 | 1394 |
1407 void ServiceWorkerVersion::StopTimeoutTimer() { | 1395 void ServiceWorkerVersion::StopTimeoutTimer() { |
1408 timeout_timer_.Stop(); | 1396 timeout_timer_.Stop(); |
1409 ClearTick(&idle_time_); | 1397 ClearTick(&idle_time_); |
1410 | 1398 |
1411 // Trigger update if worker is stale. | 1399 // Trigger update if worker is stale. |
1412 if (!in_dtor_ && !stale_time_.is_null()) { | 1400 if (!in_dtor_ && !stale_time_.is_null()) { |
1413 ClearTick(&stale_time_); | 1401 ClearTick(&stale_time_); |
1414 if (!update_timer_.IsRunning()) | 1402 if (!update_timer_.IsRunning()) |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1769 void ServiceWorkerVersion::OnBeginEvent() { | 1757 void ServiceWorkerVersion::OnBeginEvent() { |
1770 if (should_exclude_from_uma_ || running_status() != RUNNING || | 1758 if (should_exclude_from_uma_ || running_status() != RUNNING || |
1771 idle_time_.is_null()) { | 1759 idle_time_.is_null()) { |
1772 return; | 1760 return; |
1773 } | 1761 } |
1774 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - | 1762 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - |
1775 idle_time_); | 1763 idle_time_); |
1776 } | 1764 } |
1777 | 1765 |
1778 } // namespace content | 1766 } // namespace content |
OLD | NEW |