Commit 3f022dd4 authored by Jaroslav Sevcik's avatar Jaroslav Sevcik Committed by Commit Bot

Use std::atomic in optimizing compiler dispatcher.

Change-Id: Ia1f47083689abb7d37c91098465a107a71f4dbea
Reviewed-on: https://chromium-review.googlesource.com/c/1225757
Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#57375}
parent 123a56a3
...@@ -112,7 +112,7 @@ OptimizedCompilationJob* OptimizingCompileDispatcher::NextInput( ...@@ -112,7 +112,7 @@ OptimizedCompilationJob* OptimizingCompileDispatcher::NextInput(
input_queue_shift_ = InputQueueIndex(1); input_queue_shift_ = InputQueueIndex(1);
input_queue_length_--; input_queue_length_--;
if (check_if_flushing) { if (check_if_flushing) {
if (static_cast<ModeFlag>(base::Acquire_Load(&mode_)) == FLUSH) { if (mode_ == FLUSH) {
AllowHandleDereference allow_handle_dereference; AllowHandleDereference allow_handle_dereference;
DisposeCompilationJob(job, true); DisposeCompilationJob(job, true);
return nullptr; return nullptr;
...@@ -167,12 +167,12 @@ void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) { ...@@ -167,12 +167,12 @@ void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) {
} }
return; return;
} }
base::Release_Store(&mode_, static_cast<base::AtomicWord>(FLUSH)); mode_ = FLUSH;
if (FLAG_block_concurrent_recompilation) Unblock(); if (FLAG_block_concurrent_recompilation) Unblock();
{ {
base::MutexGuard lock_guard(&ref_count_mutex_); base::MutexGuard lock_guard(&ref_count_mutex_);
while (ref_count_ > 0) ref_count_zero_.Wait(&ref_count_mutex_); while (ref_count_ > 0) ref_count_zero_.Wait(&ref_count_mutex_);
base::Release_Store(&mode_, static_cast<base::AtomicWord>(COMPILE)); mode_ = COMPILE;
} }
FlushOutputQueue(true); FlushOutputQueue(true);
if (FLAG_trace_concurrent_recompilation) { if (FLAG_trace_concurrent_recompilation) {
...@@ -181,12 +181,12 @@ void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) { ...@@ -181,12 +181,12 @@ void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) {
} }
void OptimizingCompileDispatcher::Stop() { void OptimizingCompileDispatcher::Stop() {
base::Release_Store(&mode_, static_cast<base::AtomicWord>(FLUSH)); mode_ = FLUSH;
if (FLAG_block_concurrent_recompilation) Unblock(); if (FLAG_block_concurrent_recompilation) Unblock();
{ {
base::MutexGuard lock_guard(&ref_count_mutex_); base::MutexGuard lock_guard(&ref_count_mutex_);
while (ref_count_ > 0) ref_count_zero_.Wait(&ref_count_mutex_); while (ref_count_ > 0) ref_count_zero_.Wait(&ref_count_mutex_);
base::Release_Store(&mode_, static_cast<base::AtomicWord>(COMPILE)); mode_ = COMPILE;
} }
if (recompilation_delay_ != 0) { if (recompilation_delay_ != 0) {
......
...@@ -5,10 +5,10 @@ ...@@ -5,10 +5,10 @@
#ifndef V8_COMPILER_DISPATCHER_OPTIMIZING_COMPILE_DISPATCHER_H_ #ifndef V8_COMPILER_DISPATCHER_OPTIMIZING_COMPILE_DISPATCHER_H_
#define V8_COMPILER_DISPATCHER_OPTIMIZING_COMPILE_DISPATCHER_H_ #define V8_COMPILER_DISPATCHER_OPTIMIZING_COMPILE_DISPATCHER_H_
#include <atomic>
#include <queue> #include <queue>
#include "src/allocation.h" #include "src/allocation.h"
#include "src/base/atomicops.h"
#include "src/base/platform/condition-variable.h" #include "src/base/platform/condition-variable.h"
#include "src/base/platform/mutex.h" #include "src/base/platform/mutex.h"
#include "src/base/platform/platform.h" #include "src/base/platform/platform.h"
...@@ -28,10 +28,10 @@ class V8_EXPORT_PRIVATE OptimizingCompileDispatcher { ...@@ -28,10 +28,10 @@ class V8_EXPORT_PRIVATE OptimizingCompileDispatcher {
input_queue_capacity_(FLAG_concurrent_recompilation_queue_length), input_queue_capacity_(FLAG_concurrent_recompilation_queue_length),
input_queue_length_(0), input_queue_length_(0),
input_queue_shift_(0), input_queue_shift_(0),
mode_(COMPILE),
blocked_jobs_(0), blocked_jobs_(0),
ref_count_(0), ref_count_(0),
recompilation_delay_(FLAG_concurrent_recompilation_delay) { recompilation_delay_(FLAG_concurrent_recompilation_delay) {
base::Relaxed_Store(&mode_, static_cast<base::AtomicWord>(COMPILE));
input_queue_ = NewArray<OptimizedCompilationJob*>(input_queue_capacity_); input_queue_ = NewArray<OptimizedCompilationJob*>(input_queue_capacity_);
} }
...@@ -82,7 +82,7 @@ class V8_EXPORT_PRIVATE OptimizingCompileDispatcher { ...@@ -82,7 +82,7 @@ class V8_EXPORT_PRIVATE OptimizingCompileDispatcher {
// different threads. // different threads.
base::Mutex output_queue_mutex_; base::Mutex output_queue_mutex_;
volatile base::AtomicWord mode_; std::atomic<ModeFlag> mode_;
int blocked_jobs_; int blocked_jobs_;
......
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