| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "services/test_service/tracked_service.h" |
| |
| #include "base/bind.h" |
| |
| namespace mojo { |
| namespace test { |
| |
| TrackedService::TrackedService(TestRequestTrackerPtr tracker, |
| const std::string& service_name, |
| const mojo::Callback<void()>& callback) |
| : id_(0u), |
| requests_since_upload_(0u), |
| service_name_(service_name), |
| tracker_(tracker.Pass()), |
| tracking_connected_callback_(callback) { |
| tracker_->SetNameAndReturnId( |
| service_name, base::Bind(&TrackedService::SetId, base::Unretained(this))); |
| } |
| |
| TrackedService::~TrackedService() { |
| } |
| |
| void TrackedService::RecordNewRequest() { |
| requests_since_upload_++; |
| if (id_ == 0u) |
| return; |
| SendStats(); |
| } |
| |
| void TrackedService::SendStats() { |
| ServiceStatsPtr stats(ServiceStats::New()); |
| stats->num_new_requests = requests_since_upload_; |
| stats->health = 0.7; |
| tracker_->RecordStats(id_, stats.Pass()); |
| requests_since_upload_ = 0u; |
| } |
| |
| void TrackedService::SetId(uint64_t id) { |
| assert(id != 0u); |
| assert(id_ == 0u); |
| id_ = id; |
| tracking_connected_callback_.Run(); |
| if (requests_since_upload_ == 0u) |
| return; |
| SendStats(); |
| } |
| |
| } // namespace test |
| } // namespace mojo |