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); |