15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/metrics/metrics_service_base.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstdlib>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/metrics/metrics_log_base.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Histogram;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MetricsServiceBase::MetricsServiceBase()
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : histogram_snapshot_manager_(this) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MetricsServiceBase::~MetricsServiceBase() {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char MetricsServiceBase::kServerUrl[] =
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "https://clients4.google.com/uma/v2";
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char MetricsServiceBase::kMimeType[] = "application/vnd.chrome.uma";
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MetricsServiceBase::RecordCurrentHistograms() {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(log_manager_.current_log());
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  histogram_snapshot_manager_.PrepareDeltas(base::Histogram::kNoFlags, true);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MetricsServiceBase::RecordDelta(
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::HistogramBase& histogram,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::HistogramSamples& snapshot) {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  log_manager_.current_log()->RecordHistogramDelta(histogram.histogram_name(),
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                   snapshot);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MetricsServiceBase::InconsistencyDetected(
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::HistogramBase::Inconsistency problem) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("Histogram.InconsistenciesBrowser",
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            problem, base::HistogramBase::NEVER_EXCEEDED_VALUE);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MetricsServiceBase::UniqueInconsistencyDetected(
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::HistogramBase::Inconsistency problem) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_ENUMERATION("Histogram.InconsistenciesBrowserUnique",
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            problem, base::HistogramBase::NEVER_EXCEEDED_VALUE);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MetricsServiceBase::InconsistencyDetectedInLoggedCount(int amount) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_COUNTS("Histogram.InconsistentSnapshotBrowser",
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       std::abs(amount));
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
55