Chromium Code Reviews| 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 0c3fedb14f76a46b659781a10ad2892beeeda60b..2a2477562bc4df9df8311be8cc03e0da63688b3e 100644 |
| --- a/content/browser/service_worker/service_worker_version.cc |
| +++ b/content/browser/service_worker/service_worker_version.cc |
| @@ -4,6 +4,9 @@ |
| #include "content/browser/service_worker/service_worker_version.h" |
| +#include <map> |
| +#include <string> |
| + |
| #include "base/command_line.h" |
| #include "base/location.h" |
| #include "base/memory/ref_counted.h" |
| @@ -394,20 +397,30 @@ const int ServiceWorkerVersion::kRequestTimeoutMinutes = 5; |
| class ServiceWorkerVersion::Metrics { |
| public: |
| - Metrics() {} |
| + using EventType = ServiceWorkerMetrics::EventType; |
| + Metrics(const GURL& scope) : scope_(scope) {} |
|
falken
2015/06/25 09:31:39
nit: explicit
kinuko
2015/07/02 14:27:26
Acknowledged.
|
| ~Metrics() { |
| - ServiceWorkerMetrics::RecordEventStatus(fired_events, handled_events); |
| + for (const auto& ev : event_stats_) { |
| + ServiceWorkerMetrics::RecordPerWorkerEventHandledStatus( |
| + scope_, ev.first, ev.second.handled_events, ev.second.fired_events); |
| + } |
| } |
| - void RecordEventStatus(bool handled) { |
| - ++fired_events; |
| + void RecordEventHandledStatus(EventType event, bool handled) { |
| + ServiceWorkerMetrics::RecordEventHandledStatus(scope_, event, handled); |
| + event_stats_[event].fired_events++; |
| if (handled) |
| - ++handled_events; |
| + event_stats_[event].handled_events++; |
| } |
| private: |
| - size_t fired_events = 0; |
| - size_t handled_events = 0; |
| + struct EventStat { |
| + size_t fired_events = 0; |
| + size_t handled_events = 0; |
| + }; |
| + |
| + const GURL scope_; |
| + std::map<EventType, EventStat> event_stats_; |
| DISALLOW_COPY_AND_ASSIGN(Metrics); |
| }; |
| @@ -480,7 +493,7 @@ ServiceWorkerVersion::ServiceWorkerVersion( |
| context_(context), |
| script_cache_map_(this, context), |
| ping_controller_(new PingController(this)), |
| - metrics_(new Metrics), |
| + metrics_(new Metrics(scope_)), |
| weak_factory_(this) { |
| DCHECK(context_); |
| DCHECK(registration); |
| @@ -1347,7 +1360,8 @@ void ServiceWorkerVersion::OnFetchEventFinished( |
| // TODO(kinuko): Record other event statuses too. |
| const bool handled = (result == SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE); |
| - metrics_->RecordEventStatus(handled); |
| + metrics_->RecordEventHandledStatus(ServiceWorkerMetrics::EVENT_TYPE_FETCH, |
| + handled); |
| scoped_refptr<ServiceWorkerVersion> protect(this); |
| callback->Run(SERVICE_WORKER_OK, result, response); |