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

Unified Diff: base/histogram.cc

Issue 515033: Cleanup histogram classes mixing SetFlags into FactoryGet arguments... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/histogram.h ('k') | base/histogram_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/histogram.cc
===================================================================
--- base/histogram.cc (revision 35277)
+++ base/histogram.cc (working copy)
@@ -20,12 +20,8 @@
typedef Histogram::Count Count;
-// static
-const int Histogram::kHexRangePrintingFlag = 0x8000;
-
-scoped_refptr<Histogram> Histogram::HistogramFactoryGet(
- const std::string& name, Sample minimum, Sample maximum,
- size_t bucket_count) {
+scoped_refptr<Histogram> Histogram::FactoryGet(const std::string& name,
+ Sample minimum, Sample maximum, size_t bucket_count, Flags flags) {
scoped_refptr<Histogram> histogram(NULL);
// Defensive code.
@@ -48,14 +44,15 @@
DCHECK(HISTOGRAM == histogram->histogram_type());
DCHECK(histogram->HasConstructorArguments(minimum, maximum, bucket_count));
+ histogram->SetFlags(flags);
return histogram;
}
-scoped_refptr<Histogram> Histogram::HistogramFactoryGet(
- const std::string& name, base::TimeDelta minimum, base::TimeDelta maximum,
- size_t bucket_count) {
- return HistogramFactoryGet(name,
- minimum.InMilliseconds(), maximum.InMilliseconds(), bucket_count);
+scoped_refptr<Histogram> Histogram::FactoryGet(const std::string& name,
+ base::TimeDelta minimum, base::TimeDelta maximum, size_t bucket_count,
+ Flags flags) {
+ return FactoryGet(name, minimum.InMilliseconds(), maximum.InMilliseconds(),
+ bucket_count, flags);
}
Histogram::Histogram(const std::string& name, Sample minimum,
@@ -64,7 +61,7 @@
declared_min_(minimum),
declared_max_(maximum),
bucket_count_(bucket_count),
- flags_(0),
+ flags_(kNoFlags),
ranges_(bucket_count + 1, 0),
sample_() {
Initialize();
@@ -76,14 +73,13 @@
declared_min_(static_cast<int> (minimum.InMilliseconds())),
declared_max_(static_cast<int> (maximum.InMilliseconds())),
bucket_count_(bucket_count),
- flags_(0),
+ flags_(kNoFlags),
ranges_(bucket_count + 1, 0),
sample_() {
Initialize();
}
Histogram::~Histogram() {
- DCHECK(!(kPlannedLeakFlag & flags_));
if (StatisticsRecorder::dump_on_exit()) {
std::string output;
WriteAscii(true, "\n", &output);
@@ -184,7 +180,7 @@
bool Histogram::ValidateBucketRanges() const {
// Standard assertions that all bucket ranges should satisfy.
DCHECK(ranges_.size() == bucket_count_ + 1);
- DCHECK(0 == ranges_[0]);
+ DCHECK_EQ(0, ranges_[0]);
DCHECK(declared_min() == ranges_[1]);
DCHECK(declared_max() == ranges_[bucket_count_ - 1]);
DCHECK(kSampleType_MAX == ranges_[bucket_count_]);
@@ -197,12 +193,12 @@
declared_min_ = 1;
if (declared_max_ >= kSampleType_MAX)
declared_max_ = kSampleType_MAX - 1;
- DCHECK(declared_min_ > 0); // We provide underflow bucket.
+ DCHECK_GT(declared_min_, 0); // We provide underflow bucket.
DCHECK(declared_min_ <= declared_max_);
- DCHECK(1 < bucket_count_);
+ DCHECK_LT(1u, bucket_count_);
size_t maximal_bucket_count = declared_max_ - declared_min_ + 2;
DCHECK(bucket_count_ <= maximal_bucket_count);
- DCHECK(0 == ranges_[0]);
+ DCHECK_EQ(0, ranges_[0]);
ranges_[bucket_count_] = kSampleType_MAX;
InitializeBucketRange();
DCHECK(ValidateBucketRanges());
@@ -330,7 +326,7 @@
histogram_name().c_str(),
sample_count);
if (0 == sample_count) {
- DCHECK(0 == snapshot.sum());
+ DCHECK_EQ(0, snapshot.sum());
} else {
double average = static_cast<float>(snapshot.sum()) / sample_count;
double variance = static_cast<float>(snapshot.square_sum())/sample_count
@@ -416,7 +412,7 @@
int declared_min;
int declared_max;
int histogram_type;
- int flags;
+ int pickle_flags;
std::string histogram_name;
SampleSet sample;
@@ -425,29 +421,25 @@
!pickle.ReadInt(&iter, &declared_max) ||
!pickle.ReadSize(&iter, &bucket_count) ||
!pickle.ReadInt(&iter, &histogram_type) ||
- !pickle.ReadInt(&iter, &flags) ||
+ !pickle.ReadInt(&iter, &pickle_flags) ||
!sample.Histogram::SampleSet::Deserialize(&iter, pickle)) {
LOG(ERROR) << "Picke error decoding Histogram: " << histogram_name;
return false;
}
+ Flags flags = static_cast<Flags>(pickle_flags & ~kIPCSerializationSourceFlag);
DCHECK(histogram_type != NOT_VALID_IN_RENDERER);
scoped_refptr<Histogram> render_histogram(NULL);
if (histogram_type == HISTOGRAM) {
- render_histogram = Histogram::HistogramFactoryGet(
- histogram_name, declared_min, declared_max, bucket_count);
+ render_histogram = Histogram::FactoryGet(
+ histogram_name, declared_min, declared_max, bucket_count, flags);
} else if (histogram_type == LINEAR_HISTOGRAM) {
- render_histogram = LinearHistogram::LinearHistogramFactoryGet(
- histogram_name, declared_min, declared_max, bucket_count);
+ render_histogram = LinearHistogram::FactoryGet(
+ histogram_name, declared_min, declared_max, bucket_count, flags);
} else if (histogram_type == BOOLEAN_HISTOGRAM) {
- render_histogram = BooleanHistogram::BooleanHistogramFactoryGet(
- histogram_name);
- } else if (histogram_type == THREAD_SAFE_HISTOGRAM) {
- render_histogram =
- ThreadSafeHistogram::ThreadSafeHistogramFactoryGet(
- histogram_name, declared_min, declared_max, bucket_count);
+ render_histogram = BooleanHistogram::FactoryGet(histogram_name, flags);
} else {
LOG(ERROR) << "Error Deserializing Histogram Unknown histogram_type: " <<
histogram_type;
@@ -463,9 +455,8 @@
DLOG(INFO) << "Single process mode, histogram observed and not copied: " <<
histogram_name;
} else {
+ DCHECK(flags == (flags & render_histogram->flags()));
render_histogram->AddSampleSet(sample);
- render_histogram->SetFlags(flags & ~kIPCSerializationSourceFlag
- & ~kPlannedLeakFlag);
}
return true;
@@ -496,9 +487,9 @@
counts_[index] += count;
sum_ += count * value;
square_sum_ += (count * value) * static_cast<int64>(value);
- DCHECK(counts_[index] >= 0);
- DCHECK(sum_ >= 0);
- DCHECK(square_sum_ >= 0);
+ DCHECK_GE(counts_[index], 0);
+ DCHECK_GE(sum_, 0);
+ DCHECK_GE(square_sum_, 0);
}
Count Histogram::SampleSet::TotalCount() const {
@@ -528,7 +519,7 @@
square_sum_ -= other.square_sum_;
for (size_t index = 0; index < counts_.size(); ++index) {
counts_[index] -= other.counts_[index];
- DCHECK(counts_[index] >= 0);
+ DCHECK_GE(counts_[index], 0);
}
}
@@ -545,9 +536,9 @@
}
bool Histogram::SampleSet::Deserialize(void** iter, const Pickle& pickle) {
- DCHECK(counts_.size() == 0);
- DCHECK(sum_ == 0);
- DCHECK(square_sum_ == 0);
+ DCHECK_EQ(counts_.size(), 0u);
+ DCHECK_EQ(sum_, 0);
+ DCHECK_EQ(square_sum_, 0);
size_t counts_size;
@@ -575,9 +566,9 @@
// buckets.
//------------------------------------------------------------------------------
-scoped_refptr<Histogram> LinearHistogram::LinearHistogramFactoryGet(
+scoped_refptr<Histogram> LinearHistogram::FactoryGet(
const std::string& name, Sample minimum, Sample maximum,
- size_t bucket_count) {
+ size_t bucket_count, Flags flags) {
scoped_refptr<Histogram> histogram(NULL);
if (minimum <= 0)
@@ -598,15 +589,15 @@
DCHECK(LINEAR_HISTOGRAM == histogram->histogram_type());
DCHECK(histogram->HasConstructorArguments(minimum, maximum, bucket_count));
-
+ histogram->SetFlags(flags);
return histogram;
}
-scoped_refptr<Histogram> LinearHistogram::LinearHistogramFactoryGet(
- const std::string& name, base::TimeDelta minimum, base::TimeDelta maximum,
- size_t bucket_count) {
- return LinearHistogramFactoryGet(name, minimum.InMilliseconds(),
- maximum.InMilliseconds(), bucket_count);
+scoped_refptr<Histogram> LinearHistogram::FactoryGet(const std::string& name,
+ base::TimeDelta minimum, base::TimeDelta maximum, size_t bucket_count,
+ Flags flags) {
+ return FactoryGet(name, minimum.InMilliseconds(), maximum.InMilliseconds(),
+ bucket_count, flags);
}
LinearHistogram::LinearHistogram(const std::string& name, Sample minimum,
@@ -647,7 +638,7 @@
void LinearHistogram::InitializeBucketRange() {
- DCHECK(0 < declared_min()); // 0 is the underflow bucket here.
+ DCHECK_LT(0, declared_min()); // 0 is the underflow bucket here.
double min = declared_min();
double max = declared_max();
size_t i;
@@ -670,8 +661,8 @@
// This section provides implementation for BooleanHistogram.
//------------------------------------------------------------------------------
-scoped_refptr<Histogram> BooleanHistogram::BooleanHistogramFactoryGet(
- const std::string& name) {
+scoped_refptr<Histogram> BooleanHistogram::FactoryGet(const std::string& name,
+ Flags flags) {
scoped_refptr<Histogram> histogram(NULL);
if (StatisticsRecorder::FindHistogram(name, &histogram)) {
@@ -686,64 +677,11 @@
}
DCHECK(BOOLEAN_HISTOGRAM == histogram->histogram_type());
-
+ histogram->SetFlags(flags);
return histogram;
}
-//------------------------------------------------------------------------------
-// This section provides implementation for ThreadSafeHistogram.
-//------------------------------------------------------------------------------
-scoped_refptr<Histogram> ThreadSafeHistogram::ThreadSafeHistogramFactoryGet(
- const std::string& name, Sample minimum, Sample maximum,
- size_t bucket_count) {
- scoped_refptr<Histogram> histogram(NULL);
-
- if (minimum <= 0)
- minimum = 1;
- if (maximum >= kSampleType_MAX)
- maximum = kSampleType_MAX - 1;
-
- if (StatisticsRecorder::FindHistogram(name, &histogram)) {
- DCHECK(histogram.get() != NULL);
- } else {
- histogram = new ThreadSafeHistogram(name, minimum, maximum, bucket_count);
- scoped_refptr<Histogram> registered_histogram(NULL);
- StatisticsRecorder::FindHistogram(name, &registered_histogram);
- if (registered_histogram.get() != NULL &&
- registered_histogram.get() != histogram.get())
- histogram = registered_histogram;
- }
-
- DCHECK(THREAD_SAFE_HISTOGRAM == histogram->histogram_type());
- DCHECK(histogram->HasConstructorArguments(minimum, maximum, bucket_count));
- return histogram;
-}
-
-ThreadSafeHistogram::ThreadSafeHistogram(const std::string& name,
- Sample minimum, Sample maximum, size_t bucket_count)
- : Histogram(name, minimum, maximum, bucket_count),
- lock_() {
- }
-
-void ThreadSafeHistogram::Remove(int value) {
- if (value >= kSampleType_MAX)
- value = kSampleType_MAX - 1;
- size_t index = BucketIndex(value);
- Accumulate(value, -1, index);
-}
-
-void ThreadSafeHistogram::Accumulate(Sample value, Count count, size_t index) {
- AutoLock lock(lock_);
- Histogram::Accumulate(value, count, index);
-}
-
-void ThreadSafeHistogram::SnapshotSample(SampleSet* sample) const {
- AutoLock lock(lock_);
- Histogram::SnapshotSample(sample);
-};
-
-
//------------------------------------------------------------------------------
// The next section handles global (central) support for all histograms, as well
// as startup/teardown of this service.
@@ -862,8 +800,8 @@
histograms_->end() != it;
++it) {
scoped_refptr<Histogram> histogram = it->second;
- if (!(histogram->flags() & kIPCSerializationSourceFlag))
- histogram->SetFlags(kIPCSerializationSourceFlag);
+ if (!(histogram->flags() & Histogram::kIPCSerializationSourceFlag))
+ histogram->SetFlags(Histogram::kIPCSerializationSourceFlag);
output->push_back(histogram);
}
}
« no previous file with comments | « base/histogram.h ('k') | base/histogram_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698