Commit 1df36a80 authored by leszeks's avatar leszeks Committed by Commit bot

[turbofan] Add a mutex for recording compilation statistics

There was previously a race between different phases recording their
first entry -- and thus, their insert order -- on the main and
concurrent-compilation thread. This would later manifest as a segfault
when creating the sorted array of phases for --turbo-stats (as two
phases would have the same insert order and so there would be a gap in
the array).

Review-Url: https://codereview.chromium.org/2572713003
Cr-Commit-Position: refs/heads/master@{#41669}
parent 449829b8
...@@ -14,6 +14,8 @@ namespace internal { ...@@ -14,6 +14,8 @@ namespace internal {
void CompilationStatistics::RecordPhaseStats(const char* phase_kind_name, void CompilationStatistics::RecordPhaseStats(const char* phase_kind_name,
const char* phase_name, const char* phase_name,
const BasicStats& stats) { const BasicStats& stats) {
base::LockGuard<base::Mutex> guard(&record_mutex_);
std::string phase_name_str(phase_name); std::string phase_name_str(phase_name);
auto it = phase_map_.find(phase_name_str); auto it = phase_map_.find(phase_name_str);
if (it == phase_map_.end()) { if (it == phase_map_.end()) {
...@@ -26,6 +28,8 @@ void CompilationStatistics::RecordPhaseStats(const char* phase_kind_name, ...@@ -26,6 +28,8 @@ void CompilationStatistics::RecordPhaseStats(const char* phase_kind_name,
void CompilationStatistics::RecordPhaseKindStats(const char* phase_kind_name, void CompilationStatistics::RecordPhaseKindStats(const char* phase_kind_name,
const BasicStats& stats) { const BasicStats& stats) {
base::LockGuard<base::Mutex> guard(&record_mutex_);
std::string phase_kind_name_str(phase_kind_name); std::string phase_kind_name_str(phase_kind_name);
auto it = phase_kind_map_.find(phase_kind_name_str); auto it = phase_kind_map_.find(phase_kind_name_str);
if (it == phase_kind_map_.end()) { if (it == phase_kind_map_.end()) {
...@@ -39,6 +43,8 @@ void CompilationStatistics::RecordPhaseKindStats(const char* phase_kind_name, ...@@ -39,6 +43,8 @@ void CompilationStatistics::RecordPhaseKindStats(const char* phase_kind_name,
void CompilationStatistics::RecordTotalStats(size_t source_size, void CompilationStatistics::RecordTotalStats(size_t source_size,
const BasicStats& stats) { const BasicStats& stats) {
base::LockGuard<base::Mutex> guard(&record_mutex_);
source_size += source_size; source_size += source_size;
total_stats_.Accumulate(stats); total_stats_.Accumulate(stats);
} }
......
...@@ -80,6 +80,7 @@ class CompilationStatistics final : public Malloced { ...@@ -80,6 +80,7 @@ class CompilationStatistics final : public Malloced {
TotalStats total_stats_; TotalStats total_stats_;
PhaseKindMap phase_kind_map_; PhaseKindMap phase_kind_map_;
PhaseMap phase_map_; PhaseMap phase_map_;
base::Mutex record_mutex_;
DISALLOW_COPY_AND_ASSIGN(CompilationStatistics); DISALLOW_COPY_AND_ASSIGN(CompilationStatistics);
}; };
......
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