Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / mojo / services / test_service / test_request_tracker_impl.cc
blob09fa4d5fad75600aef4ab9be36773b69c9ee8c32
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "mojo/services/test_service/test_request_tracker_impl.h"
7 namespace mojo {
8 namespace test {
10 TrackingContext::TrackingContext() : next_id(1) {
13 TrackingContext::~TrackingContext() {
16 TestRequestTrackerImpl::TestRequestTrackerImpl(
17 InterfaceRequest<TestRequestTracker> request,
18 TrackingContext* context)
19 : context_(context), binding_(this, request.Pass()), weak_factory_(this) {
22 TestRequestTrackerImpl::~TestRequestTrackerImpl() {
25 void TestRequestTrackerImpl::RecordStats(
26 uint64_t client_id,
27 ServiceStatsPtr stats) {
28 assert(context_->ids_to_names.find(client_id) !=
29 context_->ids_to_names.end());
30 context_->records[client_id].push_back(*stats);
33 void TestRequestTrackerImpl::SetNameAndReturnId(
34 const String& service_name,
35 const Callback<void(uint64_t id)>& callback) {
36 uint64_t id = context_->next_id++;
37 callback.Run(id);
38 DCHECK(context_->ids_to_names.find(id) == context_->ids_to_names.end());
39 context_->ids_to_names[id] = service_name;
42 TestTrackedRequestServiceImpl::TestTrackedRequestServiceImpl(
43 InterfaceRequest<TestTrackedRequestService> request,
44 TrackingContext* context)
45 : context_(context), binding_(this, request.Pass()) {
48 TestTrackedRequestServiceImpl::~TestTrackedRequestServiceImpl() {
51 void TestTrackedRequestServiceImpl::GetReport(
52 const mojo::Callback<void(mojo::Array<ServiceReportPtr>)>& callback) {
53 mojo::Array<ServiceReportPtr> reports;
54 for (AllRecordsMap::const_iterator it1 = context_->records.begin();
55 it1 != context_->records.end(); ++it1) {
56 ServiceReportPtr report(ServiceReport::New());
57 report->service_name = context_->ids_to_names[it1->first];
58 double mean_health_numerator = 0;
59 size_t num_samples = it1->second.size();
60 if (num_samples == 0)
61 continue;
63 for (std::vector<ServiceStats>::const_iterator it2 = it1->second.begin();
64 it2 != it1->second.end(); ++it2) {
65 report->total_requests += it2->num_new_requests;
66 mean_health_numerator += it2->health;
68 report->mean_health = mean_health_numerator / num_samples;
69 reports.push_back(report.Pass());
71 callback.Run(reports.Pass());
74 } // namespace test
75 } // namespace mojo