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

Side by Side Diff: base/histogram.cc

Issue 273065: Remove special code fro calculating bucket index in linear histograms... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 2 months 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 | Annotate | Revision Log
« no previous file with comments | « base/histogram.h ('k') | no next file » | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/histogram.h" 10 #include "base/histogram.h"
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 Histogram* render_histogram = 394 Histogram* render_histogram =
395 StatisticsRecorder::GetHistogram(histogram_name); 395 StatisticsRecorder::GetHistogram(histogram_name);
396 396
397 if (render_histogram == NULL) { 397 if (render_histogram == NULL) {
398 if (histogram_type == EXPONENTIAL) { 398 if (histogram_type == EXPONENTIAL) {
399 render_histogram = new Histogram(histogram_name.c_str(), 399 render_histogram = new Histogram(histogram_name.c_str(),
400 declared_min, 400 declared_min,
401 declared_max, 401 declared_max,
402 bucket_count); 402 bucket_count);
403 } else if (histogram_type == LINEAR) { 403 } else if (histogram_type == LINEAR) {
404 render_histogram = reinterpret_cast<Histogram*> 404 render_histogram = new LinearHistogram(histogram_name.c_str(),
405 (new LinearHistogram(histogram_name.c_str(), 405 declared_min,
406 declared_min, 406 declared_max,
407 declared_max, 407 bucket_count);
408 bucket_count));
409 } else { 408 } else {
410 LOG(ERROR) << "Error Deserializing Histogram Unknown histogram_type: " << 409 LOG(ERROR) << "Error Deserializing Histogram Unknown histogram_type: " <<
411 histogram_type; 410 histogram_type;
412 return false; 411 return false;
413 } 412 }
414 DCHECK(!(flags & kRendererHistogramFlag)); 413 DCHECK(!(flags & kRendererHistogramFlag));
415 render_histogram->SetFlags(flags | kRendererHistogramFlag); 414 render_histogram->SetFlags(flags | kRendererHistogramFlag);
416 } 415 }
417 416
418 DCHECK(declared_min == render_histogram->declared_min()); 417 DCHECK(declared_min == render_histogram->declared_min());
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 double min = declared_min(); 576 double min = declared_min();
578 double max = declared_max(); 577 double max = declared_max();
579 size_t i; 578 size_t i;
580 for (i = 1; i < bucket_count(); ++i) { 579 for (i = 1; i < bucket_count(); ++i) {
581 double linear_range = (min * (bucket_count() -1 - i) + max * (i - 1)) / 580 double linear_range = (min * (bucket_count() -1 - i) + max * (i - 1)) /
582 (bucket_count() - 2); 581 (bucket_count() - 2);
583 SetBucketRange(i, static_cast<int> (linear_range + 0.5)); 582 SetBucketRange(i, static_cast<int> (linear_range + 0.5));
584 } 583 }
585 } 584 }
586 585
587 // Find bucket to increment for sample value.
588 size_t LinearHistogram::BucketIndex(Sample value) const {
589 if (value < declared_min()) return 0;
590 if (value >= declared_max()) return bucket_count() - 1;
591 size_t index;
592 index = static_cast<size_t>(((value - declared_min()) * (bucket_count() - 2))
593 / (declared_max() - declared_min()) + 1);
594 DCHECK(1 <= index && bucket_count() > index);
595 return index;
596 }
597
598 double LinearHistogram::GetBucketSize(Count current, size_t i) const { 586 double LinearHistogram::GetBucketSize(Count current, size_t i) const {
599 DCHECK(ranges(i + 1) > ranges(i)); 587 DCHECK(ranges(i + 1) > ranges(i));
600 // Adjacent buckets with different widths would have "surprisingly" many (few) 588 // Adjacent buckets with different widths would have "surprisingly" many (few)
601 // samples in a histogram if we didn't normalize this way. 589 // samples in a histogram if we didn't normalize this way.
602 double denominator = ranges(i + 1) - ranges(i); 590 double denominator = ranges(i + 1) - ranges(i);
603 return current/denominator; 591 return current/denominator;
604 } 592 }
605 593
606 //------------------------------------------------------------------------------ 594 //------------------------------------------------------------------------------
607 // This section provides implementation for ThreadSafeHistogram. 595 // This section provides implementation for ThreadSafeHistogram.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 return NULL != histograms_; 654 return NULL != histograms_;
667 } 655 }
668 656
669 // static 657 // static
670 bool StatisticsRecorder::Register(Histogram* histogram) { 658 bool StatisticsRecorder::Register(Histogram* histogram) {
671 if (!histograms_) 659 if (!histograms_)
672 return false; 660 return false;
673 const std::string name = histogram->histogram_name(); 661 const std::string name = histogram->histogram_name();
674 AutoLock auto_lock(*lock_); 662 AutoLock auto_lock(*lock_);
675 663
676 DCHECK(histograms_->end() == histograms_->find(name)) << name << " is already" 664 if (histograms_->end() != histograms_->find(name)) {
677 "registered as a histogram. Check for duplicate use of the name, or a " 665 // Check to be sure it is compatible.... and if not, then do a CHECK()
678 "race where a static initializer could be run by several threads."; 666 return false; // This name is already registered.
667 }
679 (*histograms_)[name] = histogram; 668 (*histograms_)[name] = histogram;
680 return true; 669 return true;
681 } 670 }
682 671
683 // static 672 // static
684 void StatisticsRecorder::UnRegister(Histogram* histogram) { 673 void StatisticsRecorder::UnRegister(Histogram* histogram) {
685 if (!histograms_) 674 if (!histograms_)
686 return; 675 return;
687 const std::string name = histogram->histogram_name(); 676 const std::string name = histogram->histogram_name();
688 AutoLock auto_lock(*lock_); 677 AutoLock auto_lock(*lock_);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 snapshot->push_back(it->second); 764 snapshot->push_back(it->second);
776 } 765 }
777 } 766 }
778 767
779 // static 768 // static
780 StatisticsRecorder::HistogramMap* StatisticsRecorder::histograms_ = NULL; 769 StatisticsRecorder::HistogramMap* StatisticsRecorder::histograms_ = NULL;
781 // static 770 // static
782 Lock* StatisticsRecorder::lock_ = NULL; 771 Lock* StatisticsRecorder::lock_ = NULL;
783 // static 772 // static
784 bool StatisticsRecorder::dump_on_exit_ = false; 773 bool StatisticsRecorder::dump_on_exit_ = false;
OLDNEW
« no previous file with comments | « base/histogram.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698