1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/bind.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/test_service/test_request_tracker_impl.h" 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo { 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace test { 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TrackingContext::TrackingContext() : next_id(1) {} 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TrackingContext::~TrackingContext() {} 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestRequestTrackerImpl::TestRequestTrackerImpl(TrackingContext* context) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : context_(context), weak_factory_(this) { 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestRequestTrackerImpl::~TestRequestTrackerImpl() { 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestRequestTrackerImpl::RecordStats( 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uint64_t client_id, 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceStatsPtr stats) { 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert(context_->ids_to_names.find(client_id) != 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch context_->ids_to_names.end()); 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch context_->records[client_id].push_back(*stats); 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestRequestTrackerImpl::OnConnectionEstablished() { 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uint64_t id = context_->next_id++; 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch client()->SetIdAndReturnName(id, 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&TestRequestTrackerImpl::UploaderNameCallback, 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_.GetWeakPtr(), 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch id)); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestRequestTrackerImpl::UploaderNameCallback( 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uint64_t id, const mojo::String& name) { 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(context_->ids_to_names.find(id) == context_->ids_to_names.end()); 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch context_->ids_to_names[id] = name; 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTestTrackedRequestServiceImpl::TestTrackedRequestServiceImpl( 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TrackingContext* context) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : context_(context) { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 48116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTestTrackedRequestServiceImpl::~TestTrackedRequestServiceImpl() { 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestTrackedRequestServiceImpl::GetReport( 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const mojo::Callback<void(mojo::Array<ServiceReportPtr>)>& callback) { 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mojo::Array<ServiceReportPtr> reports; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (AllRecordsMap::const_iterator it1 = context_->records.begin(); 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it1 != context_->records.end(); ++it1) { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceReportPtr report(ServiceReport::New()); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch report->service_name = context_->ids_to_names[it1->first]; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch double mean_health_numerator = 0; 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t num_samples = it1->second.size(); 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (num_samples == 0) 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch continue; 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (std::vector<ServiceStats>::const_iterator it2 = it1->second.begin(); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it2 != it1->second.end(); ++it2) { 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch report->total_requests += it2->num_new_requests; 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mean_health_numerator += it2->health; 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch report->mean_health = mean_health_numerator / num_samples; 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch reports.push_back(report.Pass()); 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch callback.Run(reports.Pass()); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace test 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace mojo 76