Commit 022e7ddf authored by mtrofin's avatar mtrofin Committed by Commit bot

Ensure counters are initialized, to avoid init on non-joinable threads.

This occurs in the wasm scenario described in the referenced bug.
DecodeWasmModule collects statistics. Blink inserts a CreateHistogramCallback that
can't instantiate a histogram on non-joinable threads. Turns out, DecodeWasmModule
is scheduled on such a thread, now that we have async compilation.

This fix pre-initializes histograms when the callback is applied, which is assumed to
be in a context that can carry out the instantiation. In Blink, this happens on the main
thread.

BUG=chromium:709684

Review-Url: https://codereview.chromium.org/2812543002
Cr-Commit-Position: refs/heads/master@{#44522}
parent 88e169dc
......@@ -8584,6 +8584,7 @@ void Isolate::SetCreateHistogramFunction(CreateHistogramCallback callback) {
isolate->stats_table()->SetCreateHistogramFunction(callback);
isolate->InitializeLoggingAndCounters();
isolate->counters()->ResetHistograms();
isolate->counters()->InitializeHistograms();
}
......
......@@ -252,6 +252,30 @@ void Counters::ResetHistograms() {
#define HM(name, caption) name##_.Reset();
HISTOGRAM_LEGACY_MEMORY_LIST(HM)
HISTOGRAM_MEMORY_LIST(HM)
#undef HM
}
void Counters::InitializeHistograms() {
#define HR(name, caption, min, max, num_buckets) name##_.Enabled();
HISTOGRAM_RANGE_LIST(HR)
#undef HR
#define HT(name, caption, max, res) name##_.Enabled();
HISTOGRAM_TIMER_LIST(HT)
#undef HT
#define AHT(name, caption) name##_.Enabled();
AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
#undef AHT
#define HP(name, caption) name##_.Enabled();
HISTOGRAM_PERCENTAGE_LIST(HP)
#undef HP
#define HM(name, caption) name##_.Enabled();
HISTOGRAM_LEGACY_MEMORY_LIST(HM)
HISTOGRAM_MEMORY_LIST(HM)
#undef HM
}
......
......@@ -1273,6 +1273,8 @@ class Counters {
void ResetCounters();
void ResetHistograms();
void InitializeHistograms();
RuntimeCallStats* runtime_call_stats() { return &runtime_call_stats_; }
private:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment