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

Side by Side Diff: base/metrics/histogram.cc

Issue 1471073007: Reorganize histograms for persistence. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@shmem-alloc
Patch Set: addressed review comments by Alexei Created 5 years 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 unified diff | Download patch
« no previous file with comments | « base/metrics/histogram.h ('k') | base/metrics/histogram_base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Histogram is an object that aggregates statistics, and can summarize them in 5 // Histogram is an object that aggregates statistics, and can summarize them in
6 // various forms, including ASCII graphical, HTML, and numerically (as a 6 // various forms, including ASCII graphical, HTML, and numerically (as a
7 // vector of numbers corresponding to each of the aggregating buckets). 7 // vector of numbers corresponding to each of the aggregating buckets).
8 // See header file for details and examples. 8 // See header file for details and examples.
9 9
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 11
12 #include <math.h> 12 #include <math.h>
13 13
14 #include <algorithm> 14 #include <algorithm>
15 #include <string> 15 #include <string>
16 16
17 #include "base/compiler_specific.h" 17 #include "base/compiler_specific.h"
18 #include "base/debug/alias.h" 18 #include "base/debug/alias.h"
19 #include "base/logging.h" 19 #include "base/logging.h"
20 #include "base/metrics/histogram_macros.h" 20 #include "base/metrics/histogram_macros.h"
21 #include "base/metrics/metrics_hashes.h"
21 #include "base/metrics/sample_vector.h" 22 #include "base/metrics/sample_vector.h"
22 #include "base/metrics/statistics_recorder.h" 23 #include "base/metrics/statistics_recorder.h"
23 #include "base/pickle.h" 24 #include "base/pickle.h"
24 #include "base/strings/string_util.h" 25 #include "base/strings/string_util.h"
25 #include "base/strings/stringprintf.h" 26 #include "base/strings/stringprintf.h"
26 #include "base/synchronization/lock.h" 27 #include "base/synchronization/lock.h"
27 #include "base/values.h" 28 #include "base/values.h"
28 29
29 namespace base { 30 namespace base {
30 31
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 253
253 if (*minimum >= *maximum) 254 if (*minimum >= *maximum)
254 return false; 255 return false;
255 if (*bucket_count < 3) 256 if (*bucket_count < 3)
256 return false; 257 return false;
257 if (*bucket_count > static_cast<size_t>(*maximum - *minimum + 2)) 258 if (*bucket_count > static_cast<size_t>(*maximum - *minimum + 2))
258 return false; 259 return false;
259 return true; 260 return true;
260 } 261 }
261 262
263 uint64_t Histogram::name_hash() const {
264 return samples_->id();
265 }
266
262 HistogramType Histogram::GetHistogramType() const { 267 HistogramType Histogram::GetHistogramType() const {
263 return HISTOGRAM; 268 return HISTOGRAM;
264 } 269 }
265 270
266 bool Histogram::HasConstructionArguments(Sample expected_minimum, 271 bool Histogram::HasConstructionArguments(Sample expected_minimum,
267 Sample expected_maximum, 272 Sample expected_maximum,
268 size_t expected_bucket_count) const { 273 size_t expected_bucket_count) const {
269 return ((expected_minimum == declared_min_) && 274 return ((expected_minimum == declared_min_) &&
270 (expected_maximum == declared_max_) && 275 (expected_maximum == declared_max_) &&
271 (expected_bucket_count == bucket_count())); 276 (expected_bucket_count == bucket_count()));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 333
329 Histogram::Histogram(const std::string& name, 334 Histogram::Histogram(const std::string& name,
330 Sample minimum, 335 Sample minimum,
331 Sample maximum, 336 Sample maximum,
332 const BucketRanges* ranges) 337 const BucketRanges* ranges)
333 : HistogramBase(name), 338 : HistogramBase(name),
334 bucket_ranges_(ranges), 339 bucket_ranges_(ranges),
335 declared_min_(minimum), 340 declared_min_(minimum),
336 declared_max_(maximum) { 341 declared_max_(maximum) {
337 if (ranges) 342 if (ranges)
338 samples_.reset(new SampleVector(ranges)); 343 samples_.reset(new SampleVector(HashMetricName(name), ranges));
339 } 344 }
340 345
341 Histogram::~Histogram() { 346 Histogram::~Histogram() {
342 } 347 }
343 348
344 bool Histogram::PrintEmptyBucket(size_t index) const { 349 bool Histogram::PrintEmptyBucket(size_t index) const {
345 return true; 350 return true;
346 } 351 }
347 352
348 // Use the actual bucket widths (like a linear histogram) until the widths get 353 // Use the actual bucket widths (like a linear histogram) until the widths get
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 histogram_name, declared_min, declared_max, bucket_count, flags); 390 histogram_name, declared_min, declared_max, bucket_count, flags);
386 391
387 if (!ValidateRangeChecksum(*histogram, range_checksum)) { 392 if (!ValidateRangeChecksum(*histogram, range_checksum)) {
388 // The serialized histogram might be corrupted. 393 // The serialized histogram might be corrupted.
389 return NULL; 394 return NULL;
390 } 395 }
391 return histogram; 396 return histogram;
392 } 397 }
393 398
394 scoped_ptr<SampleVector> Histogram::SnapshotSampleVector() const { 399 scoped_ptr<SampleVector> Histogram::SnapshotSampleVector() const {
395 scoped_ptr<SampleVector> samples(new SampleVector(bucket_ranges())); 400 scoped_ptr<SampleVector> samples(
401 new SampleVector(samples_->id(), bucket_ranges()));
396 samples->Add(*samples_); 402 samples->Add(*samples_);
397 return samples; 403 return samples;
398 } 404 }
399 405
400 void Histogram::WriteAsciiImpl(bool graph_it, 406 void Histogram::WriteAsciiImpl(bool graph_it,
401 const std::string& newline, 407 const std::string& newline,
402 std::string* output) const { 408 std::string* output) const {
403 // Get local (stack) copies of all effectively volatile class data so that we 409 // Get local (stack) copies of all effectively volatile class data so that we
404 // are consistent across our output activities. 410 // are consistent across our output activities.
405 scoped_ptr<SampleVector> snapshot = SnapshotSampleVector(); 411 scoped_ptr<SampleVector> snapshot = SnapshotSampleVector();
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 898
893 BucketRanges* bucket_ranges = new BucketRanges(ranges.size()); 899 BucketRanges* bucket_ranges = new BucketRanges(ranges.size());
894 for (size_t i = 0; i < ranges.size(); i++) { 900 for (size_t i = 0; i < ranges.size(); i++) {
895 bucket_ranges->set_range(i, ranges[i]); 901 bucket_ranges->set_range(i, ranges[i]);
896 } 902 }
897 bucket_ranges->ResetChecksum(); 903 bucket_ranges->ResetChecksum();
898 return bucket_ranges; 904 return bucket_ranges;
899 } 905 }
900 906
901 } // namespace base 907 } // namespace base
OLDNEW
« no previous file with comments | « base/metrics/histogram.h ('k') | base/metrics/histogram_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698