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

Unified Diff: src/counters.cc

Issue 2759033002: Generate less code in v8::internal::Counters constructor (Closed)
Patch Set: export for win component build Created 3 years, 9 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/counters.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/counters.cc
diff --git a/src/counters.cc b/src/counters.cc
index 66e4def3df4bfe8c9d2663085e67300f5616f997..ec1bb9b66679e942d224ba99975f6c49783554e4 100644
--- a/src/counters.cc
+++ b/src/counters.cc
@@ -61,84 +61,142 @@ void HistogramTimer::Stop() {
Counters::Counters(Isolate* isolate) {
+ static const struct {
+ Histogram Counters::*member;
+ const char* caption;
+ int min;
+ int max;
+ int num_buckets;
+ } kHistograms[] = {
#define HR(name, caption, min, max, num_buckets) \
- name##_ = Histogram(#caption, min, max, num_buckets, isolate);
- HISTOGRAM_RANGE_LIST(HR)
+ {&Counters::name##_, #caption, min, max, num_buckets},
+ HISTOGRAM_RANGE_LIST(HR)
#undef HR
+ };
+ for (const auto& histogram : kHistograms) {
+ this->*histogram.member =
+ Histogram(histogram.caption, histogram.min, histogram.max,
+ histogram.num_buckets, isolate);
+ }
+ static const struct {
+ HistogramTimer Counters::*member;
+ const char* caption;
+ int max;
+ HistogramTimer::Resolution res;
+ } kHistogramTimers[] = {
#define HT(name, caption, max, res) \
- name##_ = HistogramTimer(#caption, 0, max, HistogramTimer::res, 50, isolate);
- HISTOGRAM_TIMER_LIST(HT)
+ {&Counters::name##_, #caption, max, HistogramTimer::res},
+ HISTOGRAM_TIMER_LIST(HT)
#undef HT
+ };
+ for (const auto& timer : kHistogramTimers) {
+ this->*timer.member =
+ HistogramTimer(timer.caption, 0, timer.max, timer.res, 50, isolate);
+ }
-#define AHT(name, caption) \
- name##_ = AggregatableHistogramTimer(#caption, 0, 10000000, 50, isolate);
- AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
+ static const struct {
+ AggregatableHistogramTimer Counters::*member;
+ const char* caption;
+ } kAggregatableHistogramTimers[] = {
+#define AHT(name, caption) {&Counters::name##_, #caption},
+ AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
#undef AHT
+ };
+ for (const auto& aht : kAggregatableHistogramTimers) {
+ this->*aht.member =
+ AggregatableHistogramTimer(aht.caption, 0, 10000000, 50, isolate);
+ }
-#define HP(name, caption) \
- name##_ = Histogram(#caption, 0, 101, 100, isolate);
- HISTOGRAM_PERCENTAGE_LIST(HP)
+ static const struct {
+ Histogram Counters::*member;
+ const char* caption;
+ } kHistogramPercentages[] = {
+#define HP(name, caption) {&Counters::name##_, #caption},
+ HISTOGRAM_PERCENTAGE_LIST(HP)
#undef HP
+ };
+ for (const auto& percentage : kHistogramPercentages) {
+ this->*percentage.member =
+ Histogram(percentage.caption, 0, 101, 100, isolate);
+ }
-
-// Exponential histogram assigns bucket limits to points
-// p[1], p[2], ... p[n] such that p[i+1] / p[i] = constant.
-// The constant factor is equal to the n-th root of (high / low),
-// where the n is the number of buckets, the low is the lower limit,
-// the high is the upper limit.
-// For n = 50, low = 1000, high = 500000: the factor = 1.13.
-#define HM(name, caption) \
- name##_ = Histogram(#caption, 1000, 500000, 50, isolate);
- HISTOGRAM_LEGACY_MEMORY_LIST(HM)
-#undef HM
-// For n = 100, low = 4000, high = 2000000: the factor = 1.06.
-#define HM(name, caption) \
- name##_ = Histogram(#caption, 4000, 2000000, 100, isolate);
- HISTOGRAM_MEMORY_LIST(HM)
+ // Exponential histogram assigns bucket limits to points
+ // p[1], p[2], ... p[n] such that p[i+1] / p[i] = constant.
+ // The constant factor is equal to the n-th root of (high / low),
+ // where the n is the number of buckets, the low is the lower limit,
+ // the high is the upper limit.
+ // For n = 50, low = 1000, high = 500000: the factor = 1.13.
+ static const struct {
+ Histogram Counters::*member;
+ const char* caption;
+ } kLegacyMemoryHistograms[] = {
+#define HM(name, caption) {&Counters::name##_, #caption},
+ HISTOGRAM_LEGACY_MEMORY_LIST(HM)
#undef HM
+ };
+ for (const auto& histogram : kLegacyMemoryHistograms) {
+ this->*histogram.member =
+ Histogram(histogram.caption, 1000, 500000, 50, isolate);
+ }
+ // For n = 100, low = 4000, high = 2000000: the factor = 1.06.
+ static const struct {
+ Histogram Counters::*member;
+ AggregatedMemoryHistogram<Histogram> Counters::*aggregated;
+ const char* caption;
+ } kMemoryHistograms[] = {
#define HM(name, caption) \
- aggregated_##name##_ = AggregatedMemoryHistogram<Histogram>(&name##_);
- HISTOGRAM_MEMORY_LIST(HM)
+ {&Counters::name##_, &Counters::aggregated_##name##_, #caption},
+ HISTOGRAM_MEMORY_LIST(HM)
#undef HM
+ };
+ for (const auto& histogram : kMemoryHistograms) {
+ this->*histogram.member =
+ Histogram(histogram.caption, 4000, 2000000, 100, isolate);
+ this->*histogram.aggregated =
+ AggregatedMemoryHistogram<Histogram>(&(this->*histogram.member));
+ }
-#define SC(name, caption) \
- name##_ = StatsCounter(isolate, "c:" #caption);
-
- STATS_COUNTER_LIST_1(SC)
- STATS_COUNTER_LIST_2(SC)
+ // clang-format off
+ static const struct {
+ StatsCounter Counters::*member;
+ const char* caption;
+ } kStatsCounters[] = {
+#define SC(name, caption) {&Counters::name##_, "c:" #caption},
+ STATS_COUNTER_LIST_1(SC) STATS_COUNTER_LIST_2(SC)
#undef SC
-
-#define SC(name) \
- count_of_##name##_ = StatsCounter(isolate, "c:" "V8.CountOf_" #name); \
- size_of_##name##_ = StatsCounter(isolate, "c:" "V8.SizeOf_" #name);
- INSTANCE_TYPE_LIST(SC)
+#define SC(name) \
+ {&Counters::count_of_##name##_, "c:" "V8.CountOf_" #name}, \
+ {&Counters::size_of_##name##_, "c:" "V8.SizeOf_" #name},
+ INSTANCE_TYPE_LIST(SC)
#undef SC
-
-#define SC(name) \
- count_of_CODE_TYPE_##name##_ = \
- StatsCounter(isolate, "c:" "V8.CountOf_CODE_TYPE-" #name); \
- size_of_CODE_TYPE_##name##_ = \
- StatsCounter(isolate, "c:" "V8.SizeOf_CODE_TYPE-" #name);
- CODE_KIND_LIST(SC)
+#define SC(name) \
+ {&Counters::count_of_CODE_TYPE_##name##_, \
+ "c:" "V8.CountOf_CODE_TYPE-" #name}, \
+ {&Counters::size_of_CODE_TYPE_##name##_, \
+ "c:" "V8.SizeOf_CODE_TYPE-" #name},
+ CODE_KIND_LIST(SC)
#undef SC
-
-#define SC(name) \
- count_of_FIXED_ARRAY_##name##_ = \
- StatsCounter(isolate, "c:" "V8.CountOf_FIXED_ARRAY-" #name); \
- size_of_FIXED_ARRAY_##name##_ = \
- StatsCounter(isolate, "c:" "V8.SizeOf_FIXED_ARRAY-" #name);
- FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC)
+#define SC(name) \
+ {&Counters::count_of_FIXED_ARRAY_##name##_, \
+ "c:" "V8.CountOf_FIXED_ARRAY-" #name}, \
+ {&Counters::size_of_FIXED_ARRAY_##name##_, \
+ "c:" "V8.SizeOf_FIXED_ARRAY-" #name},
+ FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC)
#undef SC
-
-#define SC(name) \
- count_of_CODE_AGE_##name##_ = \
- StatsCounter(isolate, "c:" "V8.CountOf_CODE_AGE-" #name); \
- size_of_CODE_AGE_##name##_ = \
- StatsCounter(isolate, "c:" "V8.SizeOf_CODE_AGE-" #name);
- CODE_AGE_LIST_COMPLETE(SC)
+#define SC(name) \
+ {&Counters::count_of_CODE_AGE_##name##_, \
+ "c:" "V8.CountOf_CODE_AGE-" #name}, \
+ {&Counters::size_of_CODE_AGE_##name##_, \
+ "c:" "V8.SizeOf_CODE_AGE-" #name},
+ CODE_AGE_LIST_COMPLETE(SC)
#undef SC
+ };
+ // clang-format on
+ for (const auto& counter : kStatsCounters) {
+ this->*counter.member = StatsCounter(isolate, counter.caption);
+ }
}
@@ -275,19 +333,19 @@ class RuntimeCallStatEntries {
void RuntimeCallCounter::Reset() {
count_ = 0;
- time_ = base::TimeDelta();
+ time_ = 0;
}
void RuntimeCallCounter::Dump(v8::tracing::TracedValue* value) {
value->BeginArray(name_);
value->AppendDouble(count_);
- value->AppendDouble(time_.InMicroseconds());
+ value->AppendDouble(time_);
value->EndArray();
}
void RuntimeCallCounter::Add(RuntimeCallCounter* other) {
count_ += other->count();
- time_ += other->time();
+ time_ += other->time().InMicroseconds();
}
void RuntimeCallTimer::Snapshot() {
@@ -303,6 +361,29 @@ void RuntimeCallTimer::Snapshot() {
Resume(now);
}
+RuntimeCallStats::RuntimeCallStats() : in_use_(false) {
+ static const char* const kNames[] = {
+#define CALL_RUNTIME_COUNTER(name) #name,
+ FOR_EACH_MANUAL_COUNTER(CALL_RUNTIME_COUNTER) //
+#undef CALL_RUNTIME_COUNTER
+#define CALL_RUNTIME_COUNTER(name, nargs, ressize) #name,
+ FOR_EACH_INTRINSIC(CALL_RUNTIME_COUNTER) //
+#undef CALL_RUNTIME_COUNTER
+#define CALL_BUILTIN_COUNTER(name) #name,
+ BUILTIN_LIST_C(CALL_BUILTIN_COUNTER) //
+#undef CALL_BUILTIN_COUNTER
+#define CALL_BUILTIN_COUNTER(name) "API_" #name,
+ FOR_EACH_API_COUNTER(CALL_BUILTIN_COUNTER) //
+#undef CALL_BUILTIN_COUNTER
+#define CALL_BUILTIN_COUNTER(name) #name,
+ FOR_EACH_HANDLER_COUNTER(CALL_BUILTIN_COUNTER)
+#undef CALL_BUILTIN_COUNTER
+ };
+ for (int i = 0; i < counters_count; i++) {
+ this->*(counters[i]) = RuntimeCallCounter(kNames[i]);
+ }
+}
+
// static
const RuntimeCallStats::CounterId RuntimeCallStats::counters[] = {
#define CALL_RUNTIME_COUNTER(name) &RuntimeCallStats::name,
« no previous file with comments | « src/counters.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698