// 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 "base/test/statistics_delta_reader.h"
#include "base/metrics/histogram.h"
#include "base/metrics/histogram_samples.h"
#include "base/metrics/statistics_recorder.h"
#include "base/stl_util.h"
namespace base {
StatisticsDeltaReader::StatisticsDeltaReader() {
StatisticsRecorder::Initialize(); // Safe to call multiple times.
// Record any histogram data that exists when the object is created so it can
// be subtracted later.
StatisticsRecorder::Histograms histograms;
StatisticsRecorder::GetSnapshot(std::string(), &histograms);
for (size_t i = 0; i < histograms.size(); ++i) {
original_samples_[histograms[i]->histogram_name()] =
histograms[i]->SnapshotSamples().release();
}
}
StatisticsDeltaReader::~StatisticsDeltaReader() {
STLDeleteValues(&original_samples_);
}
scoped_ptr<HistogramSamples>
StatisticsDeltaReader::GetHistogramSamplesSinceCreation(
const std::string& histogram_name) {
HistogramBase* histogram = StatisticsRecorder::FindHistogram(histogram_name);
if (!histogram)
return scoped_ptr<HistogramSamples>();
scoped_ptr<HistogramSamples> named_samples(histogram->SnapshotSamples());
HistogramSamples* named_original_samples = original_samples_[histogram_name];
if (named_original_samples)
named_samples->Subtract(*named_original_samples);
return named_samples.Pass();
}
} // namespace base