OLD | NEW |
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" |
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 | 469 |
470 void Histogram::AddSamples(const HistogramSamples& samples) { | 470 void Histogram::AddSamples(const HistogramSamples& samples) { |
471 samples_->Add(samples); | 471 samples_->Add(samples); |
472 } | 472 } |
473 | 473 |
474 bool Histogram::AddSamplesFromPickle(PickleIterator* iter) { | 474 bool Histogram::AddSamplesFromPickle(PickleIterator* iter) { |
475 return samples_->AddFromPickle(iter); | 475 return samples_->AddFromPickle(iter); |
476 } | 476 } |
477 | 477 |
478 // The following methods provide a graphical histogram display. | 478 // The following methods provide a graphical histogram display. |
479 void Histogram::WriteHTMLGraph(std::string* output) const { | 479 void Histogram::WriteHTMLGraph(const HistogramSamples* snapshot, |
| 480 std::string* output) const { |
480 // TBD(jar) Write a nice HTML bar chart, with divs an mouse-overs etc. | 481 // TBD(jar) Write a nice HTML bar chart, with divs an mouse-overs etc. |
481 output->append("<PRE>"); | 482 output->append("<PRE>"); |
482 WriteAsciiImpl(true, "<br>", output); | 483 WriteAsciiImpl(true, "<br>", static_cast<const SampleVector*>(snapshot), |
| 484 output); |
483 output->append("</PRE>"); | 485 output->append("</PRE>"); |
484 } | 486 } |
485 | 487 |
486 void Histogram::WriteAscii(std::string* output) const { | 488 void Histogram::WriteAscii(const HistogramSamples* snapshot, |
487 WriteAsciiImpl(true, "\n", output); | 489 std::string* output) const { |
| 490 WriteAsciiImpl(true, "\n", static_cast<const SampleVector*>(snapshot), |
| 491 output); |
488 } | 492 } |
489 | 493 |
490 bool Histogram::SerializeInfoImpl(Pickle* pickle) const { | 494 bool Histogram::SerializeInfoImpl(Pickle* pickle) const { |
491 DCHECK(bucket_ranges()->HasValidChecksum()); | 495 DCHECK(bucket_ranges()->HasValidChecksum()); |
492 return pickle->WriteString(histogram_name()) && | 496 return pickle->WriteString(histogram_name()) && |
493 pickle->WriteInt(flags()) && | 497 pickle->WriteInt(flags()) && |
494 pickle->WriteInt(declared_min()) && | 498 pickle->WriteInt(declared_min()) && |
495 pickle->WriteInt(declared_max()) && | 499 pickle->WriteInt(declared_max()) && |
496 pickle->WriteUInt32(bucket_count()) && | 500 pickle->WriteUInt32(bucket_count()) && |
497 pickle->WriteUInt32(bucket_ranges()->checksum()); | 501 pickle->WriteUInt32(bucket_ranges()->checksum()); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 | 589 |
586 std::unique_ptr<SampleVector> Histogram::SnapshotSampleVector() const { | 590 std::unique_ptr<SampleVector> Histogram::SnapshotSampleVector() const { |
587 std::unique_ptr<SampleVector> samples( | 591 std::unique_ptr<SampleVector> samples( |
588 new SampleVector(samples_->id(), bucket_ranges())); | 592 new SampleVector(samples_->id(), bucket_ranges())); |
589 samples->Add(*samples_); | 593 samples->Add(*samples_); |
590 return samples; | 594 return samples; |
591 } | 595 } |
592 | 596 |
593 void Histogram::WriteAsciiImpl(bool graph_it, | 597 void Histogram::WriteAsciiImpl(bool graph_it, |
594 const std::string& newline, | 598 const std::string& newline, |
| 599 const SampleVector* snapshot, |
595 std::string* output) const { | 600 std::string* output) const { |
596 // Get local (stack) copies of all effectively volatile class data so that we | 601 std::unique_ptr<SampleVector> local_snapshot; |
597 // are consistent across our output activities. | 602 if (!snapshot) { |
598 std::unique_ptr<SampleVector> snapshot = SnapshotSampleVector(); | 603 // Get local (stack) copies of all effectively volatile class data so |
| 604 // that we are consistent across our output activities. |
| 605 local_snapshot = SnapshotSampleVector(); |
| 606 snapshot = local_snapshot.get(); |
| 607 } |
599 Count sample_count = snapshot->TotalCount(); | 608 Count sample_count = snapshot->TotalCount(); |
600 | 609 |
601 WriteAsciiHeader(*snapshot, sample_count, output); | 610 WriteAsciiHeader(*snapshot, sample_count, output); |
602 output->append(newline); | 611 output->append(newline); |
603 | 612 |
604 // Prepare to normalize graphical rendering of bucket contents. | 613 // Prepare to normalize graphical rendering of bucket contents. |
605 double max_size = 0; | 614 double max_size = 0; |
606 if (graph_it) | 615 if (graph_it) |
607 max_size = GetPeakBucketSize(*snapshot); | 616 max_size = GetPeakBucketSize(*snapshot); |
608 | 617 |
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1179 Sample sample = custom_ranges[i]; | 1188 Sample sample = custom_ranges[i]; |
1180 if (sample < 0 || sample > HistogramBase::kSampleType_MAX - 1) | 1189 if (sample < 0 || sample > HistogramBase::kSampleType_MAX - 1) |
1181 return false; | 1190 return false; |
1182 if (sample != 0) | 1191 if (sample != 0) |
1183 has_valid_range = true; | 1192 has_valid_range = true; |
1184 } | 1193 } |
1185 return has_valid_range; | 1194 return has_valid_range; |
1186 } | 1195 } |
1187 | 1196 |
1188 } // namespace base | 1197 } // namespace base |
OLD | NEW |