Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Unified Diff: components/metrics/metrics_service.cc

Issue 1485763002: Merge multiple histogram snapshots into single one for reporting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@shared-histograms
Patch Set: added merge test Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/metrics/metrics_service.cc
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index e868ea7c9bb1cc087644257b65c44e3edcf9e346..ebbf4275bed5dd764109315a5a0cfbeb709abce6 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -252,10 +252,12 @@ SyntheticTrialGroup::~SyntheticTrialGroup() {
}
MetricsService::PersistentHistogramIterator::PersistentHistogramIterator(
+ HistogramSet* found_histograms,
AllocatorSet& allocators,
AllocatorSet::iterator pos)
: allocators_(allocators),
- allocator_iter_(pos) {
+ allocator_iter_(pos),
+ found_histograms_(found_histograms) {
if (pos != allocators_.end()) {
(*allocator_iter_)->CreateIterator(&histogram_iter_);
// Have to call ++ to advance iterator to the first persistent histogram.
@@ -267,10 +269,12 @@ MetricsService::PersistentHistogramIterator&
MetricsService::PersistentHistogramIterator::operator++() {
if (allocator_iter_ != allocators_.end()) {
for (;;) {
- base::HistogramBase* h = base::HistogramBase::GetNextPersistentHistogram(
+ current_histogram_ = base::HistogramBase::GetNextPersistentHistogram(
*allocator_iter_, &histogram_iter_);
- if (h) {
- current_histogram_ = new HistogramPointer(h);
+ if (current_histogram_) {
+ DCHECK(found_histograms_->find(current_histogram_) ==
+ found_histograms_->end());
+ found_histograms_->insert(current_histogram_);
break;
}
allocator_iter_++;
@@ -1158,9 +1162,11 @@ void MetricsService::RecordCurrentHistograms() {
histogram_snapshot_manager_.PrepareDeltas(
base::StatisticsRecorder::begin(true), base::StatisticsRecorder::end(),
base::Histogram::kNoFlags, base::Histogram::kUmaTargetedHistogramFlag);
+ HistogramSet persistent_histograms;
histogram_snapshot_manager_.PrepareDeltas(
- persistent_begin(), persistent_end(),
+ persistent_begin(&persistent_histograms), persistent_end(),
base::Histogram::kNoFlags, base::Histogram::kUmaTargetedHistogramFlag);
+ STLDeleteElements(&persistent_histograms);
}
void MetricsService::RecordCurrentStabilityHistograms() {
@@ -1205,12 +1211,13 @@ void MetricsService::SkipAndDiscardUpload() {
log_upload_in_progress_ = false;
}
-MetricsService::PersistentHistogramIterator MetricsService::persistent_begin() {
- return PersistentHistogramIterator(allocators_, allocators_.begin());
+MetricsService::PersistentHistogramIterator MetricsService::persistent_begin(
+ HistogramSet* found) {
+ return PersistentHistogramIterator(found, allocators_, allocators_.begin());
}
MetricsService::PersistentHistogramIterator MetricsService::persistent_end() {
- return PersistentHistogramIterator(allocators_, allocators_.end());
+ return PersistentHistogramIterator(nullptr, allocators_, allocators_.end());
}
} // namespace metrics

Powered by Google App Engine
This is Rietveld 408576698