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

Unified Diff: src/counters.h

Issue 2918703002: Localize counter class member functions. (Closed)
Patch Set: Remove need for mutex to initialize counters. Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/api.cc ('k') | src/counters.cc » ('j') | src/counters.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/counters.h
diff --git a/src/counters.h b/src/counters.h
index 26b756624b7303163a1d9450da05c102b87568fa..70d734ef90ac01515a869459d7e282d0c0fb0238 100644
--- a/src/counters.h
+++ b/src/counters.h
@@ -36,9 +36,7 @@ class StatsTable {
// Register an application-defined function to create
// a histogram for passing to the AddHistogramSample function
- void SetCreateHistogramFunction(CreateHistogramCallback f) {
- create_histogram_function_ = f;
- }
+ void SetCreateHistogramFunction(CreateHistogramCallback f);
// Register an application-defined function to add a sample
// to a histogram created with CreateHistogram function
@@ -121,13 +119,10 @@ class StatsCounterBase {
// Internally, a counter represents a value in a row of a StatsTable.
// The row has a 32bit value for each process/thread in the table and also
// a name (stored in the table metadata). Since the storage location can be
-// thread-specific, this class cannot be shared across threads.
+// thread-specific, this class cannot be shared across threads. Note: This
+// class is not thread safe.
class StatsCounter : public StatsCounterBase {
public:
- StatsCounter() { }
- StatsCounter(Counters* counters, const char* name)
- : StatsCounterBase(counters, name), lookup_done_(false) {}
-
// Sets the counter to a specific value.
void Set(int value) {
if (int* loc = GetPtr()) SetLoc(loc, value);
@@ -166,10 +161,13 @@ class StatsCounter : public StatsCounterBase {
return loc;
}
+ private:
+ StatsCounter() {}
+ StatsCounter(Counters* counters, const char* name)
+ : StatsCounterBase(counters, name), lookup_done_(false) {}
// Reset the cached internal pointer.
void Reset() { lookup_done_ = false; }
- private:
// Returns the cached address of this counter location.
int* GetPtr() {
if (lookup_done_) return ptr_;
@@ -179,16 +177,13 @@ class StatsCounter : public StatsCounterBase {
}
bool lookup_done_;
+
+ friend class Counters;
};
-// Thread safe version of StatsCounter. WARNING: Unlike StatsCounter,
-// StatsCounterThreadSafe's constructor and method Reset() actually do
-// the table lookup, and should be called from the main thread
-// (i.e. not workers).
+// Thread safe version of StatsCounter.
class StatsCounterThreadSafe : public StatsCounterBase {
public:
- StatsCounterThreadSafe(Counters* counters, const char* name);
-
void Set(int Value);
void Increment();
void Increment(int value);
@@ -199,59 +194,48 @@ class StatsCounterThreadSafe : public StatsCounterBase {
DCHECK(ptr_ != NULL);
return ptr_;
}
- void Reset() { GetPtr(); }
private:
+ StatsCounterThreadSafe(Counters* counters, const char* name);
int* GetPtr();
Mircea Trofin 2017/06/05 15:57:49 Why not delete GetPtr(), since it's only used in R
kschimpf 2017/06/05 17:38:52 Your right. It used to have multiple uses, but is
+ void Reset() { GetPtr(); }
base::Mutex mutex_;
private:
+ friend class Counters;
DISALLOW_IMPLICIT_CONSTRUCTORS(StatsCounterThreadSafe);
};
-// A Histogram represents a dynamically created histogram in the StatsTable.
-// It will be registered with the histogram system on first use.
+// A Histogram represents a dynamically created histogram in the
+// StatsTable. Note: This class is thread safe.
class Histogram {
public:
- Histogram() { }
- Histogram(const char* name, int min, int max, int num_buckets,
- Counters* counters)
- : name_(name),
- min_(min),
- max_(max),
- num_buckets_(num_buckets),
- histogram_(NULL),
- lookup_done_(false),
- counters_(counters) {}
-
// Add a single sample to this histogram.
void AddSample(int sample);
// Returns true if this histogram is enabled.
- bool Enabled() {
- return GetHistogram() != NULL;
- }
-
- // Reset the cached internal pointer.
- void Reset() {
- lookup_done_ = false;
- }
+ bool Enabled() { return histogram_ != nullptr; }
const char* name() { return name_; }
protected:
- // Returns the handle to the histogram.
- void* GetHistogram() {
- if (!lookup_done_) {
- lookup_done_ = true;
- histogram_ = CreateHistogram();
- }
- return histogram_;
- }
-
Counters* counters() const { return counters_; }
+ protected:
+ Histogram() {}
+ Histogram(const char* name, int min, int max, int num_buckets,
+ Counters* counters)
+ : name_(name),
+ min_(min),
+ max_(max),
+ num_buckets_(num_buckets),
+ histogram_(nullptr),
+ counters_(counters) {}
+
+ // Reset the cached internal pointer.
+ void Reset() { histogram_ = CreateHistogram(); }
+
private:
void* CreateHistogram() const;
@@ -260,8 +244,9 @@ class Histogram {
int max_;
int num_buckets_;
void* histogram_;
- bool lookup_done_;
Counters* counters_;
+
+ friend class Counters;
};
// A HistogramTimer allows distributions of results to be created.
@@ -272,7 +257,7 @@ class HistogramTimer : public Histogram {
MICROSECOND
};
- HistogramTimer() {}
+ // Note: public for testing purposes only.
HistogramTimer(const char* name, int min, int max, Resolution resolution,
int num_buckets, Counters* counters)
: Histogram(name, min, max, num_buckets, counters),
@@ -295,8 +280,12 @@ class HistogramTimer : public Histogram {
#endif
private:
+ HistogramTimer() {}
+
base::ElapsedTimer timer_;
Resolution resolution_;
+
+ friend class Counters;
};
// Helper class for scoping a HistogramTimer.
@@ -355,11 +344,6 @@ class HistogramTimerScope BASE_EMBEDDED {
// events to be timed.
class AggregatableHistogramTimer : public Histogram {
public:
- AggregatableHistogramTimer() {}
- AggregatableHistogramTimer(const char* name, int min, int max,
- int num_buckets, Counters* counters)
- : Histogram(name, min, max, num_buckets, counters) {}
-
// Start/stop the "outer" scope.
void Start() { time_ = base::TimeDelta(); }
void Stop() { AddSample(static_cast<int>(time_.InMicroseconds())); }
@@ -368,7 +352,13 @@ class AggregatableHistogramTimer : public Histogram {
void Add(base::TimeDelta other) { time_ += other; }
private:
+ AggregatableHistogramTimer() {}
+ AggregatableHistogramTimer(const char* name, int min, int max,
+ int num_buckets, Counters* counters)
+ : Histogram(name, min, max, num_buckets, counters) {}
+
base::TimeDelta time_;
+ friend class Counters;
};
// A helper class for use with AggregatableHistogramTimer. This is the
@@ -414,14 +404,7 @@ class AggregatedHistogramTimerScope {
template <typename Histogram>
class AggregatedMemoryHistogram {
public:
- AggregatedMemoryHistogram()
- : is_initialized_(false),
- start_ms_(0.0),
- last_ms_(0.0),
- aggregate_value_(0.0),
- last_value_(0.0),
- backing_histogram_(NULL) {}
-
+ // Note: public for testing purposes only.
explicit AggregatedMemoryHistogram(Histogram* backing_histogram)
: AggregatedMemoryHistogram() {
backing_histogram_ = backing_histogram;
@@ -439,6 +422,14 @@ class AggregatedMemoryHistogram {
void AddSample(double current_ms, double current_value);
private:
+ AggregatedMemoryHistogram()
+ : is_initialized_(false),
+ start_ms_(0.0),
+ last_ms_(0.0),
+ aggregate_value_(0.0),
+ last_value_(0.0),
+ backing_histogram_(NULL) {}
+
double Aggregate(double current_ms, double current_value);
bool is_initialized_;
double start_ms_;
@@ -446,6 +437,8 @@ class AggregatedMemoryHistogram {
double aggregate_value_;
double last_value_;
Histogram* backing_histogram_;
+
+ friend class Counters;
};
@@ -1330,10 +1323,6 @@ class Counters : public std::enable_shared_from_this<Counters> {
};
// clang-format on
- void ResetCounters();
- void ResetHistograms();
- void InitializeHistograms();
-
RuntimeCallStats* runtime_call_stats() { return &runtime_call_stats_; }
StatsTable* stats_table() { return &stats_table_; }
@@ -1409,6 +1398,10 @@ class Counters : public std::enable_shared_from_this<Counters> {
RuntimeCallStats runtime_call_stats_;
+ friend class StatsTable;
+ void ResetCounters();
+ void ResetHistograms();
+
DISALLOW_IMPLICIT_CONSTRUCTORS(Counters);
};
« no previous file with comments | « src/api.cc ('k') | src/counters.cc » ('j') | src/counters.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698