20 : lookup_function_(nullptr),
21 create_histogram_function_(nullptr),
22 add_histogram_sample_function_(nullptr) {}
29std::atomic<int> unused_counter_dump{0};
39 std::atomic<int>* ptr =
42 std::atomic<int>* old_ptr =
ptr_.exchange(ptr, std::memory_order_release);
45 ptr_.store(ptr, std::memory_order_release);
69 ? sample.InMicroseconds()
70 : sample.InMilliseconds();
78 DCHECK(timer->IsStarted());
85 if (isolate !=
nullptr) {
92bool TimedHistogram::ToggleRunningState(
bool expect_to_run)
const {
94#pragma clang diagnostic push
95#pragma clang diagnostic ignored "-Wexit-time-destructors"
97 static thread_local std::unordered_map<const TimedHistogram*, bool>
100#pragma clang diagnostic pop
102 bool is_running = active_timer[
this];
104 active_timer[
this] = !is_running;
110static constexpr int DefaultTimedHistogramNumBuckets = 50;
114 int min,
int max,
int num_buckets) {
119 const char* caption) {
124 const char* caption) {
136 histogram->
Initialize(caption, 0, max, res, DefaultTimedHistogramNumBuckets,
141 const char* caption,
int max,
143 histogram->
Initialize(caption, 0, max, res, DefaultTimedHistogramNumBuckets,
148 const char* caption) {
149 histogram->
Initialize(caption, 0, 10000000, DefaultTimedHistogramNumBuckets,
159#ifdef V8_RUNTIME_CALL_STATS
161 worker_thread_runtime_call_stats_(),
170 const char* caption) {
181 const char* caption) {
197#define HR(name, caption, min, max, num_buckets) \
198 Visit(&counters()->name##_, #caption, min, max, num_buckets);
202#if V8_ENABLE_DRUMBRAKE
203#define HR(name, caption, min, max, num_buckets) \
204 Visit(&counters()->name##_, #caption, min, max, num_buckets);
205 HISTOGRAM_RANGE_LIST_SLOW(
HR)
209#define HR(name, caption) Visit(&counters()->name##_, #caption);
213#define HR(name, caption) Visit(&counters()->name##_, #caption);
217#define HT(name, caption, max, res) \
218 Visit(&counters()->name##_, #caption, max, TimedHistogramResolution::res);
222#define HT(name, caption, max, res) \
223 Visit(&counters()->name##_, #caption, max, TimedHistogramResolution::res);
227#define HT(name, caption, max, res) \
228 Visit(&counters()->name##_, #caption, max, TimedHistogramResolution::res);
232#define AHT(name, caption) Visit(&counters()->name##_, #caption);
238#define SC(name, caption) Visit(&counters()->name##_, "c:" #caption);
245 int max,
int num_buckets) {
253 const char* caption,
int max,
259 const char* caption) {
264 const char* caption) {
269 const char* caption) {
static constexpr TimeDelta Max()
int64_t InMilliseconds() const
int64_t InMicroseconds() const
void Visit(Histogram *histogram, const char *caption, int min, int max, int num_buckets) final
virtual void VisitStatsCounter(StatsCounter *counter, const char *caption)
virtual void Visit(Histogram *histogram, const char *caption, int min, int max, int num_buckets)
virtual void VisitHistogram(Histogram *histogram, const char *caption)
virtual void VisitStatsCounters()
virtual void VisitHistograms()
void AddHistogramSample(void *histogram, int sample)
void * CreateHistogram(const char *name, int min, int max, size_t buckets)
void ResetCreateHistogramFunction(CreateHistogramCallback f)
void ResetCounterFunction(CounterLookupCallback f)
int * FindLocation(const char *name)
Counters(Isolate *isolate)
void VisitHistogram(Histogram *histogram, const char *caption) final
V8_EXPORT_PRIVATE void * CreateHistogram() const
V8_EXPORT_PRIVATE void AddSample(int sample)
const char * name() const
void Initialize(const char *name, int min, int max, int num_buckets, Counters *counters)
std::atomic< void * > histogram_
void VisitStatsCounter(StatsCounter *counter, const char *caption) final
std::atomic< std::atomic< int > * > ptr_
V8_NOINLINE V8_EXPORT_PRIVATE std::atomic< int > * SetupPtrFromStatsTable()
std::atomic< int > * GetPtr()
V8_EXPORT_PRIVATE bool Enabled()
void Initialize(const char *name, Counters *counters)
CounterLookupCallback lookup_function_
StatsTable(const StatsTable &)=delete
void SetCounterFunction(CounterLookupCallback f)
void SetCreateHistogramFunction(CreateHistogramCallback f)
void Stop(base::ElapsedTimer *timer)
TimedHistogramResolution resolution_
V8_EXPORT_PRIVATE void AddTimedSample(base::TimeDelta sample)
void RecordAbandon(base::ElapsedTimer *timer, Isolate *isolate)
void Initialize(const char *name, int min, int max, TimedHistogramResolution resolution, int num_buckets, Counters *counters)
static V8_INLINE void CallEventLogger(Isolate *isolate, const char *name, v8::LogEventStatus se, bool expose_to_api)
#define NESTED_TIMED_HISTOGRAM_LIST(HT)
#define HISTOGRAM_LEGACY_MEMORY_LIST(HM)
#define STATS_COUNTER_LIST(SC)
#define HISTOGRAM_PERCENTAGE_LIST(HP)
#define AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
#define NESTED_TIMED_HISTOGRAM_LIST_SLOW(HT)
#define HISTOGRAM_RANGE_LIST(HR)
#define STATS_COUNTER_NATIVE_CODE_LIST(SC)
#define TIMED_HISTOGRAM_LIST(HT)
#define HR(name, caption, min, max, num_buckets)
#define HT(name, caption, max, res)
#define AHT(name, caption)
V8_INLINE std::atomic< T > * AsAtomicPtr(T *t)
int *(*)(const char *name) CounterLookupCallback
void *(*)(const char *name, int min, int max, size_t buckets) CreateHistogramCallback
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)