| Index: src/counters.h
|
| diff --git a/src/counters.h b/src/counters.h
|
| index cbd8093970dbac9e2a55f642684fb3fd5bd5390a..1209b454643de30bbb986e0b7760335ca0756b0c 100644
|
| --- a/src/counters.h
|
| +++ b/src/counters.h
|
| @@ -8,6 +8,7 @@
|
| #include "include/v8.h"
|
| #include "src/allocation.h"
|
| #include "src/base/platform/elapsed-timer.h"
|
| +#include "src/base/platform/time.h"
|
| #include "src/globals.h"
|
| #include "src/objects.h"
|
|
|
| @@ -291,6 +292,68 @@ class HistogramTimerScope BASE_EMBEDDED {
|
| #endif
|
| };
|
|
|
| +
|
| +// A histogram timer that can aggregate events within a larger scope.
|
| +//
|
| +// Intended use of this timer is to have an outer (aggregating) and an inner
|
| +// (to be aggregated) scope, where the inner scope measure the time of events,
|
| +// and all those inner scope measurements will be summed up by the outer scope.
|
| +// An example use might be to aggregate the time spent in lazy compilation
|
| +// while running a script.
|
| +//
|
| +// Helpers:
|
| +// - AggregatingHistogramTimerScope, the "outer" scope within which
|
| +// times will be summed up.
|
| +// - AggregatedHistogramTimerScope, the "inner" scope which defines the
|
| +// events to be timed.
|
| +class AggregatableHistogramTimer : public Histogram {
|
| + public:
|
| + AggregatableHistogramTimer() {}
|
| + AggregatableHistogramTimer(const char* name, int min, int max,
|
| + int num_buckets, Isolate* isolate)
|
| + : Histogram(name, min, max, num_buckets, isolate) {}
|
| +
|
| + // Start/stop the "outer" scope.
|
| + void Start() { time_ = base::TimeDelta(); }
|
| + void Stop() { AddSample(static_cast<int>(time_.InMilliseconds())); }
|
| +
|
| + // Add a time value ("inner" scope).
|
| + void Add(base::TimeDelta other) { time_ += other; }
|
| +
|
| + private:
|
| + base::TimeDelta time_;
|
| +};
|
| +
|
| +
|
| +// A helper class for use with AggregatableHistogramTimer.
|
| +class AggregatingHistogramTimerScope {
|
| + public:
|
| + explicit AggregatingHistogramTimerScope(AggregatableHistogramTimer* histogram)
|
| + : histogram_(histogram) {
|
| + histogram_->Start();
|
| + }
|
| + ~AggregatingHistogramTimerScope() { histogram_->Stop(); }
|
| +
|
| + private:
|
| + AggregatableHistogramTimer* histogram_;
|
| +};
|
| +
|
| +
|
| +// A helper class for use with AggregatableHistogramTimer.
|
| +class AggregatedHistogramTimerScope {
|
| + public:
|
| + explicit AggregatedHistogramTimerScope(AggregatableHistogramTimer* histogram)
|
| + : histogram_(histogram) {
|
| + timer_.Start();
|
| + }
|
| + ~AggregatedHistogramTimerScope() { histogram_->Add(timer_.Elapsed()); }
|
| +
|
| + private:
|
| + base::ElapsedTimer timer_;
|
| + AggregatableHistogramTimer* histogram_;
|
| +};
|
| +
|
| +
|
| #define HISTOGRAM_RANGE_LIST(HR) \
|
| /* Generic range histograms */ \
|
| HR(gc_idle_time_allotted_in_ms, V8.GCIdleTimeAllottedInMS, 0, 10000, 101) \
|
| @@ -319,6 +382,10 @@ class HistogramTimerScope BASE_EMBEDDED {
|
| HT(compile_script, V8.CompileScript)
|
|
|
|
|
| +#define AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT) \
|
| + AHT(compile_lazy, V8.CompileLazy)
|
| +
|
| +
|
| #define HISTOGRAM_PERCENTAGE_LIST(HP) \
|
| /* Heap fragmentation. */ \
|
| HP(external_fragmentation_total, \
|
| @@ -569,6 +636,11 @@ class Counters {
|
| HISTOGRAM_TIMER_LIST(HT)
|
| #undef HT
|
|
|
| +#define AHT(name, caption) \
|
| + AggregatableHistogramTimer* name() { return &name##_; }
|
| + AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
|
| +#undef AHT
|
| +
|
| #define HP(name, caption) \
|
| Histogram* name() { return &name##_; }
|
| HISTOGRAM_PERCENTAGE_LIST(HP)
|
| @@ -619,6 +691,9 @@ class Counters {
|
| #define RATE_ID(name, caption) k_##name,
|
| HISTOGRAM_TIMER_LIST(RATE_ID)
|
| #undef RATE_ID
|
| +#define AGGREGATABLE_ID(name, caption) k_##name,
|
| + AGGREGATABLE_HISTOGRAM_TIMER_LIST(AGGREGATABLE_ID)
|
| +#undef AGGREGATABLE_ID
|
| #define PERCENTAGE_ID(name, caption) k_##name,
|
| HISTOGRAM_PERCENTAGE_LIST(PERCENTAGE_ID)
|
| #undef PERCENTAGE_ID
|
| @@ -660,6 +735,11 @@ class Counters {
|
| HISTOGRAM_TIMER_LIST(HT)
|
| #undef HT
|
|
|
| +#define AHT(name, caption) \
|
| + AggregatableHistogramTimer name##_;
|
| + AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
|
| +#undef AHT
|
| +
|
| #define HP(name, caption) \
|
| Histogram name##_;
|
| HISTOGRAM_PERCENTAGE_LIST(HP)
|
|
|